C++ Interface for communicating with Cricut x-y plotters. Originally developed by vangdfang on github.
  • C++ 66.3%
  • CMake 15.9%
  • G-code 15.1%
  • C 2.6%
  • SWIG 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Blizzard Finnegan bd884a55f4
Some checks failed
CMake / Build on macOS-latest (push) Has been cancelled
CMake / Build on ubuntu-latest (push) Has been cancelled
Revert static->dynamic cast; build time complaints
2026-09-19 22:21:05 -06:00
.github/workflows
cmake Builds with submodules, should hopefully work 2026-09-19 21:15:28 -06:00
deps Update cmake lists, and bind boost to release version 2026-09-18 13:30:45 -06:00
include Builds with submodules, should hopefully work 2026-09-19 21:15:28 -06:00
old_code
src Revert static->dynamic cast; build time complaints 2026-09-19 22:21:05 -06:00
.clang-format
.clang-tidy Builds with submodules, should hopefully work 2026-09-19 21:15:28 -06:00
.gitignore
.gitmodules Add submodule for boost 2026-09-18 13:26:33 -06:00
CMakeLists.txt Revert static->dynamic cast; build time complaints 2026-09-19 22:21:05 -06:00
compile_commands.json Builds with submodules, should hopefully work 2026-09-19 21:15:28 -06:00
README.md Revert static->dynamic cast; build time complaints 2026-09-19 22:21:05 -06:00

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

Developer Notes

Build Dependencies

Currently the list of dependencies are as follows:

  • spdlog (logging library)
    • minimum required version: 1.15.2
    • apt-based (Ubuntu, Debian, etc) package name: libspdlog-dev
  • thorvg (SVG parsing library)
    • minimum required version: 1.0.0
    • thorvg is not distributed in debian repositories; however it can be installed from the submodule using the following commands:
meson setup build --buildtype=release -Ddefault_library=static
meson compile -C build
meson install -C build
  • Boost (used for asynchronous serial I/O, command line argument parsing, and error handling)
    • Minimum required boost version: 1.83.0
    • apt-based (Ubuntu, Debian, etc) package names: libboost-program-options-dev libboost-system-dev libasio-dev

For each library, there are 3 possible inclusion methods, depending on preference and your environment. Listed flags are in ordered priority (The lower numbered flags are used first, and the rest are ignored).

  1. Submodule inclusion: Clone the repo with --recurse-submodules, and use the flag -D ${LIBRARY}_SUBMODULE=ON to enable.
  2. System-installed: You already have the libraries installed on the system, and the installed versions are compatible with the codebase (check required versions). Use the flag -D ${LIBRARY}_SYSTEM=ON. For reasons unknown to me, thorvg cannot be imported from the system at time of writing.
  3. Fetch: You don't want to deal with dependencies, let CMake do the work. Use the flag -D ${LIBRARY}_FETCH=ON. Note that the initial configure step will take more time, as CMake will be fetching a zip file, unzipping it, and potentially building it.

Example: Use the spdlog submodule, get ThorVG from the system, and fetch Boost.

cmake -B build -D SPDLOG_SUBMODULE=ON -D SPDLOG_FETCH=ON -D BOOST_SYSTEM=ON -D THORVG_FETCH=ON

Note that SPDLOG_FETCH is enabled, but it is ignored since submodule is enabled and is higher priority.

Internal

TODOs

  • Finish main
    • parse args
    • do the work
  • Fill in developer/readme information.
  • Fill in build process
  • fill in usage (CI to build targets? 🤔)
    • Use CI as starting point
  • rename project to express intent
  • research Type Erasure as alternative for inheritance?
    • See CppCon2026 talk on type erasure