Releases: perber/leafwiki
Release list
LeafWiki v0.11.4
📝 Changelog for v0.11.4
✨ Features
- feat(tree): allow renaming pages from tree view (#1269) (@ahfoysal)
- feat(editor): add stacked preview/layout toggle (#1270) (@ahfoysal)
- feat: rich paste (#1254) (@perber)
- feat(snapshot): add backend core for ZIP-based backup snapshots (#1255) (@perber)
- feat(ui): add TOC side panel and dropdown for page viewer (#1247) (@perber)
- feat: add date-title button to page dialogs (#1238) (@perber)
- feat:pinned pages (#1237) (@perber)
🐛 Bug Fixes
- fix(editor): convert tables without cells during rich paste (#1286) (@perber)
- fix(editor): reset editor store on unmount so rename isn't blocked after closing (#1283) (@perber)
- fix: sidebar explorer/search shortcuts open a collapsed sidebar (#1267) (@mvanhorn )
- fix(auth): stop login flash on logout, add external user-management link (#1268) (@perber)
- fix(editor): update alt text on asset rename to fix stale Lightbox title (#1256) (@perber)
- fix(ui): stop long asset filenames from overflowing the Asset Manager dialog (#1262) (@perber)
- fix(ui): fix date-title button alignment in page dialogs (#1239) (@perber)
🧾 Documentation
- docs(readme): add table of content in readme (#1285) (@Hugo-Galley )
🧰 Chores
- chore: bump the e2e-dependencies group in /e2e with 7 updates (#1244) (@dependabot[bot])
- chore: bump the npm-dependencies group in /ui/leafwiki-ui with 35 updates (#1246) (@dependabot[bot])
- chore: bump alpine from 3.23 to 3.24 (#1243) (@dependabot[bot])
- chore: bump the go-dependencies group with 2 updates (#1240) (@dependabot[bot])
- chore: bump golang from
f23e8b2to3ad5730(#1241) (@dependabot[bot]) - chore: bump node from
144769eto725aeba(#1242) (@dependabot[bot]) - chore: bump the github-actions group with 4 updates (#1245) (@dependabot[bot])
LeafWiki v0.11.3
📝 Changelog for v0.11.3
✨ Features
- feat: git backup tests and fixes (#1219) (@perber)
- feat: async filesystem resync with progress polling (#1216) (@perber)
- feat(ui): add orange shoutout (#1215) (@perber)
- feat: add code highlighting for powershell (#1210) (@perber)
- feat: live filesystem resync via SIGUSR1 and SIGHUP signal (#1206) (@perber)
- feat: add unix socket listener (#1205) (@perber)
🐛 Bug Fixes
- fix(ui): fix editor 404 flash, data loss on resize, and add request cancellation (#1232) (@perber)
- fix(ui): space mobile header logo (#1230) (@perber)
- fix(preview): allow external images (#1229) (@perber)
- fix(backup): resolve sync-divergence and harden remote re-init (#1226) (@perber)
- fix(ui): eliminate double-blink when closing add-page dialog (#1224) (@perber)
- fix(ui): improve syntax highlighting string color in light and dark mode (#1225) (@perber)
- fix(auth): restore deep link after login (#1222) (@perber)
- fix(ui): resync button margin (#1217) (@perber)
- fix(ui): clarify shell highlighting (#1214) (@perber)
- fix: address graceful shutdown lint (#1213) (@perber)
- fix: add graceful shutdown (#1211) (@perber)
- fix(editor): allow save without rewrite (#1208) (@perber)
- fix(editor): preserve custom title property through UI edit cycle (#1189) (@perber)
🧰 Chores
🔹 Other Changes
LeafWiki v0.11.2
LeafWiki v0.11.1
📝 Changelog for v0.11.1
✨ Features
🐛 Bug Fixes
LeafWiki v0.11.0
🚀 Highlights
[[WikiLink]] Syntax
Pages can now be linked by title using [[Title]] syntax — no path needed. The editor offers autocomplete, the viewer renders them with live status, and ambiguous links open a disambiguation dialog. Links are automatically updated when pages are renamed or moved, and broken links are surfaced with inline tooltips.
With --enable-link-refactor, sub-pages with absolute Markdown links are automatically rewritten when a section is moved — keeping the wiki internally consistent without manual cleanup. [[WikiLink]] references are also updated when pages are renamed or moved.
Mobile Experience
A thorough overhaul of the mobile UI: streamlined editor toolbar, decluttered title bar, reduced topbar actions, a dedicated History Panel tab bar for revisions and details, and broad layout fixes across all major screens.
Auto-Save
Pages now save automatically while you type — no manual save required. A debounce window batches rapid keystrokes into a single write, and conflict detection prevents overwriting concurrent changes. A per-device toggle lets you disable auto-save on mobile.
With --enable-revision, auto-save becomes revision-aware: edits from the same session are grouped into a single revision, keeping history clean without losing any changes.
Keyboard Shortcuts Dialog
A new help dialog lists all available keyboard shortcuts, accessible from the toolbar (hidden for viewer-role users).
Nested YAML Frontmatter
Page properties now support dot-notation keys (e.g. author.name) that map directly to nested YAML structures.
Performance
Route components and the CodeMirror editor are now lazy-loaded and split into their own chunks, significantly reducing initial bundle size. The viewer and preview components load eagerly to eliminate render waterfalls on navigation. WikiLink lookups use O(1) index structures instead of tree-walks.
Further Improvements
- Broken links section hidden for read-only users
- Context-aware section texts for viewer-role users
- Branding settings page localized
- Global error boundary with navigation-aware auto-reset
📝 Changelog for v0.11.0
✨ Features
- feat(importer): keep plain page wikilinks as native [[...]] syntax (#1163) (@perber)
- feat(i18n): localize BrandingSettings page (#1176) (@perber)
- feat(ui): add global ErrorBoundary with navigation-aware auto-reset (#1171) (@perber)
- feat(ui): broken link tooltips + viewer role gating + toolbar fix (#1165) (@perber)
- feat(properties): support nested YAML frontmatter via dot-notation keys (#1157) (@perber)
- feat(perf): lazy-load route components and split CodeMirror into own chunk (#1156) (@perber)
- feat(editor): add mobile auto-save toggle with i18n and cleanup fixes (#1152) (@perber)
- feat(revisions): session coalescing for auto-save revisions (@perber)
- feat(ui): add shortcuts help dialog (#1148) (@perber)
- feat(search): i18n with Trans for result summary, remove dead loadingAvailableTags state (#1144) (@perber)
- feat(links): hide broken links section for read-only users and i18n b… (#1140) (@perber)
- feat(viewer): context-aware section texts for read-only users (#1139) (@perber)
- feat(viewer): clear viewer state when navigating to edit mode (@perber)
- feat(ui): History Panel mobile tab bar for Revisions/Details navigation (@perber)
- feat(ui): declutter mobile editor titlebar (@perber)
- feat(ui): reduce topbar action buttons to 2 visible on all screens (@perber)
- feat(ui): mobile optimizations for editor toolbar, tree icons, and ToC button (@perber)
- feat(ui): mobile optimizations for all major screens (@perber)
- feat(wikilinks): ambiguous link backlinks, path-hint rewrite on move/rename (@perber)
- feat(editor): add [[WikiLink]] autocomplete, i18n foundation for UI strings (#1127) (@perber)
- feat(links): extract and resolve [[Title]] wiki-link syntax in link indexer (#1123) (@perber)
- feat(ui): add [[Title]] wiki-link rendering and disambiguation dialog (#1120) (@perber)
- feat(pages): add FindPagesByTitle and GET /api/pages/by-title endpoint (#1103) (@perber)
- feat: add support info (#1115) (@perber)
- feat: add git backup to remote repository (closes #996) (#1018) (@EduardSchwarzkopf)
- feat(editor): add auto-save with debounce, conflict detection (#1089) (@perber)
- feat(update): make update script more verbose (#1094) (@Hugo-Galley)
⚡ Performance
- perf(ui): load PageViewer and MarkdownPreview eagerly to eliminate render waterfall (#1180) (@perber)
- perf(wikilinks): replace tree-walk lookups with O(1) index structures (@perber)
🐛 Bug Fixes
- fix(refactor): rewrite absolute links in sub-pages when moving a section (#1182) (@perber)
- fix(editor): prevent Page404 flash when navigating to edit mode (#1181) (@perber)
- fix(ui): prevent wide branding banner from pushing toolbar off screen on mobile (#1177) (@perber)
- fix(ui): constrain branding logo to fit within header on mobile (#1175) (@perber)
- fix(auth): use primary button + i18n for login form and toolbar (#1172) (@perber)
- fix(toolbar): hide keyboard shortcuts dialog for viewer-role users (#1167) (@perber)
- fix(toolbar): increase overflow dropdown width to prevent label wrapping (#1166) (@perber)
- fix(links): prevent panic when page title equals path hint in RewriteWikiLinks (#1164) (@perber)
- fix: set 0644 permissions on uploaded asset files (#1160) (@perber)
- fix: strip WikiLinks from plain-text excerpts (@perber)
- fix(revisions): multiple concurrency and stability fixes for session coalescing (@perber)
- fix(wikilinks): ambiguous links use brand color instead of warning orange (#1143) (@perber)
- fix(a11y): replace aria-hidden overlay div with semantic button (@perber)
- fix(refactor): sync ambiguity guard between Preview and Apply (@perber)
- fix(refactor): skip ambiguous sentinel refs in rename preview; UI polish (@perber)
- fix(mermaid): rendering img tag in mermaid diagram (#1131) (#1134) (@perber)
- fix(wikilinks): handle ambiguous links (#1128) (@perber)
- fix(refactor): extend link refactoring to handle [[Title]] wiki-link syntax (#1126) (@perber)
- fix(editor): stop unsaved dialog flicker (#1116) (@perber)
- fix: sanitize search output (#1118) (@perber)
- fix(ui): enable dialog close animation (#1102) (@perber)
- fix(branding): validate file paths before deletion to prevent path traversal (#1090) (@perber)
- fix(ui): replace dialog slide animation with subtle fade/scale (#1100) (@perber)
- fix: help text to refresh-token-timeout (#1099) (@perber)
- fix: add missing space before active class in toolbar toggle buttons (#1088) (@perber)
- fix(auth): show --allow-insecure hint in HTTPS cookie errors (#1087) (@perber)
- fix: escape site name in HTML template (#1085) (@imlonghao)
🧾 Documentation
- docs: add operating modes section and sorting guide with screenshots (#1154) (@perber)
- docs: update refresh token timeout to 168 hours (#1098) (@perber)
- docs: add documentation for --disable-request-flag (#1082) (@perber)
🔧 Refactoring
LeafWiki v0.10.2
📝 Changelog for v0.10.2
v0.10.2
This patch release contains a backported security fix for search result rendering. I also includes a dependency update.
🔒 Security
- Harden search output sanitization to address an XSS-related issue in search rendering (@perber) (reported by @shafiqaimanx and @tonghuaroot)
🧰 Chores
- Bump
github.com/quic-go/quic-gofrom0.59.0to0.59.1@dependabot
LeafWiki v0.10.1
📝 Changelog for v0.10.1
This patch release includes security fixes, minor bug fixes, and stability improvements. Please update to the latest version as soon as possible.
Security
- fix(auth): harden user update authorization (#1081) (@perber)
- fix(storage): harden asset and revision path handling (#1078) (@perber)
✨ Features
- feat: add ui line wrap option to editor and position copy paste button in codeblocks (#1071) (@perber)
- feat: update header spacing (#1070) (@perber)
- feat: improve logging and allow disabling request logs (#1069) (@perber)
- feat: fail on startup when --enable-http-remote-user is set without --trusted-proxy-ips (#1068) (@perber)
- feat: add health endpoint at GET /api/health (#1065) (@perber)
🐛 Bug Fixes
- fix(auth): harden user update authorization (#1079) (@perber)
- fix: recover from corrupt SQLite database files on startup (#1077) (@perber)
- fix(editor): keep preview heading sync stable (#1075) (@perber)
- fix: GET /api/auth/me never returns 401 to avoid Basic Auth credential reset (#1067) (@perber)
- fix: page scroll position on navigation (closes #1053) (#1059) (@perber)
- fix: typo in readme (#1048) (@perber)
🧰 Chores
- chore: bump the github-actions group with 10 updates (#1037) (@dependabot[bot])
- chore: bump the npm-dependencies group in /ui/leafwiki-ui with 20 updates (#1038) (@dependabot[bot])
LeafWiki v0.10.0
📝 Changelog for HEAD
🌟 Highlights
- New
TagsandPropertiessupport withFrontmatterintegration for better structured content - Improved editor experience with better markdown insert tools,
Search / Replace, and several keyboard and layout fixes - Better content navigation with
Table of Contents, improvedPageSelect, andDrag & Dropsorting - Stronger authentication flows with
Proxy Auth, token refresh before expiry - Technical improvements including
KaTeXsupport, dependency cleanup, and stronger supply chain security
✨ Features
- feat(editor): improve markdown insert tools (#1040) (@perber)
- feat(deps): remove blackfriday markdown parser dependency (#1030) (@perber)
- feat(auth): add test setup with dex & oauth2-proxy (#1028) (@perber)
- feat(ui): update metadata (@perber)
- feat(tags): improve tag browsing excerpts (#998) (@perber)
- feat(script): Add update scripts (#1014) (@Hugo-Galley)
- feat(ui): add katex support (#995) (@zhaoyang (Cyrus) Hong)
- feat(ui): add frontmatter support & tags filtering (@perber)
- feat(codemirror): add search / replace support (#992) (@perber)
- feat(ui): adjust metadata pageviwer ui (#991) (@perber)
- feat(ui): add toc (#974) (@perber)
- feat(ui): improve PageSelect (#973) (@perber)
- feat(ui): add drag & drop sort (#972) (@perber)
- feat(auth): add proxy auth (#971) (@perber)
🐛 Bug Fixes
- fix(auth): refresh before token expiry (#1042) (@perber)
- fix(ui): italic shortcut (#1039) (@perber)
- fix(auth): await logout (#1029) (@perber)
- fix(ui): reset metadata dirty state (#1027) (@perber)
- fix(ui): improve editor and asset layouts (#1026) (@perber)
- fix(ui): favicon is not displayed when changed in branding settings (#1023) (@perber)
- fix(auth): resets basic auth credentials (#1017) (@perber)
- fix(tags): keyboard regression after introducing Tags & Properties in page editor (#1016) (@perber)
- fix(ui): improve tag suggestions & keyboard handling (#997) (@perber)
- fix(ui): ToC hierarchy (#993) (@perber)
- fix(ui): favicon initial html (#1025) (@perber)
🔧 Refactoring
- refactor: remove tree dependency from TagsService and PropertiesService (#1022) (@perber)
- refactor: search indexing via pagesave hook (#1019) (@perber)
🧪 Tests
- test: verify imported metadata (#1031) (@perber)
- test: update search index after move (#1020) (@perber)
🧰 Chores
- chore: bump node from
95034e7to7c6af15(#1033) (@dependabot[bot]) - chore: bump alpine from
4d889c1to5b10f43(#1034) (@dependabot[bot]) - chore: bump golang from
f44b851to91eda97(#1036) (@dependabot[bot]) - chore: bump golang.org/x/crypto in the go-dependencies group (#1035) (@dependabot[bot])
- chore: bump github action to newer version (@perber)
- chore: bump tailwindcss from 4.2.4 to 4.3.0 in /ui/leafwiki-ui (#1001) (@dependabot[bot])
- chore: bump postcss from 8.5.12 to 8.5.15 in /ui/leafwiki-ui (#1005) (@dependabot[bot])
- chore: bump @types/node from 25.7.0 to 25.9.1 in /e2e (#1006) (@dependabot[bot])
- chore: bump eslint from 10.3.0 to 10.4.0 in /e2e (#1007) (@dependabot[bot])
- chore: bump @tailwindcss/vite from 4.2.4 to 4.3.0 in /ui/leafwiki-ui (#1004) (@dependabot[bot])
- chore: bump typescript-eslint from 8.59.3 to 8.59.4 in /e2e (#1008) (@dependabot[bot])
- chore: bump @typescript-eslint/parser from 8.59.3 to 8.59.4 in /e2e (#1009) (@dependabot[bot])
- chore: bump prettier from 3.8.1 to 3.8.3 in /ui/leafwiki-ui (#1002) (@dependabot[bot])
- chore: bump @playwright/test from 1.59.1 to 1.60.0 in /e2e (#984) (@dependabot[bot])
- chore: bump golang.org/x/crypto from 0.49.0 to 0.51.0 (#977) (@dependabot[bot])
- chore: bump uuid from 11.1.0 to 14.0.0 in /ui/leafwiki-ui (#990) (@dependabot[bot])
- chore: bump tailwind-merge from 3.5.0 to 3.6.0 in /ui/leafwiki-ui (#978) (@dependabot[bot])
- chore: bump @types/node from 25.5.2 to 25.7.0 in /e2e (#985) (@dependabot[bot])
- chore: bump mermaid from 11.14.0 to 11.15.0 in /ui/leafwiki-ui (#989) (@dependabot[bot])
- chore: bump node from 25-alpine to 26-alpine (#982) (@dependabot[bot])
- chore: bump globals from 17.4.0 to 17.6.0 in /ui/leafwiki-ui (#980) (@dependabot[bot])
- chore: bump react-router-dom from 7.14.1 to 7.15.0 in /ui/leafwiki-ui (#976) (@dependabot[bot])
- chore: bump @codemirror/autocomplete in /ui/leafwiki-ui (#981) (@dependabot[bot])
- chore: bump typescript-eslint from 8.59.2 to 8.59.3 in /e2e (#983) (@dependabot[bot])
- chore: bump modernc.org/sqlite from 1.50.0 to 1.50.1 (#975) (@dependabot[bot])
- chore: bump @tailwindcss/vite from 4.2.3 to 4.2.4 in /ui/leafwiki-ui (#963) (@dependabot[bot])
- chore: bump eslint from 10.2.1 to 10.3.0 in /e2e (#965) (@dependabot[bot])
- chore: bump typescript-eslint from 8.59.1 to 8.59.2 in /e2e (#964) (@dependabot[bot])
- chore: bump github.com/fsnotify/fsnotify from 1.9.0 to 1.10.1 (#960) (@dependabot[bot])
- chore: bump zustand from 5.0.11 to 5.0.13 in /ui/leafwiki-ui (#961) (@dependabot[bot])
- chore: bump typescript from 6.0.2 to 6.0.3 in /ui/leafwiki-ui (#962) (@dependabot[bot])
- chore: bump @typescript-eslint/parser from 8.59.1 to 8.59.2 in /e2e (#966) (@dependabot[bot])
🔹 Other Changes
LeafWiki v0.9.2
LeafWiki v0.9.1
📝 Changelog for v0.9.1
✨ Features
- feat(install): Add new argument from V9 in installer. (#954) (@Hugo-Galley)
🐛 Bug Fixes
- fix(revision): persist custom frontmatter (#956) (@perber)
- fix(wiki): Treat UI content that looks like frontmatter as plain body text while keeping importer updates on the frontmatter-preserving path.(#943) (@perber)
🧰 Chores
- chore: bump typescript-eslint from 8.59.0 to 8.59.1 in /e2e (#951) (@dependabot[bot])
- chore: bump prettier from 3.8.1 to 3.8.3 in /e2e (#952) (@dependabot[bot])
- chore: bump @tailwindcss/postcss from 4.2.3 to 4.2.4 in /ui/leafwiki-ui (#949) (@dependabot[bot])
- chore: bump postcss from 8.5.8 to 8.5.12 in /ui/leafwiki-ui (#948) (@dependabot[bot])
- chore: bump modernc.org/sqlite from 1.49.1 to 1.50.0 (#945) (@dependabot[bot])
- chore: bump i18next from 26.0.7 to 26.0.8 in /ui/leafwiki-ui (#947) (@dependabot[bot])
- chore: bump @typescript-eslint/eslint-plugin in /e2e (#953) (@dependabot[bot])