Stashpad — personal developer reference manager CLI.
Project description
Stashpad
Stashpad is a personal developer reference manager (stash on the command line).
Save URLs, shell commands, code snippets, and notes. Tag them, search, export, and browse from the terminal.
Full reference: docs/
How it works
Stashpad is a local, searchable cheat sheet for developers. You save things you look up repeatedly — shell commands, snippets, URLs, notes — and find them again from the terminal.
Data storage
Everything lives in a single JSON file:
~/.config/stash/vault.json # default location
Override with STASH_DATA_DIR, --config-dir, or a path passed to stash init. The file contains:
- Entries — title, content, optional URL, tags, priority, kind, pinned flag, timestamps, UUID
- Tags — a registry of tag names used in the vault
Example scripts use examples/.demo-vault/ so they never touch your real vault.
Typical workflow
stash init --name my-vault # create vault once
stash entry add "Docker prune" "docker ..." --tag devops
stash add "Quick note" "echo hello" # top-level alias
git log -5 | stash add "Recent commits" - # pipe into vault
stash pins # pinned favorites
stash pick deploy --copy # interactive picker
stash search "prune" # fuzzy ranked search
stash entry copy <id> --first-line # copy command to clipboard
stash entry run <id> # run with confirmation
stash export json ./backup.json # backup
stash import --from-file ./backup.json # restore
Useful global flags: --json (scripting), --verbose, --config-dir (alternate vault).
Validation with Pydantic
Input is validated before it hits disk:
| Schema | Used for |
|---|---|
EntryCreate |
New entries (title, URL, tags normalized) |
EntryUpdate |
Partial edits |
EntryFilter |
List/search filters |
ImportPayload |
JSON import files |
Invalid URLs, empty titles, or malformed import files fail early with clear errors.
Architecture
CLI commands ──► storage.py ──► vault.json
▲
│
models / schemas (Pydantic)
Quick start
pip install stashpad
# or: pipx install stashpad
stash init --name my-vault
stash entry add "Docker prune" "docker system prune -af" \
--tag devops --tag docker --url https://docs.docker.com
stash entry list --tag devops
stash search "prune"
stash --json entry list
From source:
git clone https://github.com/Vicba/stash-cli.git
cd stash-cli
poetry install
poetry run stash init --name my-vault
CLI commands
| Command | Description |
|---|---|
stash init |
Initialize vault (prompts, env vars) |
stash add |
Quick-capture alias for stash entry add (stdin, clipboard) |
stash entry add/list/show/edit/remove/copy/run/pin/unpin |
CRUD with UUID, enums, filters, aliases (ls, rm) |
stash pins |
List pinned favorites |
stash pick |
Interactive fzf-style picker (--copy, --run, --open) |
stash search |
Fuzzy ranked search (--exact to disable) |
stash tags list/add/remove |
Nested subcommands |
stash export json/markdown |
Export with Path types and progress bars |
stash import |
Import from JSON files |
stash open |
Open entry URL in browser |
stash config show/set/path |
Configuration management |
Global flags: --verbose, --json, --config-dir, --version
Run poetry run stash --help for full usage.
Examples
Runnable walkthroughs and sample data live in examples/:
./examples/scripts/01-getting-started.sh
./examples/scripts/04-import-export.sh
Development
poetry run poe test # run tests
poetry run poe lint # lint
poetry run poe dev # dev runner
Project structure
src/stash_cli/
cli.py # root app + global callback
context.py # shared AppContext
models.py # Entry, Vault, enums
storage.py # JSON persistence (~/.config/stash/)
commands/ # one module per command group
docs/ # Reference documentation
tests/ # CLI tests
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stashpad-0.6.0.tar.gz.
File metadata
- Download URL: stashpad-0.6.0.tar.gz
- Upload date:
- Size: 35.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7330e5d08a1af19984dda9d92177bb2b560f254866eef070c84f9c29d2f07a35
|
|
| MD5 |
0555c026638f9fa4c26a7752939dd3d4
|
|
| BLAKE2b-256 |
7d4da0dbd0625db03ec6ed1cf886479d4b20d8b11c5a329e1e776b54336f20c3
|
File details
Details for the file stashpad-0.6.0-py3-none-any.whl.
File metadata
- Download URL: stashpad-0.6.0-py3-none-any.whl
- Upload date:
- Size: 47.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.12.13 Linux/6.17.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34bb604d60b06da06891fd5a6844296ae4bccb3b5dea9d03ea77e5ff3ec7f2b6
|
|
| MD5 |
95ddae8a448a6cf5696c5f786117a4a2
|
|
| BLAKE2b-256 |
18eb2e4b64f3605bfd12a82200306ddf196c945475e2426d4f57e47beb06bea2
|