insmaller
Config-driven installer. You describe install steps in a TOML file and point insmaller at it; the engine runs them. Ships as one binary with nothing else to install.
(it's "insmaller" — "inshorter" just didn't sound right.)
Install
Or download a prebuilt binary from the releases page.
Quick start
Write an insmaller.toml (discovered automatically from the current directory
up, or pass --config):
[]
# Both optional; only needed for the `setup` wizard / `install`.
= "catalog.json"
= "wizard.toml"
# A named task: a sequence of steps you run on demand.
[]
= "Say hello"
[[]]
= "shell"
= "echo hello from insmaller"
Run it:
Commands
| Command | Does |
|---|---|
insmaller setup |
Run the wizard, collect inputs, then install the selection |
insmaller install <keys…> |
Install named recipes from the catalog |
insmaller uninstall <keys…> |
Reverse an install |
insmaller task <name> (alias run) |
Run a named [task.*] pipeline |
insmaller status (alias query) |
Show what's installed (--json for machine output) |
[settings] default_command makes a bare insmaller run that command, and
default_args prepends baseline arguments.
How it works
Steps are declarative — shell, exec, download, extract, copy,
prompt/input, and more. What to install lives in config and a catalog,
not in compiled code; adding a tool is editing TOML.
One rule shaped the design: an unattended run (CI, a container) never stops to wait for stdin. Inputs come from the environment or a prepared answers file; a missing optional input skips its step instead of blocking.
The engine is a separate crate, insmaller-core,
embeddable in your own Rust program through one trait.
Full documentation: https://github.com/walangstudio/insmaller
License: MIT