A method of deploying an application comprising: publishing a first code package to a package registry; publishing one or more further code packages to the package registry; assembling application source code by combining the first code package with one or more of the further code packages from the package registry in accordance with dependencies specified in an application manifest file, wherein the first code package comprises code specifying a first definition of a class and at least one of the one or more further code packages comprises code specifying a further definition of the class, wherein the further definition of the class comprises: prototype merging so that on compilation the first definition of the class and the further definition of the class are loaded as a single class, wherein the prototype merging comprises using a decorator function to incorporate, on loading, the code specifying the first definition of the class with the code specifying the further definition of the class, and module augmentation so that the first and further definitions of the class are treated as a single merged class by development tools, wherein the module augmentation comprises using a TypeScript "declare module" instruction; the method further comprising: writing the first code package and the one or more further code packages in TypeScript, wherein the first code package and the one or more further code packages are transpiled into JavaScript before being published to the package registry. publishing a first code package to a package registry; publishing one or more further code packages to the package registry; assembling application source code by combining the first code package with one or more of the further code packages from the package registry in accordance with dependencies specified in an application manifest file, wherein the first code package comprises code specifying a first definition of a class and at least one of the one or more further code packages comprises code specifying a further definition of the class, wherein the further definition of the class comprises: prototype merging so that on compilation the first definition of the class and the further definition of the class are loaded as a single class, wherein the prototype merging comprises using a decorator function to incorporate, on loading, the code specifying the first definition of the class with the code specifying the further definition of the class, and module augmentation so that the first and further definitions of the class are treated as a single merged class by development tools, wherein the module augmentation comprises using a TypeScript "declare module" instruction; the method further comprising: writing the first code package and the one or more further code packages in TypeScript, wherein the first code package and the one or more further code packages are transpiled into JavaScript before being published to the package registry. prototype merging so that on compilation the first definition of the class and the further definition of the class are loaded as a single class, wherein the prototype merging comprises using a decorator function to incorporate, on loading, the code specifying the first definition of the class with the code specifying the further definition of the class, and module augmentation so that the first and further definitions of the class are treated as a single merged class by development tools, wherein the module augmentation comprises using a TypeScript "declare module" instruction; the method further comprising: writing the first code package and the one or more further code packages in TypeScript, wherein the first code package and the one or more further code packages are transpiled into JavaScript before being published to the package registry.