A package manager and registry for scripts. Publish, discover, version, and
install the scripts your team shares — with proper namespacing, semver,
dependency resolution, and a single bin directory on your PATH — instead of
copying them around from wikis, chat, and assorted git repos.
- Namespaced: every package lives under an owner (
team/backup-rotate), GitHub-style. No squatting, no collisions. - Cross-platform: one package version can ship separate Linux/macOS/Windows variants; the client installs the right one.
- Multi-file, multi-command: a package is a directory and can expose several commands.
- Snippets too: distribute boilerplate that is meant to be pasted, not
run —
snip args.shprints it, in whichever language you wrote it in. - And shell libraries: reusable shell code that is sourced rather than
run —
scr_load team/strings— filling the one gap where the language has no package manager of its own. - Content-addressed: every artifact is identified by the hash of its contents and verified on install.
- Self-hostable in one command: the server ships as a Docker Compose bundle.
Scripticus is two PyPI packages, developed together in this repository:
scripticus— the CLI client. Installing, authoring, and publishing packages all happen through it. See the client README for installation and usage.scripticus-server— the index service (scripticus-svr), deployed alongside Gitea. See the server README for standing up a registry and onboarding the people who publish to it.
The design documents live in doc/: vision, architecture, roadmap, and the decision record.
Install the development prerequisites (uv, Tasktree, Docker, gh) once, then ask Tasktree what you can do:
$ scripts/dev-setup # first-time setup (Linux/Bash; see below)
$ tt --list # every task: build, unit-test, e2e-test, release, …The common tasks (see tt --list for the full set):
$ tt update-uv-deps # sync the workspace environment (uv sync)
$ tt unit-test # run the pytest suite (all members)
$ tt build # build the workspace wheels into dist/
$ tt start-server # stand up a local registry (with a test user) to hack against
$ tt e2e-test # full-stack end-to-end tests in Docker (see tests/README.md)
$ tt release … # cut releases to PyPIThe repository is a uv workspace
with four members: client/ and server/ (the CLI and index service), and
two shared packages they both build on — schema/ (the declarative wire and
manifest models) and common/ (pure helpers both sides compute identically:
hashing, versioning, identity globbing). They share a single lockfile
(uv.lock) and virtual environment. To run the client straight from the
working tree (rather than an installed copy):
$ uv run scripticus -vscripts/dev-setup targets Linux/Bash with apt (where it installs everything);
on macOS or Git-Bash it still runs, installing what it can and pointing you at
your platform's package manager for the rest.
MIT