Hi Developers! Suppose you want to create your ObjectScript library to be distributed via [ObjectScript Package Manager](https://openexchange.intersystems.com/package/ObjectScript-Package-Manager-2). And there is an obvious question: what is the naming convention on the packages and class names? **Naming packages and classnames** There is already some accepted practice with package managers and we will follow the best practices in this field. The most reasonable and simple looks the approach with having company as the first package then project as the second and then classes and subpackages of the project. The folder structure in this case looks like: /src/cls/company/project/subpackage/TheClass.cls Package names are written in all lower case to avoid conflict with the names of classes or interfaces. So the full qualified name of the class is _company.project.subpackage.TheClass.cls._ The approach borrowed from the naming convention for [java classes.](https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html) So the example of the class code could be: class company.project.subpackage.TheClass { ClassMethod HelloWorld as %String {  return "Hello World!" } } If you are not the company but an individual developer, the company package is changed to your surname or nickname whatever you prefer. In my case, the class will look like shvarov.library.demo.Test.cls, and the code: class shvarov.library.demo.Test.cls { ClassMethod Version as %String {  return "1.0.0"} } } **Github profiles, projects, and ObjectScript class names** Ok! What about the libraries which are published on Github? This naming convention can have a clear reflection of  GitHub repos cause every Github repo has the structure of the company/developer and the project.  Examples: [company's profile](https://github.com/basenube) and [project's repo](https://github.com/basenube/iris2bq), and here is [developer's profile](https://github.com/rfns) and [one of his repo](https://github.com/rfns/frontier).  But often companies and repos on Github contain hyphens. Hyphens and underscores are not allowed in ObjectScript class names. So in this case developer may introduce a shortcut name for company and project names in ObjectScript classes. E.g. like here [in this template project.](https://github.com/intersystems-community/objectscript-package-template) Here we have an organisation with name [intersystems-community](https://github.com/intersystems-community/) and project with name [objectscript-package-template](https://github.com/intersystems-community/objectscript-package-template).  And developer introduces 'community' to reflect intersystems-community **company** and 'objectscript' to reflect objectscript-package-template **project**. So the class, in this case, looks like: Class community.objectscript.ClassExample { ClassMethod Test() As %Status {     set a=42     return "It works!" } } [Same class in the repo](https://github.com/intersystems-community/objectscript-package-template/blob/master/src/cls/community/objectscript/ClassExample.cls) In order to simplify the development of ObjectScript packages please feel free to use the template. It contains the proper naming for packages and classes and also contains the related module.xml and the dockerfile to make immediate tests with the package. [The dockerfile](https://github.com/intersystems-community/objectscript-package-template/blob/master/Dockerfile) contains lines that install the ObjectScript Package Manager client (ZPM) so you are able to build and test your new package. This was described in [the following article](https://community.intersystems.com/post/anatomy-zpm-module-packaging-your-intersystems-solution) but will remind you key calls to test any package:
IRISAPP>zpm
IRISAPP:zpm> load /irisdev/app/
.... loads the package
IRISAPP:zpm>package-name package -v
... tests package installation
  **Package names on ObjectScript Package Manager** The structure of module.xml requests you to introduce the name of the ObjectScript package to be used in ObjectScript Package Manager. ZPM supports hyphens in names so the name can be same as you have for the project. E.g. for this particular template ObjectScript module then name will be 'objectscript-package-template', which is stated in 'module.xml' and so could be installed as:
USER:zpm> install objectscript-package-template
So! This is the proposal for the community on ObjectScript packages naming convention.  Any ideas on a better approach are very welcome!