Charmhub Namespacing

There are no namespaces on Charmhub.

Charm store implements the concept of namespaces: all users get a “namespace” and can “own” any charm names under that namespace. For example:

cs:~john/mysql
cs:~peter/mysql

The base name for both charms is “mysql” but each lives under a different namespace and must be referenced with a fully-qualified name when deploying, for example:

juju deploy cs:~john/mysql

Charm store also provides the concept of “promulgation”. In order to make it easier to install high-quality or well-known charms, a charm can be “promulgated” which means it can be referenced by the charm name only. For example, if cs:~john/mysql is promulgated, then

juju install cs:mysql

will actually install cs:~john/mysql.

Note that promulgation can change over time; if it turns out Peter’s mysql charm is a better candidate for promulgation, then John’s can get unpromulgated and Peter’s gets promulgated, at which point:

juju install cs:mysql

will actually install cs:~peter/mysql.

Charmhub implements a flat namespace with no concept of promulgation. Instead, the top-level charm name always exists as a first-class entity. Developer changes are handled by “transferring” the charm name (akin to snap transfers).

So in the example:

ch:mysql

is the only charm called “mysql”. This can be owned by, for example, John, but it doesn’t change the name of the charm. If Peter has a higher quality mysql charm and wants to publish it, the charm name can be transferred to Peter (the charm name doesn’t change). Peter is then able to publish his charm builds under this name.