H
Halfday
Plaintext never hits disk. Decryption happens in memory; only age ciphertext is written. Open source, Apache 2.0, ~95 tests.

encrypted notes for Obsidian — for an era when everything else reads your files.

Your Obsidian vault is plaintext markdown. So is the input to every desktop AI assistant, sync provider, and disk-indexing agent on your machine. Halfday Rune encrypts notes with age, opens them inline in Obsidian, and never writes the cleartext back to disk.

Available now in Obsidian's Community Plugins — search "Halfday Rune" in Browse, or install manually below.

Halfday Rune — an encrypted .age note open in Obsidian with live-preview markdown

why this exists

A typical knowledge worker now has four to seven background services that can read every plaintext file in their Obsidian vault, and most of them touch an LLM. Claude Desktop with an MCP filesystem server. ChatGPT macOS reading files through the Accessibility API. Cursor indexing your workspace to its servers. GitHub Copilot building a semantic index across whatever folder VS Code happens to have open. Spotlight feeding Apple Intelligence. Dropbox, OneDrive, and friends quietly enabling AI features by default.

Obsidian Sync is end-to-end encrypted between your devices. Your vault on your disk is not. That gap is what Rune closes.

For the full pitch with citations: Using Obsidian Securely in the AI Era.

what it does

born-encrypted notes

New private notes are created as .age ciphertext. Plaintext only ever lives in memory — never a stray .md on disk, never a swap file, never an auto-save.

live-preview markdown

Headings, bold, italic, inline code, links, wikilinks, fenced code, lists — they render the same way they do in any Obsidian note. Move the cursor into a line to edit the raw syntax. It looks like Obsidian because it is Obsidian.

multi-recipient encryption

Encrypt to any number of age recipients — your daily-driver key plus an offline backup, say. Decrypt with any matching identity. No more "I lost the passphrase, I lost the notes."

rotate vault keys

One command re-encrypts every .age file in the vault to your current recipients. Pre-rotation backup copy by default. Round-trip-verified per-file before overwrite.

decrypt back to .md

When you want to leave encryption — or just need a plaintext export — one command converts an .age file back to .md. Replace mode or scratch mode; your choice.

hardened rendering

No DOM injection, no auto-image-load, no transclusion, no script execution. Encrypted notes route through a custom view that never reaches Obsidian's metadata cache, search index, or backlinks graph.

how it works

  1. 1

    Install the plugin and configure your recipients — one age1... public key per line. Use your existing age identity, or run age-keygen to make one in 30 seconds.

  2. 2

    Run Halfday Rune: New private note from the command palette. The file is born as .age ciphertext. No plaintext stage, ever.

  3. 3

    Have existing notes? Encrypt current note → .age seals them. The plaintext source is deleted only after the ciphertext round-trip-verifies — if anything fails, your original is preserved.

  4. 4

    Click any .age file in the file tree. It opens inline in Obsidian, decrypted to memory only. Save with cmd-S or after 30s of inactivity; close the tab and the plaintext is gone.

Recipients editor in Halfday Rune settings

Recipients editor — paste age1 keys, validate inline, save.

Rotate vault keys confirmation modal

Rotate vault keys — confirm modal with backup option.

Halfday Rune status bar showing clean state

Status bar — round-trip verified, no plaintext on disk.

why you can trust it

We don't roll our own crypto. Rune wraps typage — the TypeScript port of age by Filippo Valsorda.
Open source, Apache 2.0. Read the source, fork it, audit it. GitHub.
Threat model published. What Rune protects, and what it doesn't — in the README.
~95 tests on every commit. Round-trip, sanitization, key rotation, error paths.
Built in public. The methodology, the bugs, the fixes — Building Halfday Rune With AI.
Private security disclosure. Email hello@halfday.dev — not a public issue.

how it compares

There are other encryption plugins for Obsidian, and a few of them are good. Rune's wedge is being the only one that combines all four of: age + recipients + live preview + key rotation. Pick the one that matches your threat model.

Capability Meld Encrypt Age Encrypt gpgCrypt Rune
Cryptography AES-GCM (custom) age (passphrase) OpenPGP age (X25519)
Multi-recipient No No Manual Yes
Live-preview encrypted notes Partial No (fenced blocks) Yes Yes
Built-in key rotation No No Manual Yes
Dependency footprint Plugin only Plugin only Needs GPG / smartcard Plugin only
Hardware key support No No Yes (GPG smartcards) Planned (Secure Enclave, v1.0)

Honest framing: none of these plugins (Rune included) have a third-party formal audit. Rune leans on typage and the published age spec for crypto correctness. Threat model spells out exactly what that means.

install

Easiest install: open Settings → Community plugins → Browse in Obsidian, search Halfday Rune, and click Install — like any other community plugin. The manual steps below are an alternative if you prefer.

  1. 1

    Download main.js, manifest.json, and styles.css from the latest GitHub release.

  2. 2

    Drop the three files into <your-vault>/.obsidian/plugins/halfday-rune/.

  3. 3

    Restart Obsidian. Enable the plugin in Settings → Community plugins. (If you've never enabled a community plugin before, you'll need to flip the "Turn on community plugins" switch first.)

  4. 4

    Open Settings → Halfday Rune, paste your age1... public keys into the Recipients field, save.

Don't have an age keypair yet? One line of shell:

mkdir -p ~/.age && chmod 700 ~/.age
age-keygen -o ~/.age/vault.identity
chmod 600 ~/.age/vault.identity

what's next

  • ✓ Shipped — live in the Obsidian Community Plugins catalog. One-click install via Browse.
  • Phase 2 — click-to-navigate wikilinks inside encrypted notes, syntax highlighting in fenced code blocks, mobile build.
  • Long-termage-plugin-se integration so your identity can be guarded by Secure Enclave / TouchID instead of a file on disk.

support the work

Halfday is a small shop building open-source tools for AI-era privacy. Rune is free and always will be. If Rune is part of how you sleep at night, buying us a coffee is the thank-you path.

read & follow