All projects

Project report · 2026

LocalMD

Markdown stays on your device

In one line

LocalMD reads and edits Markdown in the browser or a native macOS app. It keeps document processing on the device and makes save behaviour explicit.

Question

Can one Markdown reader support rich rendering, safe editing, and file recovery without sending a document to a server?

What I built

  • Built Read, Edit, and Split modes with rich Markdown rendering, local draft recovery, file conflict checks, and byte-preserving saves.
  • Moved parsing into a worker and mounted large documents in slices. Documents over 2 MiB open in a read-only fast mode.
  • Added a Content Security Policy and a separate remote-media gate. Both controls protect the browser privacy claim.
  • Built an Apple Silicon macOS beta with native dialogs, atomic replacement, opaque document handles, and unsaved-change protection.

Main result

live browser production checks passed
25/25
initial JavaScript, gzipped
88.4 KB
warm 1 MB render on Apple M4
1.877 s

Document path

Open locally

Choose a file, drop it, paste text, or start a new document.

Process on device

Parse, sanitize, render, edit, and recover without a document backend.

Save locally

Write to the file where supported, or download the same bytes.

No upload endpoint receives the document. Remote media stays blocked until the reader allows it.

What the work showed

  • A worker did not improve performance until the app split result transfer and document mounting into smaller slices.
  • The Content Security Policy blocks programmatic network access. The renderer separately blocks remote media until the reader allows it.
  • Save behaviour must follow platform capability. Chromium can save in place, while Firefox and Safari download the same bytes.

What it does not prove

  • The macOS v0.2.0 build is an unsigned Apple Silicon beta. It is not signed or notarized for standard distribution.
  • Web save-in-place requires a supported Chromium browser. Firefox and Safari use a download fallback.
  • Relative local assets do not resolve. Browser drafts remain unencrypted and do not replace a backup.
  • The recorded performance run used one Apple M4 machine and warm dependencies.

Conclusion

LocalMD treats privacy and file handling as product behaviour, not marketing copy. The browser release is public, while the native app remains a clearly labelled beta.