CS

Keepr

Pixel-close offline-first Google Keep clone -- Tauri 2 + React + Rust + SQLite

TypeScriptDesktop
Delivery
Source-first
Browse code, README, and release notes on GitHub.
Primary lane
C# / Desktop lane
The clearest adjacent context for this project inside the portfolio.
Freshness
Updated May 30, 2026
Latest release
v0.16.2
Published May 26, 2026

Preview

Using the generated project card as a clean fallback until a live capture is available.

Keepr card

Source at github.com/SysAdminDoc/Keepr.

README

Cached at build time, cleaned up for in-site reading, and linked back to the canonical GitHub source.

4 min read 698 words 11 sections
Contents
  1. Keepr
  2. Why
  3. Features
  4. Where Keepr stores your data
  5. Portable mode
  6. Roadmap & changelog
  7. Install
  8. Build from source
  9. Contributing
  10. Security
  11. License

Keepr

A pixel-close, offline-first clone of Google Keep. Built with Tauri 2 + React + Rust + SQLite. Your notes stay on your machine; back them up to any folder you sync to a cloud provider.

Why

Google Keep is great until the internet goes out. Keepr gives you the same look, the same masonry-grid card UX, the same colors and labels and checklists — running entirely locally. Back up to Google Drive (or anywhere) with a one-click ZIP export, restore with a one-click import.

Features

Capture & edit — Text notes and checklists, lossless setKind round-trip via GFM - [x] markers, multi-image attachments (paste / drop / file pick), inline #hashtag labels (auto-create + auto-detach on text removal), time-based reminders with native Windows toast, "Make a copy" duplicate.

Organize — 12 Keep colors (light + dark paired variants), labels with chip filtering + per-label note counts in sidebar, pin/archive/trash with configurable retention + days-left badge.

Find & view — Debounced search across title/body/checklist, filter chips (type / color / label / pinned), grid + list view modes, sort by Modified / Created / Title / Custom (drag-reorder in Custom mode).

Power user — Keep's canonical keyboard shortcuts (c / l / / / ? / j / k / f / e / # / Ctrl+G / Ctrl+A) with a ? help overlay, multi-select + bulk actions (pin / color / labels tri-state / archive / trash / restore / delete forever).

System integration — System-tray icon with show-hide + new-note + quit menu, Ctrl+Alt+N global hotkey quick-capture, single-instance guard.

Backup & migration — Manual ZIP export / import with zip-slip + zip-bomb defenses and .prev rollback, auto-backup schedule (daily / weekly to your Drive folder), Markdown vault export (one .md per note + YAML frontmatter + _resources/), Google Takeout import (preserves chronology + reminders + labels + attachments).

Theme — Light / Dark / System (follows OS), masonry grid, full keyboard accessibility, WCAG AAA contrast across all 24 color combinations.

Distribution — Unsigned NSIS / MSI installer + portable .zip published to GitHub Releases on every tag. See Install.

Where Keepr stores your data

Keepr uses Tauri's per-app data directory:

  • Windows: %APPDATA%\com.sysadmindoc.keepr\keepr.db (SQLite, WAL mode)
  • macOS: ~/Library/Application Support/com.sysadmindoc.keepr/keepr.db (best-effort builds since v0.10).
  • Linux: $XDG_DATA_HOME/com.sysadmindoc.keepr/keepr.db (best-effort builds since v0.10).

The schema is versioned (PRAGMA user_version), so a newer Keepr can upgrade an older database in place. A backup is just a regular ZIP — keepr.db at the root plus any future attachments.

Portable mode

Drop an empty file named portable.flag next to keepr.exe. On startup Keepr detects the sentinel, writes keepr.db (and any attachments) in the same folder as the EXE, and never touches %APPDATA%. Copy the folder to a USB stick, run from any Windows box, your notes travel with you. Remove the file to go back to per-user storage.

Roadmap & changelog

Install

Pick one of the published builds from Releases:

Windows (supported)

  • Keepr_<version>_x64-setup.exe — NSIS installer (default).
  • Keepr_<version>_x64_en-US.msi — Windows Installer alternative.
  • Keepr-portable.zip — extract anywhere, run keepr.exe. The bundled portable.flag makes the app store keepr.db next to the EXE so it travels on a USB stick.

Keepr is unsigned today (see SECURITY.md for rationale). First launch shows Windows SmartScreen — click "More info" → "Run anyway".

macOS (best-effort, v0.10+)

  • Keepr_<version>_aarch64.dmg — Apple silicon (M1/M2/M3).
  • Keepr_<version>_x64.dmg — Intel.

Unsigned and not notarized. macOS will refuse to launch on first try — right-click the app → Open → confirm, or run xattr -d com.apple.quarantine /Applications/Keepr.app to clear the quarantine bit.

Linux (best-effort, v0.10+)

  • keepr_<version>_amd64.deb — Debian/Ubuntu.
  • Keepr_<version>_amd64.AppImage — distro-agnostic; chmod +x then run.

Built against Ubuntu 22.04 / glibc 2.35. Older distros may need to self-build from source.

Build from source

Prereqs: Node 20+, Rust 1.80+. The Tauri CLI is bundled as a dev-dependency — no global install.

npm install
npm run tauri dev          # dev (HMR)
npm run tauri build        # release MSI/NSIS in src-tauri/target/release/bundle/
npm test                   # vitest (frontend)
cargo test --manifest-path src-tauri/Cargo.toml --lib   # rust unit tests

The GitHub Actions workflow at `.github/workflows/release.yml` builds + uploads a release on every v*.*.* tag push.

Contributing

See CONTRIBUTING.md. Issues + PRs welcome.

Security

See SECURITY.md for the threat model and how to report vulnerabilities.

License

MIT. See LICENSE.

Read on GitHub → github.com/SysAdminDoc/Keepr

Recent Releases

Latest tagged notes pulled from GitHub release history for this project.

  • v0.16.2

    **P0 fix** — the editor failed to open at all on a fresh v0.16.1 install. Clicking *Take a note* (or any of the new-note affordances, including the global hotkey + tray quick-capture) blanked the entire window with no re

  • v0.16.1

    **First version with installer artifacts on the Releases page.** · Tags v0.6.0 → v0.16.0 had `tauri-action` workflow runs but they're all stuck `queued` at GitHub Actions runner allocation due to a SysAdminDoc account-le

Esc
Start with the strongest work, a key route, or the full archive.