Local-First Editor

LocalMD

Your files stay yours.
100% in-browser Markdown editor and document transformation engine with offline capabilities.

Data Privacy

100%

Local processing. Your documents, formulas, and diagrams never leave your browser. Zero servers, zero trackers.

0ms
Server Round-Trip Latency
Native
File System Access API
Next.js 16
React 19
Tailwind 4
Mammoth.js
KaTeX
PWA
Mermaid

The Privacy Leak

Modern markdown editors require sending your PDFs, Word documents, or slides to remote servers for processing. This presents significant privacy risks for confidential and enterprise documents.

The Edge Solution

LocalMD compiles document parser engines to run client-side. Word documents, PDFs, and slide presentations are transformed into clean Markdown entirely inside the browser sandbox.

Key Capabilities

Multi-Format Import

Drag-and-drop Word, PDF, or PowerPoint files for instant local conversion.

Split Sync Preview

Synchronized scroll-split editor with live equations and Mermaid flowcharts.

Secure Sandbox

Zero cloud synchronization or network requests after initial service worker load.

Auto-Generated TOC

Interactive table of contents automatically mapped from document headers.

Undo/Redo History

Robust in-memory editor history queue preserving formatting changes.

Offline-First PWA

Service workers keep the application fully functional without active connection.

File Access without Servers.

Traditional web apps require uploading files to server endpoints or downloading blobs. LocalMD implements the native **File System Access API** (showOpenFilePicker) to establish direct stream handles to local files.

When editing a local file and hitting Ctrl+S, the app writes changes directly back to the file system handle at native disk I/O speeds, matching the experience of a desktop IDE.

Parsing Layer

Mammoth.js + React-Markdown + RemarkGFM.

Disk IO System

File System Access API (WritableStream).

Offline Engine

Service Worker + CacheStorage PWA caching.

file_handler.ts
async function saveLocalFile(handle, content) {
  // 1. Request write stream
  const writable = await handle.createWritable();

  // 2. Write content stream
  await writable.write(content);

  // 3. Flush buffer to disk
  await writable.close();
  console.log("Written to local disk.");
}
Back to HomePart of the 2026 Portfolio