C++ Interface for communicating with Cricut x-y plotters. Originally developed by vangdfang on github.
  • C++ 63.6%
  • G-code 18.7%
  • Python 8.4%
  • CMake 5.4%
  • C 3.5%
  • Other 0.4%
Find a file
Blizzard Finnegan 79365c34a7
Some checks failed
CMake / Build on macOS-latest (push) Has been cancelled
CMake / Build on ubuntu-latest (push) Has been cancelled
Continue setting up alternate SVG library
2026-06-06 16:46:20 -06:00
.github/workflows Run workflows on all PR events? 2021-04-28 14:05:58 -04:00
.vscode remove unnecessary manual cpp config 2021-04-28 13:56:10 -04:00
deps Continue setting up alternate SVG library 2026-06-06 16:46:20 -06:00
include Add archived keys 2026-06-06 13:19:39 -06:00
lib [WIP] Start working on updating 2026-06-06 13:17:45 -06:00
util Continue setting up alternate SVG library 2026-06-06 16:46:20 -06:00
.gitignore .gitignore editor temp file 2021-04-27 23:29:50 -05:00
.gitmodules Continue setting up alternate SVG library 2026-06-06 16:46:20 -06:00
bcpp.sh Adding Win32 build instructions and support. 2010-08-11 07:27:03 -05:00
build-win32.sh Adding Win32 build instructions and support. 2010-08-11 07:27:03 -05:00
CMakeLists.txt Continue setting up alternate SVG library 2026-06-06 16:46:20 -06:00
README.md [WIP] Start working on updating 2026-06-06 13:17:45 -06:00
Toolchain.mingw32 Document how to compile for Windows 2021-04-11 00:17:30 -05:00

Serial communications and a simple test application for interfacing with cutters.

Film at 11.

Cutters

This list is incomplete. If you have more information, please file a pull request to update this table or otherwise let us know:

Cutter Version Status
Cricut Cake v2.35 should work
Cricut Cake Mini v1.54 should work
Cricut Create v1.51 should work
Cricut Create v1.54 should work
Cricut Expression v2.00 too old
Cricut Expression v2.31 works
Cricut Expression v2.34 should work
Cricut Expression v2.43 should work
Cricut Personal v1.00 too old
Cricut Personal v1.31 works
Cricut Personal v1.34 works

Encryption / communication keys

These are not provided with the library for various reasons. Please do not ask for them here or elsewhere.

Providing keys

You must provide keys at runtime by passing in a path to a key configuration file to each utility.

Key config files are a simple text file with a key's name and a key on each line, separated by whitespace. Like this (using fake keys):

MOVE_KEY_0  0x0123abcd
MOVE_KEY_1  0x0123abcd
MOVE_KEY_2  0x0123abcd
MOVE_KEY_3  0x0123abcd
LINE_KEY_0  0x0123abcd
LINE_KEY_1  0x0123abcd
LINE_KEY_2  0x0123abcd
LINE_KEY_3  0x0123abcd
CURVE_KEY_0  0x0123abcd
CURVE_KEY_1  0x0123abcd
CURVE_KEY_2  0x0123abcd
CURVE_KEY_3  0x0123abcd

Running any command that requires keys will also explain this format :).

Developer Notes

Dependencies

libcutter itself does not have many dependencies outside of OS-level serial port drivers. However, some of the utilities need the following:

  • libsvg - a copy is in deps folder, need to patch png_set_gray_1_2_4_to_8 to png_set_expand_gray_1_2_4_to_8 in src/svg_image.c
  • libpng - needed by libsvg
  • SDL2 & SDL2GFX - needed by some of the simulator tools

Installing libsvg

If you're on a Mac:

brew install libsvg # or `brew install --build-from-source libsvg`

Otherwise, extract the file in the deps/ directory and follow the instructions in INSTALL. You may need to apply the patch mentioned above: patch png_set_gray_1_2_4_to_8 to png_set_expand_gray_1_2_4_to_8 in src/svg_image.c.

Building for Linux/UNIX/Mac

cmake --preset release -G Ninja -B build
cmake --build build

Note: draw_svg is dynamically linked to libsvg (among a few other things), which means that you must have installed libsvg to run it.

Note: If you're on a Mac, this will probably show an error message that the file was not written by an authorized developer. You can fix this by:

  1. Run the above so that you get the error message.
  2. Open Settings > Security & Privacy > General
  3. Under Allow apps downloaded from, you should see the name of the executable you just ran with a button Allow anyway. Click that button.
  4. Run the program again. It should now work!