Behind Cozy's polished and user-friendly interface hides an advanced platform based on modern web technologies. To get a general idea of Cozy's overall architecture, you can think of it as a cake with two layers: Apps and Data.
The main components in the Apps layer include the Controller service responsible for deploying, removing, and updating apps. Controller has its own web-based graphical interface called the Home that lets you administer Cozy: deploy, update, and remove applications as well as modify settings like language, timezone, etc.
The data system in the Data layer enables the storing, querying, and searching of data and files. This system also features services for performing various tasks, such as managing tags and sending emails. The Data layer also includes a database for working with data and a file system for storing, accessing, and managing files. The indexer component is responsible for indexing the stored data for faster and more efficient search.
The Apps layer sits behind a proxy that acts as a dispatcher, redirecting requests received from external clients (browsers, native apps, third-party services, etc.) to the appropriate apps. The proxy also handles Cozy's authentication and authorization, including registration, login, logout, and password reset operations.
Cozy also features the Data Proxy component which keeps a part of the database on a smartphone or laptop in sync with a smaller version of Cozy's main database. This way, Cozy mobile apps (currently only the Files app is supported) can access data as if they were stored locally. This mechanism offers two benefits: better overall performance and support for the offline mode.