# Guide for Cytomine developers

In this section, you will learn how to develop Cytomine components to extend the Cytomine platform or develop new features.

If you don't know Cytomine yet, follow the Get Started page in the user guide to have a tour and discover the main concept of Cytomine.

As the Cytomine project is composed of multiple services with different programming language, it is possible to contribute to one or another service according to your skills.

Please see the How to contribute page to discover the multiple ways of improving Cytomine and our Contributor Code of Conduct.

The main components of the Cytomine project are

  • The Core (opens new window) component. It contains the programming logic, the object representation, their dependencies and the access permissions. Core is also the component connected to the databases. It is developed in Grails (opens new window).
  • The IMS (opens new window) (Image Management Server) component. Connected to the storage disk, the uploads are made on IMS and it will convert, if necessary, and deploy the uploaded images. It will also return the tiles displayed in the viewer when you browse an image with its dependencies (For example see IIP Image Server (opens new window)). It is developed in Grails.
  • The Cytomine-Web-UI (opens new window) component is our supported front-end. It is a Web User Interface developed in VueJS. It is every graphic component that you can see into your Cytomine browser navigation.
  • The external clients (currently Javascript (opens new window), Python (opens new window) and Java (opens new window)). As Cytomine is a RESTful platform, it is possible to interact with a Cytomine instance with HTTP 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. As we know, the Java client is mostly used for integration in other applications, the Python client is used for IA researchers and scripting and the Javascript client is used to build Web User Interface.

The main componant are on the following architecture graph :