sumac
🍋 sumac: home grocery inventory app
Encrypted-at-rest grocery inventory for a household sharing one git repo and one passphrase.
Locations, products, and quantities are never visible to someone holding the repo without the
passphrase — not even in file or directory names. See docs/FORMAT.md for the on-disk format
and threat model, and docs/LAYOUT.md for what's read-only vs mutable.
Install
Published on PyPI as sumac-home (sumac was taken); the command is still sumac.
uv tool install sumac-home # or: pip install sumac-home
For development (this checkout):
uv sync
Depends on sealedlog (the encrypted append-only log
primitive) from PyPI.
Passphrase
Set SUMAC_PASSPHRASE, or sumac will prompt interactively. The passphrase is shared by every
user of the household's vault.
Usage
sumac init # once, creates data/
sumac config add-location "Fridge" --id fridge
sumac config add-location "Pantry" --id pantry
sumac config show
sumac add purchase milk 2 l --to fridge
sumac add consumption milk 1 l --from fridge
sumac add movement rice 1 kg --from pantry --to fridge
sumac snapshot fridge "milk=1/l" "eggs=6/ct" # reconciliation: resets fridge's products
sumac status # current inventory, all locations
sumac status fridge # current inventory, one location
sumac find milk # where is milk right now?
sumac log # full ordered event log
sumac verify # re-authenticate every line; check actors
All commands take --data-dir (default data, or $SUMAC_DATA_DIR).
Locations nest
A location can have a parent, so shelves, doors, bins, drawers — anything — nest under a
container to arbitrary depth. There's no separate "shelf" or "grid" type; a sub-location is just
another location with --parent set.
sumac config add-location "Door" --id fridge-door --parent fridge
sumac config add-array "Shelf" --parent fridge --count 4 # Shelf 1..4 under fridge
sumac config add-grid "Bin" --parent pantry --rows 3 --cols 4 # Bin R1C1..R3C4 under pantry
sumac config show # renders the tree
sumac status <location> and sumac find both include everything nested under a location, not
just that exact node — sumac status fridge sums the fridge itself, its door, and its shelves in
one pass. Query a sub-location directly (e.g. sumac status fridge-door) to scope to just that
node and its own descendants.
Development
uv run ruff format .
uv run ruff check .
uv run ty check
uv run pytest
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 sumac_home-0.1.3.tar.gz.
File metadata
- Download URL: sumac_home-0.1.3.tar.gz
- Upload date:
- Size: 153.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22","id":"wilma","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72625f38df239cb49bccfa092c30e8e38b632a4f3ea57d56c1c4b8ed39395e9d
|
|
| MD5 |
b31e97bfa76fda5209f369eaacf06d4e
|
|
| BLAKE2b-256 |
ec08afa7613fef84e98fd1fc57c09ed0702383e6c909266479718a675a053d5e
|
File details
Details for the file sumac_home-0.1.3-py3-none-any.whl.
File metadata
- Download URL: sumac_home-0.1.3-py3-none-any.whl
- Upload date:
- Size: 39.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22","id":"wilma","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
058932b0df3bb7ca09deda1113b817e8c346382b919ea4a09ac70c095dc6fade
|
|
| MD5 |
c64da84853a558bf3a1cce6515c02054
|
|
| BLAKE2b-256 |
86204c814594b566a42185577e2c2cf6df7954c69735dc629e72695cae42c078
|