Scaffold
One command picks a template and fills in the metadata — the directory, class, and files are created for you.
Salpa CLI · for developers
pip install salpa-cli
Salpa CLI turns one command into a complete node package: metadata, code, an isolated environment, sample data and tests. You start from a runnable skeleton built on the same templates our own nodes use, not a blank file.
Apache-2.0 · Python 3.9+ · macOS · Linux · Windows
salpa new, salpa validate, pixi run test, then salpa smoke.From an empty directory to the app on your machine.
salpa newsalpa addsalpa platformssalpa devsalpa validatesalpa envsalpa smokesalpa pushsalpa unpushsalpa docsvalidate is a static check: it reads the package and tells you whether it satisfies the install and registration contract. Running the science is what the tests, and the app, are for. push talks to the Salpa app on your own machine: nothing is uploaded, and nothing is published.
Answer a few prompts; the package it writes already validates.
meta.tomlcore.pynode.pypixi.tomldemo_data/README.mdtests/The science lives in core.py; the app integration stays a thin wrapper, the two-level shape every Salpa node uses.
$ salpa new protein-analyzer Template: 1. individual-node — one node, its own pixi env (the default) 2. multi-node-package — several related nodes sharing one pixi env, chained Choose [1/2] (1): 1 … ✓ validate: no findings (structure, naming, environment) Next steps: 1. Edit meta.toml — description, category, hashtags, license. 2. Put the science in core.py; keep node.py a thin wrapper. 3. salpa add <package> ... (dependencies — and it narrows `platforms` to what can actually run them) 4. pixi run test (builds the test env on first run; core + node tests) 5. salpa smoke protein_analyzer (does it actually run? needs the test env above) 6. salpa push protein_analyzer (into your running Salpa app, ready to install)
When one node isn’t enough
A pipeline is usually a few related steps. The second template scaffolds them together — one shared environment at the root, one directory per node — so they stay in step instead of drifting apart.
salpa validate checks the whole package, both nodes’ tests run in it, then salpa smoke runs each node on its own sample data.Dependencies, without the guesswork
A dependency is two claims: the package your code needs, and the platforms you say your node supports. salpa add makes both at once — it finds the package in your channels, writes it, and narrows platforms to the ones that can actually run it, with a reason recorded for every one it drops. If any name fails to resolve, or the solve fails, nothing is written at all.
Or be led through it
salpa dev shows the whole package in one panel — what is done, what is outstanding, and what each step would do — and runs the next one for you. It reads the state fresh every time, so the checklist is the menu rather than a list you keep in your head. Nothing is guessed: whether your node actually runs, and whether the app has it, are marked not checked until something checks them.
From your editor to the canvas
salpa push hands your package to the Salpa app running on your machine. Nothing is uploaded, nothing is published: it is a local handover, and the package appears in the Marketplace ready to install.
salpa push shows what it will move before it moves it — then the package is on the shelf, and salpa unpush takes it back out.Salpa has to be running: the CLI asks the app where its files live rather than guessing, so the same command works whether you run Salpa from a checkout or the desktop app.
The same handover, end to end.
salpa new scaffolds the package, validate confirms it and push hands it over; then the app answers: the package on the Marketplace shelf, installed in a click, its nodes in your library. salpa unpush takes it back off the shelf.The CLI handles the boilerplate, so your time goes to the science.
One command picks a template and fills in the metadata — the directory, class, and files are created for you.
Your logic goes in core.py — plain Python, testable without the app — and a thin node.py exposes it as a node. salpa add names the packages it needs and works out where they can run.
salpa validate checks the package will install and register; its tests run in the node’s own environment; salpa smoke actually runs the node. salpa dev walks all of it in order if you would rather be led.
salpa push puts the package into the Salpa app on your machine, ready to install from the Marketplace.
pip install salpa-cli, then salpa new. The full node-authoring guide is in the Salpa docs.