# 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) ```bash 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.land` is 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 `markdown` fallback). 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.