v0.20.0-beta.2
Pre-release
Pre-release
·
38 commits
to develop
since this release
Immutable
release. Only release title and notes can be modified.
❗ This is a pre-release
- May contain bugs and unfinished features.
⚠️ Note for macOS users
Builds are unsigned (no Apple Developer ID). After dragging MarkText into Applications, clear the quarantine flag once:
xattr -cr /Applications/marktext.app
Verifying downloads
All artifacts are listed with their SHA-256 in SHA256SUMS.txt. Verify with:
sha256sum -c SHA256SUMS.txt --ignore-missing
What's Changed
- chore(release): v0.19.0 release branch (DO NOT MERGE until stable) by @Jocs in #4269
- chore: bump develop to 0.20.0-dev by @Jocs in #4296
- docs(release): update Step 7 asset list to 24 by @Jocs in #4298
- docs(end-user): align user docs with 0.19 prefs and platform matrix by @Jocs in #4300
- docs(dev): sync developer docs with current codebase by @Jocs in #4299
- chore: convert repo to pnpm monorepo (packages/desktop, muyajs, website) by @Jocs in #4302
- refactor(website): migrate to Next.js 15 + Cloudflare Workers CI by @Jocs in #4305
- feat(website): serve www.marktext.me (301 → apex) by @Jocs in #4308
- fix(website): www→apex redirect (middleware) + smarter preview-URL parsing by @Jocs in #4309
- ci(website): enable Preview URLs on marktext-website Worker by @Jocs in #4311
- refactor(website): redesign landing page, drop markdown engine deps by @Jocs in #4312
- feat(muya): migrate TS rewrite to packages/muya alongside legacy muyajs by @Jocs in #4314
- feat(website): add /docs route and consolidate docs/ under packages/website/ by @Jocs in #4316
- fix: replace remaining absolute raw.githubusercontent.com URLs with relative paths in READMEs by @Jocs with @Copilot in #4329
- fix(website): serve prerendered docs pages via static-assets cache by @Jocs in #4335
- fix(website): open download buttons in new tab pointing to releases page by @Jocs in #4336
- refactor(website): simplify docs subtree (palette / sidebar / markdown / nav) by @Jocs in #4349
- refactor(website): simplify landing page (helpers, types, data-driven blocks) by @Jocs in #4350
- chore(website): tighten middleware matcher; drop unused 'use client' by @Jocs in #4351
- fix(muyajs): preserve nested lists of differing types (#4341) by @Jocs in #4354
- fix(muyajs): allow CJK ideographs as flanking boundary for emphasis by @Jocs in #4355
- fix(muyajs): clamp setStart offset to legal range to prevent IndexSizeError (#2800) by @Jocs in #4358
- fix(muyajs): null-guard list block paths to prevent renderer crash (#4346) by @Jocs in #4359
- fix: restore local builds after monorepo split by @Jocs in #4361
- fix(release): add repository field for electron-builder by @Jocs in #4368
- fix(muyajs): split correct paragraph on Enter in multi-block list items (#4374) by @Jocs in #4376
- fix(renderer): improve graphite contrast and unify accent colors (#4377) by @Jocs in #4378
- feat(muya): expose desktop-required public API accessors by @Jocs in #4381
- feat(muya): expose themeable CSS variables and diagram theming by @Jocs in #4382
- feat(muya): add block duplicate/insert/delete public API by @Jocs in #4384
- feat(muya): restore flowchart and sequence diagrams by @Jocs in #4385
- feat(muya): add ImagePathPicker floating autocomplete UI by @Jocs in #4386
- fix(muya): unbreak lint:css (stylelint 17 compatibility) by @Jocs in #4388
- feat(muya): add cursorCoords + active formats to selection-change by @Jocs in #4387
- feat(muya): implement focus mode (dim inactive blocks) by @Jocs in #4389
- feat(muya): emit format-click and preview-image interaction events by @Jocs in #4390
- feat(muya): add updateParagraph block-type conversion API by @Jocs in #4391
- feat(muya): add runtime setOptions / setFont / setTabSize / setListIndentation by @Jocs in #4393
- feat(muya): add spellcheck word-replacement API by @Jocs in #4392
- feat(muya): serialize/restore undo history by @Jocs in #4394
- feat(muya): add invalidateImageCache by @Jocs in #4396
- test(muya): port MarkText regression cases (#4341/#4307/#4190) by @Jocs in #4399
- feat(muya): add createTable / insertImage / setCursor API by @Jocs in #4397
- feat(muya): add clipboardFilePath paste hook by @Jocs in #4398
- fix(muya): treat CJK as punctuation for strong/em flanking (#4307) by @Jocs in #4401
- feat(desktop): consume @muyajs/core in util files (markdownToHtml/pdf/dompurify/printService/sourceCode/icon) by @Jocs in #4402
- feat(desktop): add kebab-case editor CSS vars to themes for @muyajs/core by @Jocs in #4404
- feat(desktop): migrate editor.vue to @muyajs/core engine by @Jocs in #4406
- fix(i18n): unify quick-insert hint to "/" trigger by @Jocs in #4405
- test(parity): failing-test scoreboard for #4406 muyajs→@muyajs/core gaps by @Jocs in #4407
- fix(muya): insertParagraph immediate-block anchoring in nested blocks (PG13) by @Jocs in #4408
- fix(muya): consume autoCheck + hideLinkPopup options (PG3/PG12) by @Jocs in #4409
- feat(muya): expose block affiliation in selection-change (PG1) by @Jocs in #4410
- feat(muya): restore clipboard image paste + imageAction routing + copyAsRich (PG5/PG6/PG9) by @Jocs in #4411
- fix(muya): inline export CSS + heading ids for offline export & TOC anchors (PG7/PG8) by @Jocs in #4412
- feat(muya): emit preview-image + heading-copy-link events (PG10/PG11) by @Jocs in #4414
- feat(muya): restore drag-and-drop image insertion (PG4) by @Jocs in #4413
- feat(desktop): wire @muyajs/core parity APIs (menu state, copyAsRich, heading-link, source cursor, saved indicator) by @Jocs in #4415
- fix(desktop): pass imageAction + getPathForFile to Muya constructor (re-activate PG4/5/6) by @Jocs in #4417
- fix(muya): resolve pre-existing lint:css no-descending-specificity by @Jocs in #4419
- fix(muya): record source-mode bulk edit as a single undo boundary (PG14) by @Jocs in #4420
- test(desktop): remove redundant muyajs-engine unit specs (Phase F) by @Jocs in #4422
- fix(desktop): retarget theme.ts editor CSS at muya mu-* classes (E4) by @Jocs in #4421
- fix(desktop): port print image-src resolution off muyajs (last muya/lib import) by @Jocs in #4423
- fix(muya): crash typing '#' — guard I18n.t + add heading-copy-link locale key by @Jocs in #4424
- fix(muya): add missing image i18n keys ('Click to add an image' / 'Load image failed') by @Jocs in #4427
- fix(muya): render relative image paths anchored to the document dir (Phase G blocker) by @Jocs in #4428
- fix(desktop): Edit▸Replace action + saved-indicator false-clean (Phase G) by @Jocs in #4431
- fix(muya): preserve drive/UNC roots in relative image path resolution (#4428 review follow-up) by @Jocs in #4430
- fix: source-mode cursor sync + language-switch hint refresh (Phase G G7/G8) by @Jocs in #4432
- fix(muya): updateParagraph data-loss on list/quote + front-matter insertion + frontmatterType lang (Phase G) by @Jocs in #4429
- test: cover @muyajs/core migration regression gaps (Phase G) by @Jocs in #4434
- fix(muya): restore cross-cell table selection + resolve dead TableChessboard picker (Phase G) by @Jocs in #4435
- test(muya): de-flake heading-locale + backspace regression specs (#4434 review) by @Jocs in #4436
- fix(muya): restore the in-editor table grid picker (revert #4435 chessboard deletion + wire trigger) by @Jocs in #4437
- docs: archive the muyajs → @muyajs/core migration tracker by @Jocs in #4438
- chore: keep .claude/ fully ignored (untrack migration tracker) by @Jocs in #4439
- fix: restore editor visual parity after @muyajs/core migration by @Jocs in #4443
- fix(muya): align Cmd+A / copy / cut / paste with legacy muyajs by @Jocs in #4446
- chore(muya): align packages/muya conventions with desktop + doc cleanup by @Jocs in #4450
- fix(muya): editor parity with muyajs (themes, fonts, spellcheck) + CLASS_NAMES cleanup by @Jocs in #4454
- refactor(muya): split clipboard into modules + type copy/paste modes as enums by @Jocs in #4459
- fix(muya): enable inline image resize by @Jocs in #4460
- refactor(muya): rebuild ImageEditTool to match muyajs ImageSelector by @Jocs in #4461
- chore: remove ununsed comments by @Jocs in #4462
- chore(muya): remove redundant comments added during the muyajs port by @Jocs in #4463
- refactor(muya): unify Selection into facade over Text/Table/Image sub-selections by @Jocs in #4467
- fix(muya): match muyajs nested list spacing and bullet markers by @Jocs in #4469
- fix(editor): restore caret on source-mode undo and tab switch by @Jocs in #4470
- fix(muya): preventDefault on forward-delete paragraph merge by @Jocs in #4471
- fix(muya): restore Paste as Plain Text via async clipboard read by @Jocs in #4472
- fix(muya): stop drag-selection from expanding to whole blocks by @Jocs in #4477
- fix(muya): delete whole image on backspace (inline, raw html, reference) by @Jocs in #4478
- fix(muya): stop Shift+Tab unindent from crashing on insertTab by @Jocs in #4479
- fix(muya): stop arrow nav from crashing on null cursor coords by @Jocs in #4480
- fix(muya): clear the
/trigger when quick-inserting front matter by @Jocs in #4481 - fix(desktop): make Promote Heading shortcut fire on macOS by @Jocs in #4482
- fix(desktop): refresh muya locale on language switch (hint + quick-insert menu stay translated) by @Jocs in #4489
- fix(desktop): anchor theme card h3 label to its heading by @Jocs in #4490
- fix(muya): stop in-flight float positioning from re-revealing a hidden float by @Jocs in #4491
- fix(desktop): return relative image path for local-path-string inserts by @Jocs in #4492
- fix: insert web images dragged from a browser by @Jocs in #4494
- fix(muya): support resizing images that share the same link by @Jocs in #4495
- fix(muya): render vega-lite diagrams under the renderer CSP by @Jocs in #4496
- fix(muya): refresh local images on "Reload images" (View → Reload images) by @Jocs in #4498
- fix: reflect the current block in the Paragraph menu (PG1) by @Jocs in #4500
- fix(muya): keep selection after applying an inline format to a range by @Jocs in #4501
- fix(desktop): reflect underline/superscript/subscript/highlight in the Format menu by @Jocs in #4503
- fix: paragraph menu / command palette parity (focus, list unwrap, shortcut symbols) by @Jocs in #4504
- fix(muya): keep cursor in place when toggling Loose List Item by @Jocs in #4506
- refactor(muya): rework the selection type surface by @Jocs in #4512
- fix(desktop): point in-app docs links at marktext.me by @Jocs in #4513
- fix(website): point self-referential doc links at the published docs by @Jocs in #4514
- fix(website): register the missing end-user docs pages by @Jocs in #4515
- feat(i18n): add Turkish (tr) locale by @FurkaanBoraa in #4510
- feat: make PlantUML server URL configurable by @jyte in #4400
- fix: #4474 unsaved indicator never clears after undoing back to on-disk content by @FurkaanBoraa in #4475
- fix(test): correct PlantUML custom-server URL assertion by @Jocs in #4517
- fix(i18n): reconcile desktop & muya locale keys after the muya engine refactor by @Jocs in #4516
- test(muya): backfill engine-unit coverage for audited gaps by @Jocs in #4508
- test(muya-e2e): backfill real-DOM e2e coverage for audited gaps by @Jocs in #4511
- test(desktop): backfill renderer/main unit coverage for audited gaps by @Jocs in #4509
- refactor(muya): return enums from TextSelection direction/type by @Jocs in #4519
- refactor(muya): setSelection takes anchor/focus endpoints by @Jocs in #4523
- refactor(muya): route format/codeblock selection through setCursor by @Jocs in #4520
- refactor(muya): split ICursor into focused interfaces by @Jocs in #4524
- refactor(muya): keep table rect selection exclusive of text selection by @Jocs in #4522
- refactor(muya): extract computeDirection/computeCaretType helpers by @Jocs in #4525
- refactor(muya): simplify selectAll into three escalation rules by @Jocs in #4526
- test(muya): replace any with precise block/state types in specs by @Jocs in #4528
- refactor(desktop): remove no-explicit-any suppressions in favor of precise types by @Jocs in #4527
- refactor(muya): drop cyclomatic complexity below 20 across the engine by @Jocs in #4529
- refactor(muya): rename selection enum members to UPPER_SNAKE_CASE by @Jocs in #4531
- chore: translate remaining Chinese console/debug strings to English by @Jocs in #4533
- refactor(muya): enforce
_prefix for private members via lint by @Jocs in #4535 - refactor(muya): mark core/state/selection internals private by @Jocs in #4541
- refactor(muya): mark block-tree internals private/protected by @Jocs in #4538
- refactor(muya): mark UI float-tool internals private by @Jocs in #4539
- refactor(desktop): remove remaining no-explicit-any suppressions by @Jocs in #4548
- feat: align Paragraph/Format menus with muyajs behavior on @muyajs/core (+3 upgrades) by @Jocs in #4547
- fix(muya): sync inline format toolbar highlight via selection-change by @Jocs in #4558
- fix(muya): align normalizePastedHTML link unlinking with muyajs by @Jocs in #4550
- fix(muya): render footnotes in copy-as-html / copy-as-rich clipboard HTML by @Jocs in #4544
- fix(muya): align clipboard cut/delete semantics with muyajs by @Jocs in #4540
- fix(muya): collapse code block to paragraph on cross-block cut from its language line (#918) by @Jocs in #4545
- fix(muya): merge pasted paragraphs/headings inline (muyajs parity) by @Jocs in #4542
- fix(muya): replace selected image on paste + language-input paste parity by @Jocs in #4543
- fix(muya): merge same-type list paste + plain-text block HTML (muyajs parity) by @Jocs in #4546
- fix(muya): round-2 paste/clipboard parity fixes from a full muyajs re-audit by @Jocs in #4549
- fix: populate the table of contents on open and fix link navigation by @NSO73 in #4448
- fix(desktop): paste captured image on macOS Edit → Screenshot by @Jocs in #4566
- fix(muya): restore editor cursor when closing the search bar (selectHighlight) by @Jocs in #4567
- fix(muya): restore find-bar prefill from editor selection by @Jocs in #4569
- fix(search): scroll editor to match when opening a folder-search result by @Jocs in #4568
- fix(muya): serialize lists with the configured listIndentation by @Jocs in #4570
- fix(muya): restore the focused frontmatter delimiter markers by @Jocs in #4571
- fix(muya): show code-block line numbers on first render for language-less blocks by @Jocs in #4572
- fix(muya): re-parse on parse-affecting option changes so ```math toggles live by @Jocs in #4573
- fix(export): repair five styled-HTML export regressions (math, vega, footnotes, TOC, images) by @Jocs in #4576
- fix(export): make "Overwrite theme font" actually override the selected theme by @Jocs in #4579
- fix(editor): restore per-tab caret on tab switch by @Jocs in #4580
- fix(editor): restore undo after an external file reload by @Jocs in #4582
- fix(desktop): auto-focus the editor when creating or opening a tab by @Jocs in #4581
- fix(editor): align code block line numbers vertically by @Jocs in #4583
- fix(editor): keep spelling suggestions when "no underline" is enabled by @Jocs in #4584
- refactor(muya): decouple engine/block layers from src/ui plugin internals by @Jocs in #4587
- fix(clipboard): copy only the selected part of cross-block selections by @Jocs in #4586
- fix(muya): correct setext heading level when typing the underline by @Jocs in #4591
- fix(muya): guard checkNeedRender against a null cursor (image-preview reclick crash) by @Jocs in #4588
- test(desktop): backfill renderer/main unit coverage for post-migration gaps by @Jocs in #4592
- test(muya-e2e): backfill real-DOM e2e coverage for post-migration gaps by @Jocs in #4593
- test(muya): backfill engine unit coverage for post-migration gaps by @Jocs in #4589
- test(desktop): backfill app e2e coverage for post-migration gaps by @Jocs in #4594
- chore(security): remediate 25 Dependabot alerts by @Jocs in #4596
- chore(deps): upgrade all packages to latest + align shared versions by @Jocs in #4597
- test(muya): poll for the html_tag mount instead of waiting a single frame by @Jocs in #4607
- fix(muya): escape pipes at cell start and consecutive pipes in table serialization by @Jocs in #4601
- fix(muya): absorb a manually typed closing markdown marker after text by @Jocs in #4602
- fix(muya): let Shift+ArrowUp/Down extend selection while the inline toolbar is shown by @Jocs in #4603
- fix(muya): render
- fix(muya): keep emphasis intact when a line contains escaped dollar signs by @Jocs in #4605
- fix(muya): paste a URL into link parentheses without nesting a markdown link by @Jocs in #4608
- fix(muya): make links inside a raw HTML block clickable by @Jocs in #4609
- fix(muya): correct inline code/math shortcut labels in the format toolbar by @Jocs in #4611
- fix: #4356 crash when using the link popover on a link with an unsupported protocol by @FurkaanBoraa in #4473
- fix(muya): map to U+00A0 and keep escaped spaces unbreakable by @Jocs in #4612
- fix(desktop): scroll to non-heading in-document anchors on Ctrl/Cmd-click by @Jocs in #4613
- fix(muya): keep the inline-math parse-error message on one line by @Jocs in #4614
- fix(muya): allow inline style in the html-block live preview by @Jocs in #4618
- fix(muya): cap and horizontally scroll the inline-math popup by @Jocs in #4615
- fix(desktop): isolate the editor stacking context so previews stay under modals by @Jocs in #4617
- test(desktop): fix inline code/math shortcut tests failing on develop after #4611 by @FurkaanBoraa in #4624
- fix(desktop): scroll CodeMirror to the heading on TOC click in source mode by @Jocs in #4619
- fix(muya): constrain a rendered diagram svg so wide diagrams don't clip by @Jocs in #4616
- fix(desktop): apply custom keybinding changes without an app restart by @Jocs in #4621
- fix(muya): break undo entries at word and edit-kind boundaries by @Jocs in #4622
- fix(muya): swap cross-block arrow boundary keys in RTL mode by @Jocs in #4610
- fix: opaque light-theme editor text colors for crisp antialiasing by @Jocs in #4631
- fix(muya): clamp selection offset to the node's legal range by @Jocs in #4626
- fix(desktop): prevent data loss when closing after Source Code mode edits by @Jocs in #4627
- fix(muya): center inline math vertically so it sits on the text baseline by @Jocs in #4632
- fix(muya): render inline math containing an escaped dollar sign by @Jocs in #4629
- fix(muya): prevent renderer crash when deleting consecutive thematic breaks by @Jocs in #4628
- test: drop the low-value opaque-color guard tests from #4466 by @Jocs in #4633
- test(muya): regression guard for code-block scroll on typing (#3191) by @Jocs in #4638
- fix(muya): align serialized table columns by visual width (#1983) by @Jocs in #4636
- fix(muya): insert ordinary spaces for Tab instead of non-breaking spaces (#3273) by @Jocs in #4634
- fix(muya): convert typed diagram fences to diagram blocks on Enter (#2177) by @Jocs in #4635
- fix(muya): keep the caret on Shift+Tab list unindent (REPLACEMENT path) (#3223) by @Jocs in #4637
- fix(muya): typed diagram fences create diagram blocks via the language selector (#2177) by @Jocs in #4640
- refactor: rewrite getTOC and remove unused comments by @Jocs in #4642
- fix(muya): allow trailing whitespace after a math block's closing $$ (#1931) by @Jocs in #4649
- fix(muya): stop ArrowDown from endlessly creating empty paragraphs (#3520) by @Jocs in #4650
- fix(muya): take the list marker from a line start in _convertToList (#2429) by @Jocs in #4651
- fix(muya): strip trailing punctuation from extended autolinks (#2096) by @Jocs in #4652
- fix(muya): ArrowUp at document start moves the caret to offset 0 (#3193) by @Jocs in #4655
- fix(muya): destroy UI plugins on Muya.destroy() to stop leaking DOM nodes (#3315) by @Jocs in #4659
- fix(muya): don't cut a cross-block selection on Ctrl+ (Windows/Linux) (#3491) by @Jocs in #4656
- fix(muya): apply inline format across paragraphs nested in one blockquote (#3462) by @Jocs in #4661
- fix: #4534 group theme menu into Light/Dark submenus by @FurkaanBoraa in #4623
- fix(muya): drop pending op batch on setContent to prevent cross-document corruption (#2938) by @Jocs in #4658
- test(desktop): pin autosave's recreate-missing-directory behavior (#3509) by @Jocs in #4657
- fix(muya): keep list item non-empty on Enter in empty first paragraph (#4644) by @Jocs in #4660
New Contributors
- @Jocs with @Copilot made their first contribution in #4329
- @FurkaanBoraa made their first contribution in #4510
- @jyte made their first contribution in #4400
- @NSO73 made their first contribution in #4448
Full Changelog: v0.19.0...v0.20.0-beta.2