Local-first Git sync for OrcaSlicer profiles.
Willy watches your OrcaSlicer profile/config directory, saves meaningful changes as Git commits, and syncs them to any normal Git remote. It is meant to replace cloud profile syncing with something boring, inspectable, recoverable, and not tied to one vendor.
Willy is macOS-first right now. Windows and Linux are planned.
One-line install:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/gabrsar/willy/main/scripts/install.sh)"The installer clones Willy into ~/.local/share/willy, creates a virtualenv, installs the CLI, and links willy into ~/.local/bin.
If your shell cannot find willy after install, add this to your shell config:
export PATH="$HOME/.local/bin:$PATH"Manual install:
git clone https://github.com/gabrsar/willy.git
cd willy
make setupBy default, Willy watches:
~/Library/Application Support/OrcaSlicer/user
It tracks Orca profile JSON files under both common Orca layouts:
default/filament/*.json
default/machine/*.json
default/process/*.json
<user_id>/filament/*.json
<user_id>/machine/*.json
<user_id>/process/*.json
It intentionally ignores .info sidecars, temp files, caches, logs, locks, .git, and obvious junk. The first version keeps the tracked surface small and safe.
Willy treats your Orca profile directory as a Git repository.
OrcaSlicer profile files
|
v
Willy watcher / CLI
|
v
local Git commits
|
v
your Git remote
The basic flow:
willy setupconnects your Orca profile folder to Git.- Setup asks whether to enable the watcher.
willy save "message"commits unsaved profile JSON files and pushes.willy startruns the background watcher if you did not enable it during setup.- While Orca is open, Willy watches for profile changes.
- When changes settle, Willy auto-saves them.
- When Orca closes, Willy does a final save and sync.
Willy uses normal Git remotes, so it can work with GitHub, GitLab, Gitea, Forgejo, Bitbucket, self-hosted Git, or a local bare repo.
Some Orca printer profiles can include connection details such as print_host, printhost_apikey, tokens, passwords, or other secret-like fields.
Willy's default is conservative:
- private repo: sensitive fields are kept in commits
- public repo: sensitive fields are redacted before Git stores them
- unknown repo privacy: sensitive fields are redacted before Git stores them
This redaction happens through a local Git clean filter. Your real Orca files are not modified, so OrcaSlicer still keeps the printer data it needs on your machine.
Git itself can validate that Willy can talk to a remote, but it cannot prove whether that remote is public or private. During setup, Willy asks and stores your answer. You can also be explicit:
willy setup --private-repo
willy setup --public-repoUse --private-repo only for a repository you trust to store printer IPs and API keys.
If you choose --private-repo, treat the repository as permanently sensitive:
THIS REPOSITORY MUST NOT BECOME PUBLIC.
It may contain printer IPs, device IDs, API keys, tokens, or other sensitive OrcaSlicer printer data. Making it public later can expose secrets that were already committed in Git history.
Close OrcaSlicer before setup. Willy refuses setup while Orca is open so it does not race profile writes.
Use an existing profile repo:
willy setupIf Willy finds an existing Git repo in your Orca profile directory, it asks:
Use this Git repo as Willy's default? [Y/n]
The default is yes.
Create/connect a new repo:
willy setup --mode new --remote git@github.com:you/orca-configs.gitWilly validates that it can talk to the remote before adopting it.
Setup also decides how to handle sensitive printer connection fields:
Is this repository private? Willy only commits sensitive printer connection fields (like print_host and printhost_apikey) when the repo is private. Public or unknown repos get those fields redacted before Git stores them. [y/N]
At the end of setup, Willy asks whether to enable the watcher:
Enable Willy watcher? It runs in the background, watches Orca profile changes, auto-saves after changes settle, and syncs again when Orca closes. [Y/n]
The default is yes. To opt out:
willy setup --no-watcherIf you need an SSH key:
willy setup --mode new --remote git@github.com:you/orca-configs.git --generate-ssh-keyWilly prints the public key and tells you to add it to your Git host.
Optional whale nonsense, standard license:
willy setup --mode new --protect-from-bamboo-poachersThis adds AGPL-3.0 protection assets. It does not create a custom license.
Show sync health:
willy statusStatus shows:
- whether Orca is running
- watched directory
- repo path
- branch and remote
- sensitive field policy
- unsaved config count
- preview of unsaved config paths
- daemon status
- next automatic save
- last commit
- last sync
Manually save and push:
willy save "tuned ABS and PETG profiles"willy save always syncs. If there are no new changes, it still pushes/pulls when a remote exists.
Start automatic saving:
willy startStart the macOS status bar icon:
willy statusbarThe status bar item appears while OrcaSlicer is running, or while Willy has profile changes or Git sync work pending. It shows:
Wwhen there are no pending changesW*when Willy sees pending profile changes or sync/download workW...while Willy is saving
Click it to see current status, open a detailed status window, force sync/download, or enable/disable daemon startup at login.
If you disable daemon startup, Willy will warn you that automatic syncing will not start after login. You will need to run:
willy startStop automatic saving:
willy stopWatch logs:
tail -f ~/.willy/logs/events.jsonlwilly setup Connect OrcaSlicer profiles to Git
willy start Start automatic syncing
willy stop Stop automatic syncing
willy statusbar Show macOS status bar sync controls
willy save Save changes with a description and push
willy status Show sync health
willy history Show profile history (planned)
willy revert Restore older profile versions (planned)
Development commands:
make help
make setup
make lint
make testWilly is intentionally conservative.
- Setup refuses to run while OrcaSlicer is open.
- Setup creates backups before touching profile data.
- Bad remotes fail before config is saved or repos are mutated.
- Existing repos are detected and adopted only after confirmation.
- Remote access is validated before adoption.
- Only JSON profile/config files are staged by default.
- Sensitive printer connection fields are redacted for public or unknown repositories.
- Git errors are shown as recovery-oriented messages, not Python tracebacks.
Backups live under:
~/.willy/backups
State and logs live under:
~/.willy/config.toml
~/.willy/state.json
~/.willy/logs
Working:
- setup
- status
- manual save + push
- privacy-aware sensitive field redaction
- existing repo detection
- remote validation
- SSH key guidance
- automatic watcher scaffold
- daemon start/stop
- macOS status bar icon while OrcaSlicer is active or sync/profile work is pending
- login startup toggle for the daemon
- profile JSON detection for
default/...and<user_id>/...
Still being hardened:
- conflict recovery UX
- history view
- revert/restore
- launchd recovery/status polish
- Windows/Linux support
Stop the daemon first:
willy stopThen remove the installed app files:
rm -rf ~/.local/share/willy
rm -f ~/.local/bin/willyWilly state/backups are kept in ~/.willy. Remove them only if you are sure:
rm -rf ~/.willy