Every device owns a complete reading library.
The cloud is an optional collaborator, not the database of record. Reading, saved content, search, and knowledge begin on the device.
The desktop/web path currently uses the local Node API. Mobile SQLite adapters compile, but the complete reading-path cut-over and real-device verification are not finished.
Full-text certainty, semantic recall.
Rinwa always keeps a deterministic SQLite full-text path. When local embeddings are enabled and already ready, a second semantic lane runs beside it. Reciprocal Rank Fusion combines the two without making vector search a single point of failure.
ONNX Runtime supports loading models from local buffers or URLs and resolving execution-provider fallback. Rinwa currently uses the Node-side runtime supplied by Transformers.js; the product does not claim a universal WebGPU path across every client.
Evidence first, provider second.
AI assistance starts by assembling bounded evidence. A short article can use the whole text; a long article or library question retrieves passages. Paragraph offsets and knowledge records become citation IDs before the provider receives the request.
Provider boundary
Chat uses OpenAI-compatible completions across configured providers. Translation can use DeepL, OpenAI, or a custom endpoint. Without a configured provider, local reading remains intact.
Runtime safeguards
Transient network, rate-limit, and server errors receive bounded retry. Invalid credentials and requests do not. Unknown citation IDs are removed before answers are shown.
Keys and usage
Packaged clients keep keys in OS secure storage. Usage records separate prompt, completion, cached, and reasoning tokens when a provider supplies them.
Sync operations, not database files.
Each device remains independently useful. A local change becomes an immutable operation with a device sequence and Hybrid Logical Clock. The server relays operations; clients decide how fields merge.
Record
deviceId:sequence, entity, action, payload, timestamp, and HLC are persisted locally before upload.
Relay
The server validates bounded batches. Duplicate operation IDs become harmless CouchDB conflicts.
Merge
Each field applies only when the incoming HLC is newer. Unrelated edits can converge independently.
Delete
Tombstones stop an older subscription, note, search, connector, or highlight operation from resurrecting deleted data.
Subscriptions · reading state · preferences · saved searches · connector subscriptions · summaries · notes · tags · references · highlights
Article bodies · media · translations · model files · embeddings · search indexes
The server can provision Qdrant, but the protocol advertises semanticSearch: false. Current semantic retrieval is local; a configured collection is not a shipped remote-search feature.
App versions and content versions are separate.
A visual update, new setting, or gesture fix does not invalidate article data. Extraction, translation, generated summaries, and embeddings each own a compatibility version.
Your reading can leave the app.
Obsidian
Rinwa manages only clearly marked Markdown sections. User-authored content around them remains intact, and edits made in the Vault return to Rinwa.
Local MCP
Read tools are available locally. Adding subscriptions, changing state, saving notes, creating highlights, or exporting to Obsidian requires an explicit write token.
One interface, native boundaries.
React and Vite provide the shared reading surface. Tauri 2 packages it for desktop and mobile. Components do not branch directly on macOS, Windows, iOS, or Android; native capabilities stay behind the platform adapter.
Implemented is not the same as released.
Local SQLite on the current desktop/API path, extraction queues, inline translation, local embeddings, hybrid retrieval, citations, knowledge tools, operation-log sync, backups, and shared responsive UI.
Android shared UI package, mobile SQLite repository, native secure storage migration, and the Rinwa public brand transition.
Mobile database population, background refresh, Android Keystore verification, iOS and Windows packaging, signing, notarization, and store review.
Need implementation-level detail?
Read the source on GitHub ↗