# horseMD opens every file as a tab in one window

> A Typora-style WYSIWYG Markdown editor for Windows, macOS and Linux whose organising idea is the window rather than the editor: one window holds the folder tree and every open file is a tab. The engineering effort shows up in a set of test scripts named after the bugs the author kept hitting.

**BND-1/horseMD** — A free Typora alternative, and then some — tabs + file-tree + WYSIWYG Markdown editor for Windows, macOS & Linux | 免费的 Typora 平替：标签页 + 文件树 + 所见即所得

- Repository: https://github.com/BND-1/horseMD
- Website: https://horsemd.yangsir.net/
- Stars: 490 · Forks: 45
- Language: JavaScript
- License: MIT
- Published: 2026-09-18 · Updated: 2026-09-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/bnd-1-horsemd

## The window is the design decision

The project names its target competitor and then names the specific thing it gets wrong.

horseMD is presented as a free Typora alternative, and the stated core idea is that every file opens as a tab in the same window, rather than each document launching its own program. A file tree on the left browses the whole folder, tabs switch between documents, and writing happens in a clean what-you-see-is-what-you-get editor.

The argument underneath is a diagnosis of the category. Most Markdown editors force a choice between a pleasant rendered view and a genuine multi-file workflow. This one takes both, in one window.

The editor itself is built on Milkdown, which is a ProseMirror-based editor, and it renders Markdown in place as you type. One codebase runs on Windows, macOS and Linux, and the whole interface switches between Chinese and English at runtime rather than at build time.

Everything else follows from that choice. Split view puts two documents side by side, both editable, opened from a tab's right-click menu. A source-plus-preview mode opens two columns in the editing area, with Markdown on the left and a read-only render on the right, scrolled in step with the current section. Tabs can be dragged into a new order, and that order persists.

The file tree is not read-only either: create, rename, duplicate, delete, reveal in the system file manager, export to PDF, drag to move, and drag an external folder into the window to add it as a workspace.

There is also a command palette with fuzzy matching over files and commands, and a session restore that reopens your folders and tabs.

## Only the modified positions are written back

This is the claim that decides whether the editor is usable, and it is stated as a list of things it refuses to do.

The rich text view writes back only the positions that were actually modified. It does not replace list markers, does not add blank lines, does not rewrite line endings or a byte order mark, and does not normalise Markdown it never touched.

That is a precise version of a promise most editors make loosely. A WYSIWYG Markdown editor that round-trips a document through its own representation will, over a few hundred edits, produce a diff that is almost entirely reformatting. In version control that is not a cosmetic problem, because the review you do on a documentation change is a review of content.

Two related behaviours protect the reading side rather than the writing side. Source mode keeps the viewport in place when you are reading and keeps the visible caret when you are editing, so toggling the view does not lose your position. And plain single newlines are displayed where they are rather than collapsed into one paragraph, with regression protection stated for tables, lists, code blocks and large documents.

There is also position memory across sessions. Reopening a document restores the previous cursor and scroll position, so a long document does not have to be scrolled back to where you were writing. The exception is deliberate: if the file changed externally, it opens from the top rather than applying a stale position.

## Pandoc is detected, never bundled

The conversion story is one line long and it is a design choice: a Pandoc document conversion feature that detects the tool on your machine instead of shipping it.

Pandoc is auto-detected, or you can select it manually. From there the export targets are Word, EPUB, LaTeX, OpenDocument, RTF and plain text. The installer does not force-bundle the third-party tool.

Bundling a converter would make the installer large and would put a version of a general-purpose document tool inside a Markdown editor, where it would go stale. Detecting it means you control the version, and the cost is that the feature does nothing until you install Pandoc yourself.

PDF export is handled separately, and it is the more elaborate of the two. The export centre is described as browser-style, and it does real pagination with a preview rather than a print dialog. Paper size, orientation, margins, body font size and overall zoom are configurable, as are a table of contents page, bookmarks, headers and footers, page numbers, and a page range.

The layout rule matters for correctness: formulas, Mermaid diagrams, tables and images are laid out for print, and the editor's own controls are excluded from the output. Code blocks keep their line numbers in the exported PDF, which is a small touch that matters for a document you intend to hand to someone.

HTML export is the third path, with four reading themes, four content widths, and configurable font size, line height, document title and a clickable table of contents, all previewable before you save a standalone file.

## The package is unsigned, so macOS calls it damaged

The installation section opens by warning you that both desktop platforms will block the first launch, and it says why.

The packages are not bought and signed, so Windows and macOS will stop you the first time. The README is direct about the framing: it is not a virus and the file is not actually corrupted, and here is how to let it through.

On macOS the sequence is: check which chip you have from the About This Mac menu, then download the arm64 disk image for Apple silicon or the one without that suffix for Intel. Drag the application to Applications. On first open you will get either a damaged file message or a developer cannot be verified message.

There are two ways past it. The first is the recommended one and uses the Finder: find HorseMD in Applications, control-click or right-click it, choose Open, and click Open again in the dialog. After that it behaves like ordinary software.

The second uses the terminal and one command:

```bash
xattr -cr /Applications/HorseMD.app
```

That clears the quarantine attribute the browser put on the download. The README notes it is a one-time step per machine and that updates generally do not need it repeated.

On Windows the equivalent is the SmartScreen dialog, where you choose More info and then Run anyway. Signing and notarisation are described as planned rather than shipped, with the changelog named as the place to check.

## One deb for amd64 and nine runtime libraries

Linux support is the thinnest of the three platforms, and the README is specific about it.

There is a single package format, a deb for Ubuntu and Debian on x64. Install it with the software centre, or from a terminal:

```bash
sudo dpkg -i horse_x.x.x_amd64.deb
sudo apt-get install -f   # 自动补齐依赖
```

The second command resolves missing dependencies, which is why it is in the instructions rather than left implicit.

Launch it from the application menu, or from a terminal at the fixed path where the package installs the binary. Other distributions, with Fedora and Arch named, are told to build from source instead. So there is no rpm, no AppImage and no tarball, despite the desktop platforms having proper installers.

The runtime dependencies are listed by name: a GTK 3 library, a notification library, an NSS library, an X screen saver library, an XTEST library, desktop utilities, an accessibility library, a UUID library and a secret storage library. That list is the honest signature of an Electron application on Debian, and it is useful if you are packaging the deb yourself.

Mobile is a separate story rather than a desktop port. The repository carries iOS and Android directories, a Capacitor configuration file and a separate mobile build configuration, and the documented mobile behaviour is a read-only mode that can be locked from a control at the top of the screen.

## The test scripts are named after the bugs

The package manifest is where this project's priorities show, because the script list is almost entirely tests with names that describe failures rather than features.

There is a source map test and a scope variant of it. There is a transaction trace test. There is a review scan budget test, which is the scan that highlights review markup having a cost. There are two tests about what happens to unchanged source: one for the result and one for the reconcile user interface. There is a test for raw offsets when switching modes, and one for code block scroll stability. There are tests for Markdown preservation and for source text fidelity. There is a shortcut inventory exporter, and a profiling script for a Redis interaction.

Read together, that is a list of things this editor has broken before: caret position across mode switches, scroll jumping in code blocks, formatting creeping into text the user never edited, and the review layer becoming slow on large documents.

The build side is conventional. The shell is Electron with Vite and React, and development runs a hot-reload dev command while the build compiles the main process, the preload and the renderer into an output directory. Packaging runs the build and then a packaging step, which produces an NSIS installer on Windows, a disk image and a zip on macOS, and a deb on Linux.

Two accessibility details in the developer setup are worth noting. One install note exists because the Electron binary download is blocked on some networks and points at a mirror. And the repository tells AI assistants to read a handoff document before the agent instruction files, which is a more deliberate onboarding path than most projects bother with.

## Conclusion

Adopt horseMD if you write Markdown across a folder of files and want Typora's in-place rendering with a real multi-file workspace, since tabs plus a file tree is the specific gap the project fills. Do not adopt it if you cannot get past the unsigned-package warning on macOS or Windows, because the README is upfront that both platforms will block the first launch. Verify two things first. Open a document you care about, switch to source mode, and edit one line to see whether the untouched Markdown survives the round trip. Then check the Linux package, since the only artefact offered is a single amd64 deb with nine named runtime libraries.

## FAQ

### What is horseMD?

A free, MIT-licensed WYSIWYG Markdown editor for Windows, macOS and Linux, positioned as a Typora alternative. Its distinguishing feature is the window model: one window holds the folder's file tree and every open document is a tab, rather than each file launching its own program.

### Will macOS or Windows block horseMD on first launch?

Yes, and the README says so up front. The packages are unsigned, so macOS reports a damaged file or an unverified developer, and Windows shows SmartScreen. The documented workarounds are right-click then Open in the Finder, or clearing the quarantine attribute with xattr on the command line.

### Does horseMD rewrite my Markdown when I edit rich text?

The stated behaviour is that only modified positions are written back. It does not replace list markers, add blank lines, rewrite line endings or a byte order mark, or normalise Markdown it did not touch. Source mode also keeps the viewport when reading and the caret when editing.

### Does horseMD include Pandoc?

No. It detects Pandoc on your machine or lets you select it manually, then exports to Word, EPUB, LaTeX, OpenDocument, RTF and plain text. The installer deliberately does not force-bundle the third-party tool, so the conversion options do nothing until you install it yourself.

### What Linux packages does horseMD publish?

One deb for Ubuntu and Debian on x64, installed with the software centre or with dpkg followed by dependency resolution. Other distributions are told to build from source. The listed runtime dependencies include GTK 3, a notification library, NSS, X screen saver and XTEST libraries, desktop utilities, an accessibility library, a UUID library and a secret storage library.

## Sources

- [BND-1/horseMD on GitHub](https://github.com/BND-1/horseMD)
- [License: MIT](https://github.com/BND-1/horseMD/blob/main/LICENSE)
- [Project website](https://horsemd.yangsir.net/)
- [README](https://github.com/BND-1/horseMD/blob/main/README.md)
- [Releases](https://github.com/BND-1/horseMD/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/bnd-1-horsemd
