Model or dataset
Ultimaker/CuraEngine avatar
Ultimaker/CuraEngine

CuraEngine GCode generation for embedded slicing workflows

Powerful, fast and robust engine for converting 3D models into g-code instructions for 3D printers. It is part of the larger open source project Cura.

1,858 stars933 forksC++AGPL-3.0

At a glance

What is it?
CuraEngine is the C++ slicing engine behind Cura, designed to turn 3D models into printer instructions and also serve standalone applications. Its source and protocol files suit engineers who need control over GCode generation, but the README does not provide enough build or usage detail for independent adoption without following its linked wiki.
Who is it for?
Adopt CuraEngine when the application needs Cura's GCode generation engine, can accommodate its AGPL-3.0 licensing terms, and is prepared to investigate its current build and command-line interface through the linked source-building wiki. Do not choose it as a turnkey end-user slicer or assume the README is a complete integration guide.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

CuraEngine's role between STL geometry and printer motion

CuraEngine solves a specific stage of the 3D-printing workflow: converting a 3D model into GCode instructions that a printer can execute. The repository describes it as a C++ console application for GCode generation and identifies it as an integral part of Cura. That distinction matters because CuraEngine is not positioned as a complete desktop slicing application with a model viewer, printer selection interface, profile editor, or print controls. It is the engine responsible for producing the machine-level output.

The project is intended for two audiences. The first is developers working with the wider Cura software ecosystem, where CuraEngine supplies the slicing engine. The second is developers embedding slicing into another application. The README explicitly says that CuraEngine can be used separately or integrated into a custom application. For those users, the important question is not whether it can generate GCode in principle, but how much application work is required to prepare input, printer settings, output files, errors, and user experience around the engine.

The README does not identify supported model formats, printer protocols, or the complete set of configurable settings. It also does not document the supported operating systems or provide a binary distribution. Those omissions make the linked installation documentation and the actual source configuration part of the evaluation, rather than optional background reading.

Protocol, source layout, and the C++ integration surface

The repository layout points to CuraEngine as a compiled C++ project with a conventional separation between public declarations, implementation files, tests, packaging metadata, and documentation. The top level includes `CMakeLists.txt`, `conanfile.py`, `conandata.yml`, and `test_package/`, indicating a CMake-based build with a Conan package definition. Source and interface code are separated between `include/` and `src/`, while `tests/` provides a dedicated test area. These are concrete signs that code organization and package consumption are considered parts of the project, although the README does not explain any individual build option.

`Cura.proto` is especially relevant to integration. Its presence, together with the `protobuf` topic and the `libarcus` topic, indicates that structured communication is part of the repository rather than an incidental file format. The README does not document the protocol schema, supported messages, or whether external applications are expected to exchange those messages directly. It would therefore be unsafe to treat the `.proto` file alone as a stable public API.

The engine is designed to be invoked separately or integrated, but the README gives no library entry point or C++ API example. This is a meaningful gap for an engineer considering direct embedding. A command-driven subprocess may be operationally simpler, while in-process integration may require additional repository inspection. The documentation does not settle that choice.

Building CuraEngine and reaching the first useful result

The README does not provide installation commands, prerequisites, platform instructions, or a first-use example. Instead, its Installation badge links to the project wiki page titled `Building CuraEngine From Source`. That is the authoritative starting point named by the repository. Because no commands or configuration excerpts appear in the README, this article does not invent a `cmake`, Conan, or compiler invocation.

A practical first evaluation would need to produce an executable from the current `main` branch, supply it with a model and the required slicing configuration, and retain the resulting GCode for comparison. The README confirms that the result should be GCode instructions for a 3D printer, but it does not name the input files or command-line arguments needed for that sequence. In particular, it does not say whether a printer definition is loaded from a file, supplied through communication messages, or selected by an option.

Before treating a local build as successful, an evaluator should therefore check the linked build page against the current repository state. The presence of `CMakeLists.txt` and `conanfile.py` makes those files the first configuration sources to inspect, while `Cura.proto` and the Internals wiki link define areas that may affect integration. The README's badges for unit tests and Conan packaging point to those workflows, but badge presence is not proof of their behavior in a particular environment.

Where CuraEngine is the wrong layer of tooling

The main mismatch is choosing CuraEngine for a workflow that needs a complete slicing desktop. CuraEngine can generate GCode, but the repository description does not claim to provide model preparation, visual inspection, profile management, device discovery, print monitoring, or printer control. A user who wants to open an STL file, choose a printer, adjust settings, preview layers, and start a print through a graphical interface would be looking beyond what the README establishes about this repository.

It is also a poor fit for a small script that only needs to wrap another existing slicer if the application has no reason to align with Cura or absorb the cost of operating CuraEngine's C++ and dependency stack. The engine's value comes from its slicer logic and its place in Cura, not from being a universal CLI around every printer workflow.

Another boundary is configuration certainty. Printer profiles and GCode post-processing behavior are often decisive in real deployments, but the README does not enumerate supported printers, profile formats, or version compatibility. This article cannot confirm whether it suits a particular firmware, material profile, or printer definition. Those details must be established from the project documentation and source before adoption.

CuraEngine versus the older Skeinforge Engine

The README positions CuraEngine as a faster alternative to the older Skeinforge Engine. That is the repository's own comparison, but the README gives no benchmark data and does not describe how either engine handles a specific model. The distinction should therefore not be read as a general performance guarantee for every printer or model.

The architectural difference visible in this repository is its integration with Cura and its packaged C++ structure. CuraEngine has a protocol definition, public and private source directories, CMake metadata, Conan packaging data, tests, and benchmark directories. The README does not provide equivalent Skeinforge source details, so a broader technical comparison cannot be made from the documented evidence.

For adoption, the useful distinction is therefore scope rather than an unsupported speed claim. Teams already using Cura can evaluate whether they need the standalone engine at all, because it is documented as an integral part of that project. Teams building a separate application can investigate its integration model, but should not assume that faster than Skeinforge means suitable for every workflow without validating output for their own model, profile, and printer.

AGPL-3.0 obligations and upgrade work

CuraEngine is licensed under `AGPL-3.0`, and the repository includes a `LICENSE` file. Any team considering modified builds, network use, or redistribution needs to review how that licence applies to its deployment model. This is a compliance consideration rather than a quality judgment, and the README does not replace the licence text or provide legal interpretation.

The repository is not archived. Its last push was on 2026-10-15, so recent repository activity is present, but the release history lists `2.7.0` from 2017-08-30 as its newest listed release. The README does not explain whether newer development is consumed from `main`, packaged through another channel, or associated with releases outside that list. Teams should verify the version they actually build rather than infer a release number from the branch name.

Upgrade work is likely to include checking changes to `Cura.proto`, CMake configuration, dependencies managed through Conan, printer settings, and generated GCode. The repository includes tests and a `benchmark/` directory, but no test command or compatibility policy is documented in the README. The absence of those details limits confidence in upgrade planning.

Editorial conclusion

Adopt CuraEngine when the application needs Cura's GCode generation engine, can accommodate its AGPL-3.0 licensing terms, and is prepared to investigate its current build and command-line interface through the linked source-building wiki. Do not choose it as a turnkey end-user slicer or assume the README is a complete integration guide. Before committing, verify that the current branch builds with your toolchain and dependencies, that your printer profile can be supplied through the supported interface, and that the generated GCode matches a known model.

Frequently asked questions

Can CuraEngine be used independently of Cura?

Yes. The README states that CuraEngine can be used separately, integrated into another application, or used as part of Cura. It does not document the complete command-line interface or embedding API.

What does CuraEngine generate?

CuraEngine converts 3D models into GCode instructions for 3D printers. It is a C++ console application focused on GCode generation, not a complete printer-control application.

How do I build CuraEngine from source?

The README links to the project wiki page titled `Building CuraEngine From Source`. It does not include the build commands, prerequisites, or supported platform list.

What license does CuraEngine use?

The repository identifies `AGPL-3.0` as its license and includes a `LICENSE` file. Review the license text for obligations that apply to your use and distribution model.

Official sources

  1. License: AGPL-3.0
  2. Project website
  3. README
  4. Releases
  5. Ultimaker/CuraEngine on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ultimaker-curaengine.svg)](https://hysenlabs.com/projects/ultimaker-curaengine)

Was this useful?