# Introducing a Python Plugin System (WIP) This PR opens up a way to extend OrcaSlicer with **Python plugins** — small scripts (or full wheels) that run inside an embedded CPython interpreter, without anyone having to fork the app or touch the C++ core. I'm putting this up **early and on purpose**. It works end-to-end today, but it is not finished and the public surface is deliberately small. Before we lock anything in, we want the community's opinions on the three decisions that are hard to reverse later: **what API we expose, which plugin types we invest in, and how the security/audit layer should behave.** Consider this a request for comments more than a merge candidate. ## Why People keep wanting to bolt their own behavior onto the slicer — custom G-code post-processing, automation, bespoke printer/host integrations, one-off analysis. Today that means maintaining a patched fork. The goal here is a *sanctioned* extension path: a stable, documented seam where a plugin can hook into a specific point in OrcaSlicer's workflow, with a clear boundary around what plugin code is allowed to do. ## What's in this PR **An embedded Python runtime.** A single CPython interpreter is started once (intended to be on the main thread), with proper GIL handoff so plugin code can run from worker threads. Plugin `stderr` (including tracebacks from threads a plugin spawns) is persisted to `data_dir()/log/python_*.log`. **One API module, `orca`.** This is the surface a plugin sees. It exposes the plugin base classes, the `@orca.plugin` decorator and `register_capability()`, a typed `ExecutionResult`, and the `PluginType`/`PluginResult` enums, along with per-type base classes under `orca.gcode` / `orca.script` / `orca.printer_agent`. A host bridge, `orca.host`, provides **read-only** access to the current model and preset/config values, plus interactive `host.plater()` and `host.ui` helpers (messages, dialogs, windows, progress). There is deliberately no *write* access to slicer models or config, and no general GUI/toolkit access beyond these host helpers. The exact shape of `orca.host` is one of the things we most want feedback on. **Three plugin types to start:** - `post-processing` — runs during G-code export and receives the G-code path + output context. - `script` — a manual "Run" action from the Plugins dialog. - `printer-connection` — a Python "printer agent" that registers into the network layer on load. This is still WIP, along with a printer agent workflow that is also WIP. (The `PluginType` enum reserves several more names — Automation, Analysis, Importer, Exporter, Visualization — but only the three above are wired up.) **Two packaging forms:** a single `.py` file with [PEP 723](https://peps.python.org/pep-0723/) inline metadata, or a `.whl` wheel (with third-party dependencies installed via a bundled `uv`). **Discovery, install, and a Plugins dialog** — local side-loading plus a cloud subscription service, catalog/loader lifecycle, and per-plugin error reporting in the UI. **Audit-hook groundwork (PEP 578).** Every C++→Python call opens a per-call audit context, and a CPython audit hook filters filesystem access against a write allow-list (`data_dir()`, plus scoped roots like the current G-code folder). This is *groundwork, not a sandbox* — see Limitations. **Docs.** Substantially complete author and contributor guides live under `docs/plugins/` (development guide, security/audit deep-dive, architecture overview, worked examples); the *feature* is what's WIP, not the docs. ## Orca Cloud integration Plugins are **fully integrated with Orca Cloud**, distributed in a similar way to preset bundles — so this builds directly on the cloud foundation rather than bolting on a separate mechanism. - **Subscribe, don't side-load.** Instead of manually copying files, you subscribe to a plugin from the cloud and OrcaSlicer pulls it down and loads it for you — the same one-click experience as preset bundles. - **Tied to your account, synced across machines.** Subscribed plugins live under your user (`orca_plugins/_subscribed/<user_id>/`) and follow you to any machine you're signed in on, exactly like your presets. Sign out and the cloud plugins are unloaded; sign back in and they're restored. - **Stays up to date.** When a new version is published, OrcaSlicer can fetch and install the update rather than leaving you on a stale copy. - **Managed from the Plugins dialog.** Browse, install, update, and unsubscribe live alongside local side-loading — which still works for development and private plugins. - **Integrated with presets.** Plugin references travel with a preset bundle (via the preset's `plugins` fields), so publishing a preset that uses plugins carries those references through the existing cloud sync. If a referenced plugin is missing when you install the bundle on another machine, OrcaSlicer **offers to install** the missing plugins for you (a one-click prompt), provided those plugins are on the cloud. ## Where we need feedback Really any form of feedback would be helpful; we'd rather grow this slowly from real use cases than expose internals we can't keep stable — which is why the current surface is kept small. The `orca.host` API in particular is where we'd most value opinions. ## Limitations / known gaps (it's WIP) - **The audit hook is not a sandbox.** It currently enforces only the `open` event's writes, and only for string paths (fd/bytes opens are not checked). `subprocess`, sockets, `ctypes`, `os.open`, and non-`open` filesystem mutations (`os.remove`/`rename`/`mkdir`) are **not** blocked yet. An `Enforcing` mode is stubbed but not yet wired, so today all calls run in the writes-only "loading" mode. More details can be found [here](https://www.orcaslicer.com/wiki/developer_reference/plugin_development/plugin_audit_hook.html#limitations). - **The `orca` API is unstable** and will change based on this discussion. Don't build anything load-bearing on it yet. - The `requires-python` field is parsed but not enforced. - Dependency install and some of the Plugins dialog UX are functional but still rough around the edges. ## Docs [How to Use](https://www.orcaslicer.com/wiki/plugins/getting_started.html) [Developer Reference](https://www.orcaslicer.com/wiki/developer_reference/plugin_development/plugin_system.html) ## Software Development Kit Currently, there is a script `generate_orca_python_stubs.py` to generate the `.pyi` files that can be used for intellisense. We will release the stub file as an SDK in future releases, but for now, if you intend to develop plugins, you can generate the stub files locally. ## Notes This system was developed primarily on Windows and Linux; testing on macOS has so far been limited. macOS-specific behavior — the bundled Python/`uv` runtime, path handling, and the audit hook — is the most likely to need attention, and feedback or testing from macOS users is especially welcome. [How to Download Pull Requests Artifacts for Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts) ## Orca Cloud to OrcaSlicer Plugins Workflow Overview: https://github.com/user-attachments/assets/abbd7900-3062-4e33-8f77-5d30d567be1d
OrcaSlicer: an open source Next-Gen Slicing Software for Precision 3D Prints.
Optimize your prints with ultra-fast slicing, intelligent support generation, and seamless printer compatibility—engineered for perfection.
Official links and community
Official Website:
Github Repository:
Follow us:
Join our Discord community:
|
⚠️ CAUTION: Several clickbait and malicious websites, such as orca-slicer[.]com and orcaslicer[.]net, are pretending to be the official OrcaSlicer site. These sites may redirect you to dangerous downloads or contain misleading information. Our only official website is www.orcaslicer.com. If you come across any of these in search results, please report them as unsafe or phishing to help keep the community secure with: - Google Safe Browsing - Microsoft Security Intelligence - IPThreat |
Main features
- Advanced Calibration Tools
Comprehensive suite: temperature towers, flow rate, retraction & more for optimal performance. - Precise Wall and Seam Control
Adjust outer wall spacing and apply scarf seams to enhance print accuracy. - Sandwich Mode and Polyholes Support
Use varied infill patterns and accurate hole shapes for improved clarity. - Overhang and Support Optimization
Modify geometry for printable overhangs with precise support placement. - Granular Controls and Customization
Fine-tune print speed, layer height, pressure, and temperature with precision. - Network Printer Support
Seamless integration with Klipper, PrusaLink, and OctoPrint for remote control. - Mouse Ear Brims & Adaptive Bed Mesh
Automatic brims and adaptive mesh calibration ensure consistent adhesion. - User-Friendly Interface
Intuitive drag-and-drop design with pre-made profiles for popular printers. - Open-Source & Community Driven
Regular updates fueled by continuous community contributions. - Wide Printer Compatibility
Supports a broad range of printers: Bambu Lab, Prusa, Creality, Voron, and more. - Additional features can be found in the change notes.
Wiki
The wiki aims to provide a detailed explanation of the slicer settings, including how to maximize their use and how to calibrate and set up your printer.
Download
Stable Release
📥 Download the Latest Stable Release
Visit our GitHub Releases page for the latest stable version of OrcaSlicer, recommended for most users.
Nightly Builds
🌙 Download the Latest Nightly Build
Explore the latest developments in OrcaSlicer with our nightly builds. Feedback on these versions is highly appreciated.
How to install
Windows
Download the Windows Installer exe for your preferred version from the releases page.
-
For convenience there is also a portable build available.
Troubleshooting
- If you have troubles to run the build, you might need to install following runtimes:
- MicrosoftEdgeWebView2RuntimeInstallerX64
- vcredist2019_x64
- Alternative Download Link Hosted by Microsoft
- This file may already be available on your computer if you've installed visual studio. Check the following location:
%VCINSTALLDIR%Redist\MSVC\v142
Windows Package Manager
winget install --id=SoftFever.OrcaSlicer -e
Mac
-
Download the DMG for your computer:
arm64version for Apple Silicon andx86_64for Intel CPU. -
Drag OrcaSlicer.app to Application folder.
-
If you want to run a build from a PR, you also need to follow the instructions below:
Quarantine
-
Option 1 (You only need to do this once. After that the app can be opened normally.):
- Step 1: Hold cmd and right click the app, from the context menu choose Open.
- Step 2: A warning window will pop up, click Open
-
Option 2: Execute this command in terminal:
xattr -dr com.apple.quarantine /Applications/OrcaSlicer.app -
Option 3:
-
Linux
Flathub (Recommended)
OrcaSlicer is available through FlatHub:
Install from the command line:
flatpak install flathub com.orcaslicer.OrcaSlicer
flatpak run com.orcaslicer.OrcaSlicer
It can also be installed through graphical software managers (KDE Discover, GNOME Software, etc.) when Flathub is enabled. Search for OrcaSlicer in your software center.
AppImage
AppImages are published for both x86_64 and aarch64 (ARM64). Pick the file matching your CPU — the ARM64 build has aarch64 in its name (e.g. OrcaSlicer_Linux_AppImage_Ubuntu2404_aarch64_*.AppImage).
-
Download App image from the releases page.
-
Double click the downloaded file to run it.
-
If you run into trouble executing it, try this command in the terminal:
chmod +x /path_to_appimage/OrcaSlicer_Linux.AppImage
How to Compile
All updated build instructions for Windows, macOS, and Linux are now available on the official OrcaSlicer Wiki - How to build page.
Please refer to the wiki to ensure you're following the latest and most accurate steps for your platform.
Klipper Note
If you're running Klipper, it's recommended to add the following configuration to your printer.cfg file.
# Enable object exclusion
[exclude_object]
# Enable arcs support
[gcode_arcs]
resolution: 0.1
Supports
OrcaSlicer is an open-source project and I'm deeply grateful to all my sponsors and backers.
Their generous support enables me to purchase filaments and other essential 3D printing materials for the project.
Thank you! :)
Sponsors
|
|
Backers:
Ko-fi supporters ☕: Backers list
Support me
Some Background
Open-source slicing has always been built on a tradition of collaboration and attribution. Slic3r, created by Alessandro Ranellucci and the RepRap community, laid the foundation. PrusaSlicer by Prusa Research built on Slic3r and acknowledged that heritage. Bambu Studio in turn forked from PrusaSlicer, and SuperSlicer by @supermerill extended PrusaSlicer with community-driven enhancements. Each project carried the work of its predecessors forward, crediting those who came before.
OrcaSlicer began in that same spirit, drawing from BambuStudio, PrusaSlicer, and ideas inspired by CuraSlicer and SuperSlicer. But it has since grown far beyond its origins. Through relentless innovation — introducing advanced calibration tools, precise wall and seam control, tree supports, adaptive slicing, and hundreds of other features — OrcaSlicer has become the most widely used and actively developed open-source slicer in the 3D printing community. Many of its innovations have been adopted by other slicers, making it a driving force for the entire industry.
The OrcaSlicer logo was designed by community member Justin Levine.
License
- OrcaSlicer is licensed under the GNU Affero General Public License, version 3.
- The GNU Affero General Public License, version 3 ensures that if you use any part of this software in any way (even behind a web server), your software must be released under the same license.
- OrcaSlicer includes a pressure advance calibration pattern test adapted from Andrew Ellis' generator, which is licensed under GNU General Public License, version 3. Ellis' generator is itself adapted from a generator developed by Sineos for Marlin, which is licensed under GNU General Public License, version 3.
- The Bambu networking plugin is based on non-free libraries from BambuLab. It is optional to the OrcaSlicer and provides extended functionalities for Bambulab printer users.


