Download
| System | Chip | Download | |
|---|---|---|---|
| Windows | Intel / AMD | Markpad_2.7.4_x64-setup.exe |
installer |
| Intel / AMD | Markpad_2.7.4_x64.exe |
portable | |
| ARM64 | Markpad_2.7.4_arm64-setup.exe |
installer | |
| ARM64 | Markpad_2.7.4_arm64.exe |
portable | |
| macOS | Intel and Apple Silicon | Markpad_2.7.4_universal.dmg |
one file for both |
| Linux | x86-64 | Markpad_2.7.4_amd64.AppImage |
portable |
| x86-64 | Markpad_2.7.4_amd64.deb |
Debian, Ubuntu | |
| x86-64 | Markpad-2.7.4-1.x86_64.rpm |
Fedora, RHEL, openSUSE |
Note
macOS Gatekeeper Notice: the .dmg is not yet notarized, so the first launch is refused — "Markpad cannot be opened because the developer cannot be verified" — and the dialog offers only Cancel and Move to Trash. Two ways past it, both one-time:
- Control-click (right-click)
Markpad.appin Finder → Open → Open. That dialog has the button the double-click one does not. - Or double-click once and press Cancel, then go to System Settings → Privacy & Security, scroll to Security, and press Open Anyway beside the message naming Markpad. Authenticate with your password or Touch ID and confirm.
Being unsigned also means macOS grants file access per prompt instead of remembering it, so Markpad may keep asking for permission — most visibly with auto-save on (it can be turned off in Settings; closing a tab still offers to save) and in documents with many local images, which can ask once per image. Signing the app yourself on your own Mac ends that: see this comment on #209 — a code-signing certificate made in Keychain Access plus codesign --force --deep, or the Sentinel app. It has to be redone after each update.
The two Windows files differ only in that one installs and one does not.
Package managers: choco install markpad-app (Windows), sudo snap install markpad (Linux).
What Markpad renders
Every syntax Markpad renders is in one document — download markdown-syntax.md (简体中文) and open it in Markpad: the preview shows each feature working, the editor beside it shows how each one is written. Give the same file to an AI and it knows exactly what Markpad can render: ask it to reformat a document you already have, or to write a new one that uses the whole range — callouts, tables, footnotes, maths, diagrams — and open the result here. Read it on GitHub.
What's Changed
- fix(snap): stop using the rust plugin, and build snapcraft.yaml on pull requests by @PathGao in #577
- chore(ci): install the Linux build dependencies once by @PathGao in #578
- perf(snap): package the release's .deb instead of compiling Markpad again by @PathGao in #579
- ci: compile pull requests on the Ubuntu the release compiles on by @PathGao in #580
- fix: bring Cargo.lock to 2.7.3 and guard the three version files by @PathGao in #582
- feat(find): open the preview find bar on the selected text by @PathGao in #586
- ci: restore the cache key and the package list that did not reach master by @PathGao in #583
- chore(deps): the upgrades that are available, and why three are not by @PathGao in #587
- chore(release): write the version once, in the three files it lives in by @PathGao in #588
- ci: ask the AppImage what it bundles, and whether it starts by @PathGao in #584
- fix(preview): a ticked task dims its content once, not once per nesting level by @PathGao in #589
- fix(deps): back to monaco-editor 0.55.1 — 0.56 kills vim mode by @PathGao in #599
- fix(preview): hide the disclosure triangle, which one colon never did by @PathGao in #598
- chore: remove Dependabot by @PathGao in #600
- chore(ci): remove the snap build check by @PathGao in #601
- chore(deps): reqwest 0.13 and winreg 0.55 by @PathGao in #602
- chore(deps): notify 6.1.1 → 8.2.0 by @PathGao in #603
- fix(i18n): require the language, so a call site cannot forget it by @PathGao in #605
- refactor(rust): split lib.rs into fs_safety, markdown, commands and app by @PathGao in #606
- refactor(scroll): give the buffer's lines and the renderer's different types by @PathGao in #607
- refactor(tabs): derive isDirty, and give a keystroke one route to the document by @PathGao in #608
- refactor(folds): give heading and callout folds one owner by @PathGao in #609
- refactor(markdown): collapse the grammar data the two languages duplicate by @PathGao in #611
- ci: one release build at a time, and no runner it names can move on its own by @PathGao in #612
- fix(front-matter): key the edit errors by document, like their four siblings by @PathGao in #613
- perf(preview): remember what KaTeX and highlight.js drew, and debounce for a typist by @PathGao in #614
- test: run the runes-module tests through the compiler that owns runes by @PathGao in #615
- chore(rust): run rustfmt once, and add the gate that keeps it run by @PathGao in #616
- fix(i18n): the eleven toasts that only ever spoke English by @PathGao in #620
- fix(folds): measure a fold from its layout height, not its scrollable extent by @PathGao in #617
- fix(settings): give theme, zoom and preview width the persistence every other setting has by @PathGao in #618
- refactor(titlebar): read the markdown extension list, do not restate it by @PathGao in #623
- fix(anchors): convert the rect delta into scroll pixels before adding it (#621) by @PathGao in #625
- feat(editor): a strikethrough button, and the toolbar bug that made it unavoidable by @PathGao in #626
- fix(settings): hand back the effect root disposer the store was throwing away by @PathGao in #624
- fix(markdown): teach code_region_ranges about indented code blocks by @PathGao in #628
- fix(tabs): keep the untitled buffer out of the path history, and drop three dead interface parts by @PathGao in #627
- fix(tabs): take the tab menus' chords from the registry, not from a literal by @PathGao in #629
- fix(editor): escape what a markdown link destination cannot carry by @PathGao in #630
- fix(editor): teach the list buttons the marker grammar the renderer already knows by @PathGao in #631
- perf(preview): replace the blocks that changed instead of the article by @PathGao in #632
- ci: pin node past the manifest lookup that keeps failing by @PathGao in #633
- fix(scroll-sync): give a collapsed fold both ends of the lines it hides by @PathGao in #634
- test: run the runes-module suites under the compiler that owns runes by @PathGao in #635
- feat(editor): continue a Markdown list when Enter is pressed inside one by @PathGao in #636
- fix(startup): vet the paths argv hands over before opening them by @PathGao in #637
- fix(settings): collect the last two writers outside the persistence mechanism by @PathGao in #638
- perf(preview): scan the article once, and keep the sections between renumbered headings by @PathGao in #639
- fix(settings): guard the OS type instead of casting whatever arrives by @PathGao in #640
- refactor(tabs): give the anchor line the renderer-line type it always was by @PathGao in #641
- fix(session): turning off Restore State left the session file on disk by @PathGao in #642
- refactor(fold): lift the fold drivers out of the viewer so their tests can import them by @PathGao in #644
- test: close the last three harness gaps left by the vitest migration by @PathGao in #643
- refactor(platform): give the app one answer for what platform it is running on by @PathGao in #646
- fix(shortcuts): stop the destructive chords answering to modifiers they never declared by @PathGao in #647
- feat(editor): add and remove table rows and columns without editing pipes by hand by @PathGao in #645
- fix(editor): give Ctrl/Cmd+Shift+Z back to redo by @PathGao in #648
- fix(shortcuts): scope Ctrl+F4 to Windows, as its requirement always said by @PathGao in #649
- fix(tests): declare the four editor chords the table keys took by @PathGao in #650
- fix(shortcuts): Alt is called Option on a Mac by @PathGao in #651
- feat(shortcuts): Mod+K inserts a link, and the table verbs move off the chord by @PathGao in #652
- feat(shortcuts): keys for the two column verbs, and a better rule for why by @PathGao in #653
- refactor(i18n): fold the supplementary table into the dictionary literal by @PathGao in #654
- fix(anchor): one numbering for the tab's anchor line by @PathGao in #655
- test: delete two proven-redundant assertions, and unpin three from their formatting by @PathGao in #656
- refactor(viewer): lift the key dispatcher out, so its tests can call it by @PathGao in #657
- ci: run the AppImage tooling without FUSE by @PathGao in #658
- docs: bring the release runbook and the syntax reference up to 2.7.4 by @PathGao in #660
- fix(toc): the floating toggle clears the editor toolbar instead of covering Bold by @PathGao in #663
- fix(editor): the format buttons see the markers just outside the selection by @PathGao in #662
- feat(links): a modifier-click on a document link opens it in a tab by @PathGao in #664
- fix(preview): the link hover box names the link, and goes when you click it by @PathGao in #665
- feat(motion): one preference for whether a jump animates its scroll by @PathGao in #666
Full Changelog: v2.7.3...v2.7.4