Local-first · Keyboard-first · No account

The whole app is one field.

Type to search as you go. If nothing matches, the same keystroke makes a new note. Instant full-text search, Markdown, and attachments — offline, right in your browser.

in-memory
    ↑↓ move   open  Ctrl+↵ create  Esc back

    Live demo · runs in your browser · in-memory, nothing is saved. Open the real app →

    Spec sheet

    What’s in the box

    One Rust core does the work. Each capability behaves identically on desktop, the qn CLI, and this web app — the only difference is where it runs.

    [fts]

    Instant search

    SQLite FTS5 with BM25 ranking returns matches in sub-milliseconds as you type — titles, bodies, and tags — with the hit highlighted right in the list.

    local
    [core]

    One field, no modes

    Search and create from the same box. No “new note” button, no title field — the first line of the body is the title.

    local
    [md]

    Markdown, rendered

    Write plain Markdown, read it formatted. A Preview toggle flips raw text and rendered view. Lists, tables, code, links — and raw HTML is never stored or run.

    local
    [blobs]

    Attachments & preview

    Drag in a file or paste a screenshot. Attachments live inline as links; a side pane previews images, PDFs, audio, video, and text. Content-addressed and deduplicated.

    local
    [export]

    Own your data

    Export the whole vault as a folder of Markdown files — attachments included, YAML frontmatter intact — whenever you want. No lock-in, no proprietary format.

    local
    [sync]

    Optional sync

    Connect a server to back up and sync every device. Last-write-wins, conflicts archived, over HTTPS. Or stay fully local and anonymous — your call.

    server
    [extract]

    Capture & transcribe

    Paste a link and the server pulls readable article text, auto-tags it, and transcribes YouTube & Instagram videos into searchable notes. Save any page from the Chrome extension.

    server
    [pgvector]

    Related by meaning

    When exact matches run thin, semantic search surfaces related notes by meaning, using server-side pgvector embeddings — shown in their own section.

    server

    The loop

    Type, and one of two things happens

    The entire app is a single loop. There is no mode to switch, nothing to set up.

    1. 1

      Find it — or create it

      Start typing; the list filters live. Nothing matches? A Create row appears.

      open the match · Ctrl+ create from the query

    2. 2

      Edit inline — it autosaves

      The note opens right there, editable. It saves when you pause typing; the first line becomes the title.

      Ctrl+S save now · or just keep typing

    3. 3

      Sync — or stay local

      Stay anonymous and offline, or connect a server to sync to your phone, desktop, and the qn CLI.

      Optional. Reversible. Your notes, your call.

    Keyboard
    • navigate the list
    • open the selection
    • Ctrl+ create from the query
    • Ctrl+K jump back to search
    • Ctrl+S save the open note
    • Esc back to the list

    On macOS, use in place of Ctrl.

    One Rust core, compiled everywhere. Same search, same storage, same loop.

    Open it and start typing.

    No sign-up, no setup. The web app runs entirely in your browser and installs like a native app.

    Open QuickNote

    Want it native? Sign in inside the app to grab the desktop & qn CLI builds.