A native macOS Markdown viewer built with SwiftUI. Open a folder, browse your files, and read rendered Markdown — no editing, no bloat.
- Folder-based browsing — Open any folder and navigate its Markdown files in a sidebar tree
- Search — Filter files by name across all subdirectories
- Flat list mode — Toggle between tree hierarchy and a flat file list with relative paths
- Recents — Quick access to your last 5 opened files
- Live reload — Files and directories are watched for changes and update automatically
- Table of contents — Jump to any heading with Cmd+T
- Syntax highlighting — Code blocks rendered with configurable themes
- Reading metrics — Word count and estimated reading time in the toolbar
- Drag and drop — Drop a folder onto the window to open it
- Customizable — Font size, code theme, and light/dark/system appearance in Settings
- macOS 26.0 or later
- Xcode 26.2 (to build from source)
- XcodeGen (
brew install xcodegen)
git clone https://github.com/mrishwajeetsingh/glow.git
cd glow
xcodegen generate
open Glow.xcodeprojThen hit Cmd+R in Xcode.
To run Glow without Xcode open:
- In Xcode, select Product > Archive
- In the Organizer, click Distribute App > Direct Distribution
- Export the
.appand drag it to/Applications
Or build from the command line:
xcodebuild build -project Glow.xcodeproj -scheme Glow -configuration Release -destination "platform=macOS"The built app is at DerivedData/Glow-*/Build/Products/Release/Glow.app.
| Action | Shortcut |
|---|---|
| Open folder | Cmd+O |
| Table of contents | Cmd+T |
| Settings | Cmd+, |
| Search files | Type in sidebar search field |
| Toggle flat/tree view | Sidebar toolbar button |
Open a folder containing .md, .markdown, .mdown, or .mkd files. Click any file in the sidebar to view it. The viewer re-renders automatically when files change on disk.
SwiftUI Views -> @Observable ViewModels -> Services -> Models
| Layer | Files |
|---|---|
| App | GlowApp.swift, ContentView.swift |
| Models | AppState.swift, FileNode.swift |
| ViewModels | DocumentViewModel.swift |
| Services | FileWatcher.swift |
| Views | FileTreeView.swift, MarkdownDetailView.swift, TOCPopoverView.swift, SettingsView.swift |
Built with Swift 6 strict concurrency. All state management uses @Observable and @MainActor.
| Package | Purpose |
|---|---|
| swift-markdown | AST parsing, heading extraction |
| MarkdownUI | Markdown rendering |
| HighlightSwift | Code syntax highlighting |
| NetworkImage | Image loading |
- Sandboxed — App Sandbox enabled with read-only access to user-selected files only
- No network — Fully offline, no telemetry, no analytics
- URL filtering — Only
httpsandhttplinks are openable - Symlink safe — Directory traversal via symlinks is blocked