Skriuw
A lightweight, fast, feature-rich personal knowledge base, a blend of Obsidian and Notion, built on Next.js and Tauri for native, sub-6 MB desktop binaries.
Skriuw (noun)
/skrɪu̯/ - Frisian, “to write.”
Skriuw is a personal knowledge base for people who would rather not reach for the mouse. It's minimal by default and feature-rich when you ask it to be, and because the desktop client is built on Rust and Tauri, the whole thing ships as a native binary under 6 MB.
Size isn't the only reason it feels fast. Skriuw is keyboard-first: you can move through the entire app without touching a mouse, and every binding is customizable. See Shortcuts for the full list.
Run it your way
You choose where your notes live, and the app works the same either way:
- Hosted cloud - sign in with email and password, or GitHub and Google OAuth. Nothing to set up.
- Self-hosted - Skriuw is fully open source, and ships with a Docker setup for your own infrastructure or a serverless deploy.
- Fully local - a storage adapter writes your notes as plain
.mdfiles wherever you point it. No database, no telemetry.
There's a web app and a native desktop app, and both talk to the same WorkspaceBackend adapter, so feature code never branches on where your data lives.
For more background, see the README.
Explore the docs
Development features
The feature- and domain-sliced architecture, with a walkthrough of each feature domain in the codebase.
Architecture
The WorkspaceBackend adapter contract, its server, local, and Tauri implementations, and the web-spa split.
Note covers
Add, reuse, position, and store cover images for notes on web and desktop.
Marks, Threads, and Readings
Turn important prose into editable, source-linked information that stays current in a note.
Desktop local-first
Learn how vault watching, conflict copies, sidecars, private AI, sync credentials, and signed updates work.
Web clipper extension
The Chrome extension that saves pages, articles, and selections into Skriuw.
Sync API keys
How the clipper and desktop app authenticate against the web backend with bearer tokens.
Keyboard shortcuts
The keyboard-first model, the shortcut registry, and how bindings are re-assigned per device.
Stack & technology
Skriuw started as a web monolith: Next.js 16, React 19, TypeScript, Tailwind CSS, and PostgreSQL via neon.tech. It later moved to Prisma as the data layer.
The desktop client is Rust on Tauri 2.0. That addition also pushed the project into a Bun-managed monorepo built with Turbopack.
Desktop integration
The desktop build doesn't ship the Next.js front-end - that surface is built around API routes and server actions, which don't translate to a native binary. Instead, web-spa is a client-only React SPA that re-renders whatever was Next.js-specific or server-rendered, while sharing one platform-agnostic layer (UI, hooks, utilities, and read-only actions) with the web app.
Approach
Skriuw follows a domain-driven, feature-sliced structure, written in a functional style rather than OOP. See Development features for the full list of feature domains.
Back-end access goes through a single adapter interface (WorkspaceBackend) with three implementations - server, local, and Tauri - so feature code never branches on auth state or platform. See Architecture for the full contract.