Repositories
Cura uses a number of repositories where parts of our source code are separated, in order to get a cleaner architecture. Those repositories are:
- Cura is the main repository for the front-end of Cura. This contains:
- all of the business logic for the front-end, including the specific types of profiles that are available
- the concept of 3D printers and materials
- specific tools for handling 3D printed models
- pretty much all of the GUI
- Ultimaker services such as the Marketplace and accounts.
- Uranium is the underlying framework the Cura repository is built on. Uranium is a framework for desktop applications that handle 3D models. It has a separate back-end. This provides Cura with:
- a basic GUI framework (Qt)
- a 3D scene, a rendering system
- a plug-in system
- a system for stacked profiles that change settings.
- CuraEngine is the slicer used by Cura in the background. This does the actual process that converts 3D models into a toolpath for the printer.
- libArcus handles the communication to CuraEngine. libArcus is a small library that wraps around Protobuf in order to make it run over a local socket.
- cura-build: Cura's build scripts.
- cura-build-environment build scripts for building dependencies.
There are also a number of repositories under our control that are not integral parts of Cura's architecture, but more like separated side-gigs:
- libSavitar is used for loading and writing 3MF files.
- libCharon is used for loading and writing UFP files.
- cura-binary-data pre-compiled parts to make the build system a bit simpler. This holds things which would require considerable tooling to build automatically like:
- the machine-readable translation files
- the Marlin builds for firmware updates
- Cura-squish-tests: automated GUI tests.
- fdm_materials stores Material profiles. This is separated out and combined in our build process, so that the firmware for Ultimaker's printers can use the same set of profiles too.
Interplay
At a very high level, Cura's repositories interconnect as follows:
![Overview of interplay between repositories](/SMusatov/Cura/raw/detached/docs/resources/repositories.svg)