Skip to content

Repository files navigation

Scripticus

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.sh prints 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.

The pieces

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.

Developing

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 PyPI

The 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 -v

scripts/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.

Licence

MIT

About

A repo system for storing and retrieving scripts

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages