How does multi-tenancy work?

How does multi-tenancy work? ie I want to have multiple companies with sub-groups of users in each company - to follow, how would we customize the interface for each company? 

There are two good ways to achieve multi-tenancy with Cloud CMS.

- One is to use multiple "projects" - i.e. one per customer. Each project has it's own domain of users and groups, as well as it's own content definitions, instances and ACLs. As such, you can use each project to store the content on a per-client basis. You can also have distinct API keys per project application, allowing you to effectively multiplex access from a front-end application. Depending on which API key is used or which user is logged in to your front end app, you can limit access to the project spaces effectively letting you provide what a lot of people consider to be "multi-tenancy" as defined by a custom front-end URL (a single front end app virtually hosting many clients with different sets of content retrieved depending on who is logged in).

- Another is to run Cloud CMS on-premise (using Docker) and take advantage of what we consider of Cloud CMS' ability to provision multiple tenants. These are isolated partitions of Cloud CMS where all of the data stores, billing information, metrics tracking and even back end data persistence is configurable on a per-tenant basis. This is useful (and required) if you're running a business (such as Cloud CMS) where you have multiple customers with different subscriptions, billing and features. It allows you to very effectively white label Cloud CMS and use it as a single platform for lots of customers and lots of projects per customer.

In our experience, most of our own clients start with the first option. The second option is less common but very useful for consultancies or OEM offerings (where Cloud CMS is embedded into a client's application). Furthermore, you can do the first option even if you're running on-premise with Docker so it's generally a good way to start.

With both scenarios, you can customize the user interface at both the "per-tenant" level (option 2) and the "per-project" level (option 1). Interface customization is done using JS/HTML/CSS AMD modules that you register and deploy on our SaaS offering. These modules are also deployed for Docker / On-Premise though in that case we provide a build scenario so that you can pre-bundle everything into a common deployment ahead of release.

For information on UI extensions, check out:

The UI extensions via AMD allow you to completely tweak the available pages, menu options, buttons, labels and navigation of the user interface on a per-role basis. Thus, two different users can log in and get an entirely different and customized interface. You can also register new pages, new form elements (controls), new buttons/actions and many more things.