Releases: b451c/quickmd
Releases · b451c/quickmd
v1.3.2 — File > Open, Local Link Navigation, URL Encoding
What's New
Added
- Local Markdown Navigation: Clicking a link to another local
.md,.markdown,.mdown, or.mkdfile now automatically opens it in a new QuickMD window, bypassing default system editors. - Space Character URL Parsing: Links with spaces in paths/titles are now correctly percent-encoded and activate properly.
Fixed
- File > Open Menu: Restored the native
File > OpenandFile > Open Recentmenu items that were previously hidden. - Relative Document Links: Relative links like
./other.mdare now resolved against the originating document's directory.
Full Changelog: https://github.com/b451c/quickmd/blob/main/QuickMD/CHANGELOG.md
v1.3.1 — Copy to Clipboard & Search Improvements
What's New
Copy to Clipboard
- ⌘⇧C copies the entire raw markdown to clipboard
- "Copy source" button (top-right) — hover to reveal, click to copy whole file
- Copy sections — hover any heading in the main content or ToC sidebar to reveal a copy icon that copies that section's markdown
- Toast feedback — "Copied!" notification on all copy operations
Search Improvements
- Word-level highlighting now works inside code blocks, tables, and blockquotes (previously only text and headings)
- Per-occurrence navigation — arrow keys move between individual word matches, not just blocks. Counter shows exact count (e.g., "5/19")
- Focused match highlighted in orange, all others in yellow
Performance Fixes
- Critical hang fix:
MarkdownBlockconverted from enum with computedidto struct with storedid— eliminates thousands ofAttributedStringcopies perLazyVStacklayout pass that caused 100% CPU freezes during scrolling - Search navigation: Pre-computed highlight cache + dedicated focus state. Arrow clicks now recompute only 1 block instead of all visible blocks
- Optimized
searchHighlight: Single-pass parallel index iteration replaces per-character dictionary allocation
Full Changelog: v1.3...v1.3.1
QuickMD v1.3
Major Feature Release
17 commits since v1.2.1 — the biggest update yet, completing the entire Phase D roadmap.
New Features
Find & Search (D5) — ⌘F
- Match highlighting, counter ("1/5"),
⌘G/⇧⌘Gnavigation, Escape to close
Nested Blockquotes (D2)
- Full nesting support with left border indicators per level
Double-backtick Inline Code (D1)
code with ` backtickper CommonMark spec
Per-block PDF Export (C4)
- Each block rendered individually — page breaks only between blocks, no mid-block splits
Table of Contents (D4) — ⌘⇧T
- Auto-generated sidebar from H1–H6 headings, click-to-navigate
Reference-style Links (D3)
[text][id],[text][],[text]formats with case-insensitive matching- Definition lines hidden from output
Custom Color Themes (D6) — ⌘,
| Theme | Type |
|---|---|
| Auto | Follows system light/dark |
| Solarized Light | Warm cream background |
| Solarized Dark | Deep blue background |
| Dracula | Purple-tinted dark |
| GitHub | Clean white, familiar style |
| Gruvbox Dark | Warm earthy tones |
| Nord | Arctic blue palette |
Improvements
- Background parsing on
Task.detached(no UI freezes) - Comprehensive code audit: Sendable conformance, FocusedValue multi-window, recursive bold/italic parsing, bracket depth tracking
MarkdownThemerefactored to stored properties with static theme instances
Bug Fixes
- Triple-backtick in inline context renders correctly
- Search index mapping for AttributedString
⌘Fshortcut reliability
Full Changelog
See CHANGELOG.md
QuickMD v1.2.1
Performance & Quality Release
A quality-focused release with significant performance optimizations and code improvements.
Performance Highlights
| Optimization | Impact |
|---|---|
| Cached MarkdownRenderer | -99% allocations per parse |
| Cached syntax highlighting | Zero recomputation on re-render |
| Static regex compilation | 9 patterns, zero runtime compilation |
| Theme caching | Singleton pattern, zero allocations |
Code Quality Improvements
- Zero runtime force unwraps - All URLs moved to compile-time validated constants
- Zero sync network calls - Remote images handled gracefully in PDF export
- Proper logging - Replaced print() with os.Logger
- Consistent patterns - Stored properties instead of computed where appropriate
Audit Results
| Category | Score |
|---|---|
| SwiftUI Performance | 10/10 |
| Code Quality | 10/10 |
| Production Readiness | 10/10 |
Checksum
SHA256 (QuickMD-v1.2.1.zip) = e57d7a208e9c02bbd175792ad1a890296a42916fecce3a532b4a9419d61342c0
Full Changelog: v1.2...v1.2.1