# Architecture
In this section, you will learn how to extend the functionality of the Cytomine platform or develop new features.
If you don't know Cytomine yet, follow the Getting Started page in the user guide to have a tour and discover the main concepts of Cytomine.
# List of containers
Cytomine consists of a collection of services, each running in its own Docker container, as listed below:
Name | Required | Goal |
---|---|---|
Nginx | Yes | Main HTTP(S) proxy dispatching incoming requests. |
Core | Yes | Main Cytomine server. Provide the REST API. |
PostGIS | Yes | Main database. Store most of data. |
MongoDB | Yes | Secondary database. Store activity data. |
PIMS | Yes | Image management server. |
PIMS-cache | Yes | Fast cache for images. |
CBIR | Yes | Service for similar search. |
IAM | Yes | Service for authentication. |
App Engine | No | Service to execute containerised apps. |
Web UI | No | Web graphical user interface. |
SAM | No | Annotation refinement module. |
- Core (opens new window). This service contains the programming logic, object representations, dependencies, and access permissions. The Core service is also responsible for connecting to the databases. It is developed using the Spring Boot (opens new window) framework.
- PIMS (opens new window). This service is the image management system and is connected to the storage disk. Imported images on Cytomine are handled by this service. It is also responsible to return the tiles displayed in the viewer when you browse an image as well as the thumbnails and annotation crops. It is developed in Python using the FastAPI (opens new window) framework.
- Web-UI (opens new window). This service is our officially supported front-end. It is a Web User Graphical Interface developed in Vue 2 (opens new window). All graphical services you see during your Cytomine browser navigation are implemented here.
- App Engine (opens new window). This service is an execution system that allows developers to integrate their own algorithms or applications within the Cytomine platform. It is developed using the Spring Boot (opens new window) framework.
- The external clients API libraries (currently Python (opens new window)). As Cytomine is a RESTful platform, it is possible to interact with a Cytomine instance with HTTP(S) requests and without using a graphical interface. Clients are libraries developed to help you to integrate interactions with Cytomine in your scripts or your applications.