[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81111":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":40,"discoverSource":41},81111,"featherMD","prathamreet\u002FfeatherMD","prathamreet","5MB dual-pane Markdown editor with live preview. Native binary, built on Tauri.","",null,"JavaScript",38,6,3,4,0,2,42.74,"MIT License",false,"main",[23,24,25,26,27,28,29,30,31,32,33,34,35,36],"codemirror","desktop-app","dual-pane","lightweight","linux","markdown","markdown-editor","native","notes","rust","tauri","tauri-app","windows","writing","2026-06-12 04:01:32","\u003C!--\n  Image placeholders used in this README.\n  Drop the file in artifacts\u002Fscreenshots\u002F and it will render automatically.\n\n    1. artifacts\u002Fscreenshots\u002Fdemo.gif   Hero demo. 8-12s loop. Type Markdown, preview updates, switch theme, scroll sync. ~1400px wide, \u003C 5 MB.\n\n  Logo lives at artifacts\u002Fassets\u002Ffeather-logo.png (already in repo).\n  Additional screenshots are covered on the project landing page (link to be added).\n-->\n\n\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"artifacts\u002Fassets\u002Ffeather-logo.png\" alt=\"Feather MD\" width=\"120\" \u002F>\n\n# Feather MD\n\n### A native, dual-pane Markdown editor that opens instantly and stays out of your way.\n\n[![CI](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Factions\u002Fworkflows\u002Fci.yml)\n[![Latest Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fprathamreet\u002FfeatherMD?color=4c1&label=release)](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Freleases\u002Flatest)\n[![Downloads](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002Fprathamreet\u002FfeatherMD\u002Ftotal?color=blue)](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Freleases)\n[![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fprathamreet\u002FfeatherMD?style=flat&color=yellow)](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Fstargazers)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-yellow.svg)](LICENSE)\n[![Tauri 2](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTauri-2-24C8DB?logo=tauri&logoColor=white)](https:\u002F\u002Ftauri.app)\n[![CodeMirror 6](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCodeMirror-6-d30707)](https:\u002F\u002Fcodemirror.net)\n\n**[Download](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Freleases\u002Flatest)** · **[What's new](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Freleases)** · **[Report a bug](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Fissues\u002Fnew?template=bug_report.md)** · **[Request a feature](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Fissues\u002Fnew?template=feature_request.md)**\n\n\u003Cbr \u002F>\n\n\u003Cimg src=\"artifacts\u002Fscreenshots\u002Fdemo.gif\" alt=\"Feather MD demo: typing Markdown with a live preview pane and instant theme switching\" width=\"90%\" \u002F>\n\n\u003C\u002Fdiv>\n\n---\n\n## The pitch in one line\n\nA 5 MB Windows installer, around 50 MB of RAM, sub-100 ms cold start, and a dual-pane preview that just works. Built on Tauri 2, not Electron.\n\n## Why Feather MD\n\nYou probably already have a Markdown workflow, and it probably costs you 300 MB of RAM to read a `README`.\n\n* You opened VS Code with its 200+ MB footprint just to skim a `.md` file.\n* You fought the split preview that opens in the wrong place, with scroll sync that takes a documentation deep-dive to enable.\n* You bounced between fifteen browser tabs trying to find the document you started 20 minutes ago.\n* You wanted a single, focused window for writing. A text surface that opens before you finish reaching for the mouse.\n\nFeather MD is the small, fast thing that lives between those edges.\n\n* **Double-click a `.md` file and it opens.** Real OS file association. No \"open in VS Code\" workaround.\n* **Side-by-side preview with bidirectional scroll sync, out of the box.** Toggle it off with `Alt + S` if you want.\n* **A dedicated window, not another browser tab.** No distraction, no lost cursor.\n* **5 MB Windows installer, around 50 MB resident.** Editing text should not cost a gigabyte of memory.\n* **Tauri, not Electron.** Uses your OS WebView, ships no browser runtime, signs every update with Ed25519.\n* **No telemetry, no background services, no accounts.** It is a text editor.\n\n## Install\n\n### Download a release\n\n[Latest release (v1.4.1)](https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD\u002Freleases\u002Flatest):\n\n| Platform | File | Size |\n| --- | --- | --- |\n| Windows 10 \u002F 11 | `Feather.MD_1.4.1_x64-setup.exe` (NSIS) | 5.0 MB |\n| Debian \u002F Ubuntu | `Feather.MD_1.4.1_amd64.deb` | 7.8 MB |\n| Any Linux distro | `Feather.MD_1.4.1_amd64.AppImage` | 81.4 MB |\n\n> The AppImage bundles its own GTK and WebKit runtime so it works on any Linux distro without system packages. The `.deb` uses your system libraries and stays small.\n\n> Already on v1.2.7 or older? Auto-update was added in v1.3.0. Install the latest release once, manually, and the in-app updater takes over from there.\n\n### Build from source\n\nRequirements: Node.js 18+, Rust stable, and the platform's WebView toolchain. On Windows 10 and 11 WebView2 is pre-installed. On Linux you need the GTK \u002F WebKit dev packages listed below.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fprathamreet\u002FfeatherMD.git\ncd featherMD\nnpm install\nnpm run tauri dev         # run in development with hot reload\nnpm run tauri build       # produce a signed release bundle\n```\n\n\u003Cdetails>\n\u003Csummary>Linux system dependencies\u003C\u002Fsummary>\n\n```\nlibwebkit2gtk-4.1-dev\nbuild-essential\ncurl\nwget\nfile\nlibssl-dev\nlibgtk-3-dev\nlibayatana-appindicator3-dev\nlibrsvg2-dev\n```\n\n\u003C\u002Fdetails>\n\nRelease bundles land in:\n\n* Windows: `src-tauri\u002Ftarget\u002Frelease\u002Fbundle\u002Fnsis\u002F`\n* Linux: `src-tauri\u002Ftarget\u002Frelease\u002Fbundle\u002Fdeb\u002F` and `bundle\u002Fappimage\u002F`\n\n## Features\n\n| | |\n| --- | --- |\n| **Premium Unified Header** | Combines legacy title-bar and toolbar into a singular, 40px bar. Mathematically centered active document title horizontally with transparent pointer events. |\n| **Hover Dropdown Menus** | Mouse hover-activated dropdown menus (File, View, Style) with a 180ms hover-intent delay and diagonal pointer bridge to prevent accidental dismissals. |\n| **Native dual-pane** | Editor on the left, live preview on the right. Resizable from 20% to 80%. Double-click the divider to reset to center. |\n| **Bidirectional scroll sync** | Scroll either pane, the other follows. Ratio-based, no jitter on long documents. Toggleable. |\n| **CodeMirror 6 editor** | Markdown syntax styling, code folding, bracket and quote auto-pair, active-line highlight, find and replace. |\n| **Highlight.js code blocks** | On-demand language loading for fenced blocks. Hundreds of languages, no startup penalty. |\n| **10 built-in themes** | Five light, five dark. Switches in under 1 ms. CSS variables locked to `:root` to preserve text contrast, zero relayout. |\n| **Advanced Printing Engine** | Bypasses browser native headers\u002Ffooters (hostnames, local times, page URLs) and viewport-clipping limits to support infinite multi-page document prints. |\n| **External-change watcher** | If another program edits your open file, Feather MD reloads it. Asks first if you have unsaved edits. |\n| **Recent files** | Up to ten, one click to re-open from the File -> Recent Files dropdown submenu, updating instantly on new saves. |\n| **CLI launch** | `feathermd \u003Cpath>` opens a file directly. Useful from a terminal or a shell hotkey. |\n| **OS file associations** | `.md` and `.markdown` open in Feather MD on double-click. |\n| **Signed auto-updates** | Cryptographically secure (Ed25519-signed) auto-update checking on startup with a minimalist slide-in notification banner and one-click installation. |\n| **Persistent preferences** | Restores customizations natively on startup (theme, font family, font size, tab size, line numbers, word wrapping, scroll-sync, split ratio, window size, and windowMaximized state). |\n\n## Performance budget\n\nReal numbers from `npm run report` on the current build. Targets are PRD constraints the project ships against and CI enforces.\n\n| Metric | Result | Target |\n| --- | --- | --- |\n| Installer size (Windows NSIS) | 5.03 MB | \u003C 10 MB |\n| Cold start | \u003C 100 ms | \u003C 100 ms |\n| Idle RAM | ~30 MB | \u003C 30 MB |\n| Active RAM (10k-word doc) | ~50 MB | \u003C 60 MB |\n| Keystroke render latency | ~1 ms | \u003C 200 ms |\n| Theme swap | \u003C 0.1 ms | \u003C 16 ms |\n| Background timers at idle | 0 | 0 |\n| CSS bundle (gzip) | 19 KB | \u003C 30 KB |\n| Test suite | 204 \u002F 204 passing | 100% |\n\n## How it compares\n\n| | Feather MD | VS Code | Typora | Obsidian |\n| --- | --- | --- | --- | --- |\n| Installer size | **~5 MB** | ~90 MB | ~85 MB | ~110 MB |\n| Active RAM | **~50 MB** | ~300 MB | ~150 MB | ~400 MB |\n| Cold start | **\u003C 100 ms** | 1 to 3 s | \u003C 1 s | 1 to 2 s |\n| Dual-pane preview | Built in | Extension \u002F split editor | Hybrid only | Plugin |\n| Native binary | Yes (Tauri) | No (Electron) | No (Electron) | No (Electron) |\n| Telemetry | None | Opt-out | Opt-out | Opt-in |\n| Cost | Free, MIT | Free, MIT | Paid | Free, freemium |\n\nNumbers are approximate from public reporting and our own measurements. Different scenarios, different tools. Feather MD is the right pick when you want a fast, focused Markdown surface, not a full IDE or a note vault.\n\n## Who this is for\n\n* You read and edit `.md` files all day and you want the double-click experience to be instant.\n* You write blog posts, docs, RFCs, or PRDs in plain Markdown and you want a live preview without opening an IDE.\n* You like keyboard-first tools and would rather not deal with bloated UIs.\n* You care about what your machine is running. You looked at Task Manager today.\n* You want a tool that does one thing well and gets out of the way.\n\nIf you are managing thousands of linked notes with backlinks and graphs, you want Obsidian, not this. If you are writing code with Markdown on the side, you already have VS Code. Feather MD is the third option for everything else.\n\n## Keyboard shortcuts\n\n| Key | Action |\n| --- | --- |\n| `Ctrl + N` | New file |\n| `Ctrl + O` | Open file |\n| `Ctrl + S` | Save |\n| `Ctrl + Shift + S` | Save as |\n| `Ctrl + P` | Print document |\n| `Ctrl + F` | Find |\n| `Ctrl + H` | Find and replace |\n| `Ctrl + L` | Toggle line numbers |\n| `Alt + Z` | Toggle word wrap |\n| `Alt + S` | Toggle scroll sync |\n| `Ctrl + ?` | Show all shortcuts |\n\n## Architecture\n\nFeather MD is a strictly modular Vite + Tauri app. Each module has one responsibility and no surprise dependencies.\n\n```\nfeatherMD\u002F\n├── index.html                       Single HTML entry, custom title bar, settings + dialogs DOM\n├── package.json                     Frontend dependencies and npm scripts\n├── vite.config.js                   Vite build config (Tauri-aware targets, asset prefixes)\n├── vitest.config.js                 Test runner config (jsdom environment)\n├── eslint.config.js                 Flat ESLint config with browser + node globals\n│\n├── src\u002F                             Frontend source. All ESM, no transpilation needed.\n│   ├── main.js                      App orchestrator. Wires modules together in DOMContentLoaded.\n│   │\n│   ├── editor\u002F\n│   │   └── editor.js                CodeMirror 6 setup. Compartments for line-numbers, wrap,\n│   │                                and tab-size preference.\n│   │\n│   ├── preview\u002F\n│   │   └── preview.js               Marked + DOMPurify pipeline. highlight.js loaded on-demand\n│   │                                per language via import.meta.glob.\n│   │\n│   ├── ui\u002F\n│   │   ├── toolbar.js               Unified header bar menu dropdowns, font size control, and recent files builder.\n│   │   ├── settings.js              Helper to update the recent files list in the dropdown submenu.\n│   │   ├── themes.js                Theme switching + prefers-color-scheme detection.\n│   │   ├── dialogs.js               Unsaved-changes prompt and shortcuts help modal.\n│   │   ├── status-bar.js            Word count, cursor position, file path, line ending.\n│   │   └── divider.js               Editor\u002Fpreview split-pane drag handle.\n│   │\n│   ├── core\u002F\n│   │   ├── config.js                Defaults + Tauri appConfigDir \u002F localStorage persistence.\n│   │   ├── state.js                 HMR-resistant window state (file path, dirty, line ending).\n│   │   ├── file-io.js               open \u002F save \u002F save-as \u002F new + recent files + unsaved guard.\n│   │   ├── keyboard.js              Global keyboard shortcut bindings.\n│   │   ├── sync.js                  Bidirectional ratio-based scroll sync.\n│   │   ├── welcome.js               Default welcome document.\n│   │   └── utils.js                 Shared helpers (escapeHtml).\n│   │\n│   ├── platform\u002F\n│   │   ├── window.js                Tauri window controls (minimize, maximize, close) + size persistence.\n│   │   └── updater.js               Ed25519-verified auto-update check on startup.\n│   │\n│   └── styles\u002F\n│       ├── base.css                 Layout, title bar, settings panel, modal overlays.\n│       ├── editor.css               CodeMirror customizations.\n│       ├── preview.css              Markdown preview typography and code-block styling.\n│       ├── toolbar.css              Toolbar and status bar.\n│       └── themes\u002F                  10 themes: snow, solarized-light, github-light, sepia,\n│                                    gruvbox-light, onyx, solarized-dark, github-dark,\n│                                    monokai, gruvbox-dark.\n│\n├── src-tauri\u002F                       Rust backend.\n│   ├── src\u002F\n│   │   ├── main.rs                  Tauri app entry.\n│   │   └── lib.rs                   IPC commands: watch_file, unwatch_file, get_initial_file.\n│   │                                Spawns an async tokio file watcher for external-change events.\n│   ├── capabilities\u002F\n│   │   └── default.json             Tauri 2 permission scopes for plugins.\n│   ├── icons\u002F                       Platform icons (Windows .ico, Linux .png, mobile sets).\n│   ├── tauri.conf.json              Window config, bundle targets, updater endpoint + pubkey.\n│   ├── Cargo.toml                   Rust dependencies.\n│   └── build.rs                     Tauri build script.\n│\n├── tests\u002F                           Vitest suites mirroring src\u002F layout. 204 specs across 8 files.\n│   ├── editor\u002Feditor.test.js        CodeMirror integration: API surface, compartments, cursor.\n│   ├── preview\u002Fpreview.test.js      Markdown rendering, XSS sanitization, GFM, scroll API.\n│   ├── ui\u002F\n│   │   ├── toolbar.test.js          Button bindings, dropdown behavior, active state.\n│   │   ├── settings.test.js         Settings panel controls + recent-files rendering.\n│   │   └── themes.test.js           Theme switching, OS detection, all 10 themes.\n│   ├── core\u002Fsync.test.js            Bidirectional scroll sync + feedback-loop prevention.\n│   ├── html.test.js                 index.html structure, ARIA, keyboard accessibility.\n│   ├── security.test.js             SEC-01\u002F02\u002F03 + CODE-01 + PERF-01 regression guards.\n│   └── performance.bench.js         Render latency, word count, theme swap benchmarks.\n│\n├── scripts\u002F\n│   ├── generate-report.js           Full audit: build + lint + tests + bench + bundle sizes.\n│   └── version-bump.js              Sync version across package.json \u002F Cargo.toml \u002F tauri.conf.\n│\n├── .github\u002F                         Issue templates, PR template, CI + release workflows.\n└── artifacts\u002F                       Logo, screenshots, PRD spec.\n```\n\n| Layer | Choice | Why |\n| --- | --- | --- |\n| Shell | Tauri 2 (Rust) | Uses the OS WebView. Ships no browser. |\n| Web runtime | WebView2 \u002F WebKitGTK | Already on the user's machine. |\n| Editor | CodeMirror 6 | Tree-shaken to about 300 KB. |\n| Markdown | Marked + DOMPurify | Synchronous, sanitized. |\n| Code highlight | highlight.js | Lazy-loaded per language. |\n| Bundler | Vite 6 | Main bundle plus on-demand chunks. |\n| Updater | Tauri updater + process plugins | Ed25519-signed, in-place relaunch. |\n\n## Quality checks\n\n```bash\nnpm test            # 204 specs across 8 suites\nnpm run lint        # ESLint\nnpm run bench       # Render latency, word count, theme swap benchmarks\nnpm run report      # Full audit: build + tests + bench + bundle sizes\n```\n\nCI runs the full audit on every push and every pull request.\n\n## FAQ\n\n**Is there a macOS build?**\nNot yet. The codebase is Tauri so a macOS build is a CI job away. It is on the roadmap. If you want to help land it sooner, see the open issue.\n\n**Can I edit files larger than X MB?**\nYes. CodeMirror 6 handles large files efficiently. There is no hard cap. Performance degrades smoothly on truly huge files (50 MB+) the same way any text editor does.\n\n**Does it support tables, footnotes, task lists, math?**\nTables, task lists, fenced code, GFM extensions: yes. Footnotes and math (KaTeX \u002F MathJax) are not enabled by default to keep the bundle small. A toggle is on the roadmap.\n\n**Where are my settings stored?**\nOn Tauri builds, the OS config directory under `feathermd\u002Fconfig.json`. On Windows that is `%APPDATA%\\com.feathermd.app\\feathermd\\config.json`. On Linux, `~\u002F.config\u002Fcom.feathermd.app\u002Ffeathermd\u002Fconfig.json`. A `localStorage` fallback is used in browser dev mode.\n\n**Is the auto-updater safe?**\nReleases are signed with Ed25519. The public key is embedded in the binary. The updater verifies the signature before writing anything. See [SECURITY.md](SECURITY.md).\n\n**How does the advanced printing engine work?**\nPressing `Ctrl + P` (or selecting File -> Print) bypasses native browser headers and footers (local times, hostnames, page URLs) using page margin overrides. It also resolves viewport clipping issues, allowing you to print clean, infinite multi-page documents seamlessly.\n\n**Why is there no plugin system?**\nA plugin system is a commitment to an API surface for a long time. Feather MD is small enough that a focused feature set is the point. If something is missing, open an issue. Frequent requests turn into core features.\n\n## Roadmap\n\nA short list of what is planned. Not a promise. PRs welcome.\n\n* [ ] macOS bundle (Universal binary)\n* [ ] Document outline in the gutter\n* [ ] Export to HTML and PDF\n* [ ] Optional offline spellcheck (OS-native)\n* [ ] Snippets and template library\n* [ ] First-class image paste with sidecar storage\n* [ ] Footnotes and math rendering toggles\n* [ ] More themes (community-contributed)\n\n## Contributing\n\nBug reports, feature requests, themes, documentation, and code PRs are all welcome.\n\n* Workflow and standards: [CONTRIBUTING.md](CONTRIBUTING.md)\n* Community norms: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)\n* Security disclosures: [SECURITY.md](SECURITY.md)\n\nFirst-time open-source contributor? Open a small documentation fix to get familiar with the flow.\n\n## Acknowledgments\n\nFeather MD stands on the work of others. Thanks to:\n\n* [Tauri](https:\u002F\u002Ftauri.app) for proving you do not need to ship Chromium.\n* [CodeMirror 6](https:\u002F\u002Fcodemirror.net) for an editor that respects the bundle budget.\n* [Marked](https:\u002F\u002Fmarked.js.org) and [DOMPurify](https:\u002F\u002Fgithub.com\u002Fcure53\u002FDOMPurify) for fast, safe Markdown.\n* [highlight.js](https:\u002F\u002Fhighlightjs.org) for syntax highlighting that lazy-loads cleanly.\n* [Vite](https:\u002F\u002Fvitejs.dev) for a build chain that gets out of the way.\n\n## Star history\n\nIf Feather MD saved you a few hundred MB of RAM today, a star helps it reach the next person tired of Electron.\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=prathamreet\u002FfeatherMD&type=Date)](https:\u002F\u002Fstar-history.com\u002F#prathamreet\u002FfeatherMD&Date)\n\n## License\n\n[MIT](LICENSE). Use it, fork it, ship it.\n\n","Feather MD 是一个轻量级的双面板 Markdown 编辑器，提供实时预览功能。其核心功能包括即时启动、实时预览和主题切换，基于 Tauri 构建，确保了极低的内存占用（约50MB）和快速的冷启动时间（小于100毫秒）。该编辑器使用 CodeMirror 6 作为文本编辑组件，支持 Windows 和 Linux 系统，并具备原生应用的文件关联能力，使得打开和编辑 Markdown 文件变得简单快捷。Feather MD 非常适合需要高效编写和查看 Markdown 文档的用户，尤其是那些希望在保持高性能的同时获得良好用户体验的开发者和技术作者。","2026-06-11 04:03:33","CREATED_QUERY"]