Skip to content
ostefaniPublic

About

Local-first encrypted personal diary

Topics

Resources

Contributing

Stars

16 stars

Watchers

0 watching

Forks

Repository files navigation

Tauri Rust Svelte JavaScript ProseMirror

Vite SQLCipher Argon2id XChaCha20-Poly1305 Markdown platforms

CLI Interface Visitors License

SoirVu

_the evening, see_

A local-first, encrypted personal diary.

Page https://ostefani.github.io/soirvu/

SoirVu keeps your diary in an encrypted vault on your own machine. It requires no account, runs no cloud service and makes no network connections. Unlock your vault with your passphrase or recovery key.

SoirVu dark theme SoirVu light theme

Getting started

You can download unsigned installers or build from source. How to build from source see Building

Download an installer for your platform from GitHub Releases. Installers are unsigned; see BUILDING.md for platform instructions and release verification.

Open SoirVu, choose a location for your vault and create a passphrase. Save the recovery key shown during setup somewhere safe: it is shown only once.

Features

  • Subfolders and entry links — organize entries in nested folders and link related notes within the same vault.
  • Encrypted vault — entries live in a SQLCipher database; attachments are stored as separately encrypted files. Keys are derived with Argon2id and wrapped in LUKS-style key slots, so changing your passphrase doesn't re-encrypt your diary.
  • Recovery key — a randomly generated key shown once at setup lets you back in if the passphrase is forgotten. Without either, the diary is unrecoverable — by design.
  • Markdown, always — entries are stored as Markdown and edited in a WYSIWYG editor built on ProseMirror. Export entries and attachments to a folder, or use soirvu-cli to verify or export a vault without the app. Exports are unencrypted.
  • Your choice of location — the vault is an ordinary folder: internal disk, external drive, or a mounted encrypted disk image.
  • Backups and sync — make encrypted backups manually or on a schedule. Optional sync writes encrypted bundles to a separate folder that another tool or a USB drive can carry between devices.
  • Encrypted full-text search — search runs inside the encrypted database; nothing is indexed in plaintext.
  • Auto-lock — the vault locks on idle, sleep, screen lock or manual shortcut, and the keys are wiped from memory.
  • Key management — change your passphrase, regenerate your recovery key or rotate the vault's master key in the app.

Security model

The Rust backend handles vault keys, cryptography and vault file operations. Encryption protects your diary at rest — it cannot protect text while you are reading it, so auto-lock exists to shrink that window. Keyloggers, screen recorders and a compromised OS are explicitly out of scope.

Tech

  • Tauri v2
  • Rust core (SQLCipher, XChaCha20-Poly1305, Argon2id)
  • Svelte 5 UI
  • ProseMirror editor with Markdown as the only stored format.

Building

Prerequisites: Rust toolchain (via rustup) and Node.js 24 LTS. Full per-OS instructions live in BUILDING.md.

npm ci --ignore-scripts
npm run tauri build    # local use: installers land under target/release/bundle/
npm run tauri dev      # development with hot reload

# checks and tests
npm run check
npm test
cargo test -p soirvu-core -p soirvu-cli

# manual plaintext-leak test (needs a scratch vault)
sh scripts/leak-test.sh <path-to-test-vault-folder>

See CONTRIBUTING.md for development checks and contribution guidelines.

License

MIT © 2026 Olha Stefanishyna

About

Local-first encrypted personal diary

Topics

Resources

Contributing

Stars

16 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages