|
|
2 weeks ago | |
|---|---|---|
| .vscode | 2 weeks ago | |
| flatpak | 2 weeks ago | |
| src/imwald | 2 weeks ago | |
| tests | 2 weeks ago | |
| .gitignore | 2 weeks ago | |
| README.md | 2 weeks ago | |
| pyproject.toml | 2 weeks ago | |
README.md
imwald
Linux-focused Nostr desktop client: PySide6 UI, SQLite (WAL) as the local store, and a background relay worker that writes events into the same database the UI reads.
Run (development)
cd imwald
python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/python -m imwald
The package uses a src/ layout; editable install is enough (no PYTHONPATH needed). For Cursor/Pylance, the repo includes .vscode/settings.json and [tool.pyright] in pyproject.toml so import imwald resolves.
What is implemented today
- Relays: Read/write sets from your latest kind 10002 (NIP-65); built-in defaults only when you have no usable list. Relay worker restarts when the active account changes. Optional aggr.nostr.land thread subscription when
nostr.landis in your write set. Trending slice relay (nostrarchives) mixed into reads. - Ingest: NIP-01 id check + BIP-340 signature verification before SQLite upsert; kind 5 tombstones applied on valid deletion events.
- Feed: Ranked queue (follows, kind 30000 list authors, scores), per-viewer “seen” tracking, OP body rendered as Markdown (offline marked via QuickJS, nh3 sanitize, Python
markdownfallback). Thread list, search hits, notifications rows, and “your events” use the same pipeline for plain summaries (no raw#/**noise in one-liners). - Composer: Split Markdown source + live preview; publish to resolved write relays.
- Accounts: Onboarding wizard, nsec / ncryptsec (NIP-49) storage, composer and NIP-09 publish.
- Other pages: Search (local
LIKE), notifications list (DB table + joined event text when present), local DB admin (safe SELECT, purge, NIP-09 hook).
Dependencies (runtime)
See pyproject.toml: PySide6, cryptography, bech32, coincurve, PyNaCl, websockets, quickjs-ng, nh3, markdown (Markdown rendering is fully local; marked is vendored under src/imwald/ui/assets/vendor/).
Not in scope (yet)
Server-backed grammar (LanguageTool), translation, read-aloud, rich media gallery, full “profile app” shell, or a separate bulletin-board product surface—the README used to list aspirational items; they are not current features unless added in code.