Refs #12, #13 Co-Authored-By: Codex (GPT-6) <noreply@openai.com> Signed-off-by: James Maes <jmaes@dmdbrands.com>
MarkdownViewr
In development: a Windows counterpart to Darin's markdownViewr, built with AppKit. The reader, live reload, built-in themes/editing, frontmatter, outline/source/find, named editors and basic font zoom pass native/published and both installed channels on
2639e2d. Native print cancellation and real default/themed PDF output/state cases pass; full print acceptance and broader layout comparisons remain pending. The full port, broader parity and signed releases remain in progress.
A Windows Markdown viewer with live reload, themes and document navigation.
| Tier | Product (scope) |
| Standards | Adopting KofTwentyTwo standards (pre-v1.0); built from the KofTwentyTwo Windows app template |
| Latest release | Releases |
Install
No Windows release has been published. The following describes the planned release artifacts.
Download markdownviewr-windows-stable-Setup.exe from the
latest release and run it. It
installs per user (no administrator rights needed) and updates itself in place from
Help → Check for updates. markdownviewr-windows-stable-Portable.zip is a portable build that
does not self-update.
Prerelease tags (v1.2.3-beta.1) publish to the dev channel
(markdownviewr-windows-dev-Setup.exe); an installation only ever updates within its own channel.
Usage
- File → Open / Ctrl+O: choose a Markdown document. A literal file path can also be supplied when launching the executable.
- Live reload: saves automatically refresh the document, including replacement saves. Deletion keeps the last version visible until the file is restored. The relative reading position is preserved.
- File → Reload: reread the current file manually. Local images stay within the document folder; remote images and authored scripts/styles are blocked.
- File → Print / Ctrl+P: choose a separate print theme, images/backgrounds, standard or matching font zoom, content width, borders and page padding. Print... opens Windows print UI; Save PDF... asks for a PDF destination. Cancel leaves the reading view unchanged. Implementation and core validation are complete; native output acceptance is pending.
- Reading zoom: use the minus/percentage/plus toolbar or View → Zoom in / Zoom out / Actual size.
Ctrl++(alsoCtrl+=),Ctrl+-andCtrl+0change only the reading window's font scale, bounded to 30–500%. Reload and theme changes retain it; the percentage button resets to 100%. Glyph/key/reload acceptance passes in native, published and installed stable/dev builds on2639e2d; broader theme/find/collapse combinations remain pending. - View → Document theme: choose one of Darin's 20 built-in palettes. The saved document palette is independent of the Windows shell theme; changing it retains the reading position.
- View → Edit document theme: edit colors, code font/size and custom CSS. Keep its name to override a built-in, or enter a new name to create a custom theme. Invalid input keeps the editor open. Restore built-in themes removes built-in edits after confirmation and keeps separately named custom themes.
- View → Table of contents: show the heading sidebar, choose levels 1–6, and drag its divider to resize. Select a heading to jump there; collapse a selected section or all sections, then expand when ready. Matching section state survives reloads and document theme changes.
- File → Configure editor / Open in editor: save named installed
.exeeditors, add/remove or move them in the list, and choose whether each opens the document or its folder. Save commits the list; Cancel discards changes. One editor has a direct named action; several offer a submenu in saved order. A missing editor or document reports a status message; the viewer remains open. Named list/folder/cancel/removal acceptance passes in native, published and both installed channels on2639e2d. - Edit → Find / Ctrl+F: search the rendered document and literal source, with one occurrence count and wrapping Next/Previous controls. Enter moves forward, Shift+Enter moves back, and Escape closes find. Search temporarily reveals collapsed sections; closing it restores prior choices and retains explicit section commands made during search.
- Reading keys:
j/kmove a line;Ctrl+D/Umove half a viewport;gg/Ggo to the beginning/end;]]/[[visit visible headings;/opens native find andn/Nadvance/reverse its matches. Escape closes find. Prefixes expire after 500 ms; typing in find/theme/editor controls retains normal behavior. WindowsCtrl+Fopens find;Ctrl+Bmoves back a viewport. Physical-key acceptance has passed in hosted native, published and installed builds. - View → Markdown source: show the literal, read-only snapshot beside the reader, including frontmatter and fenced code. Visibility and preferred divider width persist; saves refresh both surfaces. Scrolling follows the corresponding heading positions in either pane. Section collapse retains its literal heading and replaces the hidden source body with an ellipsis; nested choices remain independent. Find temporarily expands the source, then restores prior folds on close. Actual bidirectional heading/wheel/focus/fold/find/reload acceptance passes in native, published and both installed channels on
2639e2d; raw-heading parity audit remains open. - View → Frontmatter: hide leading YAML by default, show an escaped metadata table, or render the block as Markdown. The mode is saved and applied to reloads.
- View: choose the light, dark, or system shell theme; turn the startup splash and the startup update check on or off. Choices are saved immediately.
- Help → Activity log: a live view of the app's log, with an errors-only filter and a shortcut to the log folder.
- Help → Check for updates and Help → About.
Settings and logs live in %LOCALAPPDATA%\markdownviewr-windows. Set the data-folder environment
variable the app reports in its log (the app id in capitals, plus _DATA_DIR) to use a
different folder, for example a portable one.
Building from source
Prerequisites:
- Windows 10 version 1809 or later, x64 or ARM64
- Microsoft Edge WebView2 evergreen Runtime
- .NET 10 SDK (the feature band is pinned by
global.json) - Optionally Visual Studio 2026 (Windows App SDK workload) or Rider
# Once after generation, create and commit the NuGet locks locally:
# dotnet restore MarkdownViewr.Windows.slnx -p:Platform=x64
dotnet restore MarkdownViewr.Windows.slnx -p:Platform=x64 --locked-mode
dotnet build MarkdownViewr.Windows.slnx -p:Platform=x64 -warnaserror
dotnet test MarkdownViewr.Windows.slnx -p:Platform=x64 --no-build --filter "FullyQualifiedName!~UiTests"
dotnet test tests/MarkdownViewr.Windows.UiTests --no-build # launches the app on the desktop
Package versions are declared in Directory.Packages.props and locked in each project's
packages.lock.json. CONTRIBUTING.md has the full local workflow,
including the coverage gate and the format check that CI runs.
Verifying a release
Every release asset is listed in SHA256SUMS and has a build-provenance attestation
signed by the KofTwentyTwo release workflow:
# Integrity: the file matches the published checksum
(Get-FileHash .\markdownviewr-windows-stable-Setup.exe -Algorithm SHA256).Hash # compare to SHA256SUMS
# Origin: built by the KofTwentyTwo release workflow from this repository
gh attestation verify .\markdownviewr-windows-stable-Setup.exe --repo KofTwentyTwo/MarkdownViewr.Windows --signer-repo KofTwentyTwo/standards
# Publisher: Authenticode signature (once code signing is enabled; see SECURITY.md)
Get-AuthenticodeSignature .\markdownviewr-windows-stable-Setup.exe | Format-List Status, SignerCertificate
Support
The latest minor release receives fixes; see SECURITY.md for the full support policy.
Security
Report vulnerabilities privately; see SECURITY.md. The app's attack surface is described in its threat model.
Contributing
See CONTRIBUTING.md.
License
MIT. Copyright (c) 2026 James Maes.