Skip to main content

Vantage 🔭

CI

A beautiful local Markdown viewer with live reload and Git awareness.

Website · GitHub · Issues

Vantage screenshot

Vantage renders your Markdown files the way GitHub does — locally, instantly, with live reload as you edit. Point it at one directory or several, and browse your docs in a polished web UI with file tree navigation, Mermaid diagrams, commit history, and diffs.

Vantage ships as a single Go binary with an embedded React frontend — no runtime dependencies, no background services to babysit. Built for developers who write docs alongside code, and especially useful for reviewing LLM-generated Markdown output in real time.

Platform: Linux and macOS are fully supported. Windows is not supported.


Install

go install

go install github.com/mschulkind-oss/vantage/cmd/vantage@latest

This installs a vantage binary to your $GOBIN (typically ~/go/bin). Make sure it's on your PATH.

brew install mschulkind-oss/tap/vantage

From source

git clone https://github.com/mschulkind-oss/vantage
cd vantage
mise install               # installs Go 1.26, Node 22, just
just build                 # produces ./vantage

The resulting ./vantage binary embeds the compiled frontend, so it's fully self-contained.


🚀 Quick Start

Single Directory

Point Vantage at any directory containing Markdown files — or a specific file:

vantage ~/Documents/notes          # open a directory
vantage ~/Documents/notes/intro.md # open a specific file

The server starts, your default browser opens to the file (or directory root), and the sidebar focuses on the parent directory of what you opened. Pass --no-open to suppress the browser launch.

Point it at the directory holding your git clones and each clone becomes its own project, exactly as the daemon's source_dirs would make them, plus one project for any Markdown outside them (--one-project keeps them all together). To keep the clones served in the background:

vantage ~/code                                   # one project per clone
vantage install-service --source-dir ~/code      # the clones, as a login service

Multiple Directories (Daemon Mode)

To serve several directories at once, create a config and run the daemon:

# Generate a config file
vantage init-config

# Edit it
$EDITOR ~/.config/vantage/config.toml

# Start the daemon
vantage daemon

✨ Features

  • GitHub-Style Rendering — Full GitHub Flavored Markdown with syntax highlighting, tables, task lists, and footnotes
  • Math & Diagrams — KaTeX math rendering and inline Mermaid diagrams from fenced code blocks
  • Live Reload — Files update instantly in the browser via WebSocket when modified on disk
  • Git Integration — View commit history, diffs, working-tree changes, file status, and recent changes for any file
  • Review Mode — Inline comments with tracked agent responses (delivered via .vantage/inbox files or pasted into the panel) for collaborative review
  • Multi-Repo Mode — Serve multiple directories from a single daemon, each accessible by name
  • Source Directory Auto-Discovery — Point at parent directories to automatically find and add all git repos
  • File Tree Navigation — Lazy-loaded sidebar with directory expansion
  • Frontmatter Support — Displays YAML and TOML frontmatter as a clean metadata table
  • Agent CLI — vantage-check: a standalone binary that prints Vantage's Markdown conventions and verifies that a document really renders
  • Static Site Export — Build a standalone static site from a directory of Markdown
  • Dark Mode — Toggle with Shift+D, persisted across sessions
  • Color Themes — Slate (the built-in look) plus Catppuccin, Gruvbox, Lila, Nord, Solarized and Tokyo Night, or your own palette as one CSS file in ~/.config/vantage/themes/ (guide)
  • Keyboard Shortcuts — Quick file picker with t, fuzzy search, keyboard navigation
  • Performance Diagnostics — Built-in perf-report command for anonymized timing data
  • Login Service — Run in the background from login: a systemd user unit on Linux, a launchd agent on macOS

🤝 Works well with

matt-craft is a set of skills for writing the kinds of documents Vantage is built to read: design notes that carry their open questions, roadmaps, research rounds, user stories — and one skill aimed squarely at Vantage's own Markdown conventions. Same author as this one, which is not a coincidence.

You do not need it. Vantage renders the Markdown you already write, in whatever style you already write it. But if you would rather not invent a house style for design docs, there is one sitting right there.


⚙️ Configuration

The config file lives at ~/.config/vantage/config.toml on Linux and macOS alike ($XDG_CONFIG_HOME/vantage/config.toml when that is set). Generate one with:

vantage init-config

Example Config

# Server settings
host = "127.0.0.1"
port = 8000

# Auto-discover git repos under these directories, re-scanned every 30s so a
# new clone is served — and a deleted one dropped — without a restart
source_dirs = ["~/code", "~/projects"]

# Or list repos explicitly (both methods can be combined)
[[repos]]
name = "notes"
path = "~/Documents/notes"

[[repos]]
name = "work-docs"
path = "~/work/documentation"

Each repo is accessible at http://localhost:8000/{name}/ — or whatever port Vantage printed on startup, if 8000 was taken (only the default port falls forward; see the note under --port below).

Configuration Reference

Key Type Default Description
host string "127.0.0.1" Server bind address
port integer 8000 Server port. Set explicitly it must be free or startup fails; only the default falls forward, scanning up to 100 ports
source_dirs array of strings [] Parent directories to scan for git repos
repos[].name string required Display name and URL slug for the directory
repos[].path string required Path to directory (supports ~)
repos[].allowed_read_roots array of strings [] Additional directories this repo may read
exclude_dirs array of strings (see below) Directories to hide from file listings
show_hidden boolean true Show dotfiles in sidebar
walk_max_depth integer or null null (unlimited) Max directory depth for untracked file discovery
walk_timeout float 30.0 Timeout (seconds) for git ls-files subprocess
use_ignore_files boolean true Honor .gitignore and ignore files during walks
log_level string "info" Logging verbosity
theme string "" (built-in) Default color theme for every browser; user config only, and a project may offer one below it (guide)

Excluded Directories

By default, Vantage hides common build and dependency directories from the sidebar, file picker, and recent files — for example node_modules, dist, build, .cache, .git, .hg, and .svn.

Override this in your config:

exclude_dirs = ["node_modules", "vendor", "dist"]

🔧 Service Management

Vantage can run as a per-user background service that starts on login — a systemd user unit on Linux, a launchd agent on macOS. One command writes either:

vantage install-service

It writes the service definition and prints the commands that load it; it never activates anything for you.

Linux (systemd)

install-service creates ~/.config/systemd/user/vantage.service.

# Enable and start
systemctl --user daemon-reload
systemctl --user enable vantage
systemctl --user start vantage

# Check status
systemctl --user status vantage

# View logs
journalctl --user -u vantage -f

# Restart after config changes
systemctl --user restart vantage

# Stop the service
systemctl --user stop vantage

User services stop when you log out. To keep Vantage running past logout:

loginctl enable-linger $USER

macOS (launchd)

install-service creates ~/Library/LaunchAgents/io.github.mschulkind-oss.vantage.plist.

# Load and start — now, and at every login
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/io.github.mschulkind-oss.vantage.plist

# Check status
launchctl print gui/$(id -u)/io.github.mschulkind-oss.vantage

# View logs (launchd has no journal; the agent writes to a file)
tail -f ~/Library/Logs/vantage.log

# Restart after config changes
launchctl kickstart -k gui/$(id -u)/io.github.mschulkind-oss.vantage

# Stop and unload
launchctl bootout gui/$(id -u)/io.github.mschulkind-oss.vantage

kickstart restarts the job from the plist launchd read at bootstrap time, not from the file on disk — so after re-running install-service, bootout and bootstrap again. See Daemon Mode for the rest.


🖥️ CLI Reference

The command is vantage.

vantage [PATH]                      # Serve a dir or file, auto-open browser
vantage serve [PATH] [flags]        # Same as above, with explicit flags
vantage daemon [-c config.toml]     # Serve multiple directories from config
vantage init-config                 # Generate example config file
vantage install-service             # Install a login service (systemd / launchd)
vantage install-service --source-dir DIR  # Add DIR's clones to the config, install and start it
vantage build PATH -o OUTPUT        # Build a static site
vantage perf-report [--url]         # Performance diagnostics from a running instance

serve flags

Flag Description
--host Bind address (default 127.0.0.1)
--port Server port (default 8000). A port set explicitly — flag, PORT env, or config — must be free or startup fails; only the default falls forward, scanning up to 100 ports
--no-open Don't open the browser on start
--show-hidden Show dotfiles in the sidebar
--exclude-dirs Directories to hide from file listings
--use-ignore-files Honor .gitignore and ignore files during walks
--walk-max-depth Max directory depth for untracked file discovery
--walk-timeout Timeout (seconds) for git ls-files subprocess
--one-project Serve a directory of git clones as one project, not one per clone

🔌 API

Vantage exposes a REST API for programmatic access under /api.

Single-Repo Endpoints

Endpoint Description
GET /api/tree?path=. File tree listing
GET /api/content?path=file.md File content
POST /api/planning/stream Every planning candidate, one JSON line each; a file's text only when the browser lacks it
GET /api/planning/sources?path=file.md Planning index source for one file
POST /api/planning/reviews Review comments of many documents
GET /api/planning/server-id Which server this is, for the browser's planning cache
GET /api/files List all Markdown files
GET /api/files/all List all files
GET /api/recent/all Recently changed files, all projects
GET /api/info Repository metadata
GET /api/git/history?path=file.md Commit history
GET /api/git/diff?path=file.md&commit=SHA Diff for a commit
GET /api/git/diff/working?path=file.md Uncommitted changes diff
GET /api/git/status?path=file.md File status (modified, committed)
GET /api/git/recent?limit=20 Recently changed files
GET /api/review Read review comments
DELETE /api/review Remove review data
POST /api/review/comments (+ subroutes) Review commands (create, reply, …)

Multi-Repo Endpoints

In daemon mode, endpoints are prefixed with /api/r/{repo}/:

Endpoint Description
GET /api/repos List configured repositories
GET /api/r/{repo}/tree?path=. File tree for a repo
GET /api/r/{repo}/content?path=file.md File content for a repo
(all single-repo endpoints above) Prefixed with /api/r/{repo}

Utility Endpoints

Endpoint Description
GET /api/health Health check
GET /api/version Server version info
GET /api/perf/diagnostics Performance diagnostics (anonymized)
POST /api/perf/reset Reset performance counters
GET /api/themes User color themes + the defaults
GET /api/themes/{id} One user color theme's stylesheet
GET /api/spaces/{id} Which served project holds a space id, the checkout id a planning link carries
GET /api/degraded Projects too big for a limit (watches, walk timeout), for the viewer's banner
WS /ws WebSocket for live reload notifications

🛠️ Development

Run the quality gate with just check (gofmt, go vet, staticcheck, go test, plus frontend lint, tsc, and vitest). See docs/development.md for more on building, testing, and contributing to Vantage.


📄 License

Apache 2.0 — see LICENSE.

Metadata

Release files for vantage-md 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for vantage-md 0.10.0
File
vantage_md-0.10.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
vantage_md-0.10.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
vantage_md-0.10.0-py3-none-manylinux_2_17_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
vantage_md-0.10.0-py3-none-manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
vantage_md-0.10.0-py3-none-macosx_11_0_x86_64.whl Python 3 none macOS 11.0+ x86-64 Details
vantage_md-0.10.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 40.8 MB

Release files / vantage_md-0.10.0-py3-none-musllinux_1_2_x86_64.whl

Download URL vantage_md-0.10.0-py3-none-musllinux_1_2_x86_64.whl
Size 7.0 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
0480c345d962b52ef3677d5a3aa0f70915dbfeec26f7a613092b24b05e044917
BLAKE2b-256 checksum
How to use checksums
b9463c2677ddccadc3c624089ffd0d53e2fd46e3ce60442026165830f4ea5d8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vantage_md-0.10.0-py3-none-musllinux_1_2_aarch64.whl

Download URL vantage_md-0.10.0-py3-none-musllinux_1_2_aarch64.whl
Size 6.5 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
3ff814a769ff46ae0fb3396f41f7892cf8b4c9819af16252b1ab580384f05981
BLAKE2b-256 checksum
How to use checksums
a41d22407016218e5276ea40f817dbe0b835e01f71f12aeb12a0550a107434ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vantage_md-0.10.0-py3-none-manylinux_2_17_x86_64.whl

Download URL vantage_md-0.10.0-py3-none-manylinux_2_17_x86_64.whl
Size 7.0 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
72191a7f44a06e04b8121b9e0e0add7529178902e47624b62785199fc27d1cc8
BLAKE2b-256 checksum
How to use checksums
17642470fc1c702957970ba5e2e248c7668f46d507bcfb54e4861843b74c7bf1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vantage_md-0.10.0-py3-none-manylinux_2_17_aarch64.whl

Download URL vantage_md-0.10.0-py3-none-manylinux_2_17_aarch64.whl
Size 6.5 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
ee713c9f94df9e3ee4560e2e24b6be1cf0fe5f5f5651eaf79e9937d89f1e1250
BLAKE2b-256 checksum
How to use checksums
5934f691c1d8661aa1e0358c4b9e3444e173024737bbf92f921421e087c16cfc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vantage_md-0.10.0-py3-none-macosx_11_0_x86_64.whl

Download URL vantage_md-0.10.0-py3-none-macosx_11_0_x86_64.whl
Size 7.0 MB
Tags Python 3 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
5d883b8f56b61d448d56ad4b70454439ec15d6ba3cb6bafdc1d0bceee3a72b31
BLAKE2b-256 checksum
How to use checksums
d3435a5edecaa3b9ed409acecea826b68b24e5480daa462ab201b13697d61d35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vantage_md-0.10.0-py3-none-macosx_11_0_arm64.whl

Download URL vantage_md-0.10.0-py3-none-macosx_11_0_arm64.whl
Size 6.7 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
078021dd18032b2664c6aa245f612eb88ad9fb7edc79fe085aa96faa56d7a149
BLAKE2b-256 checksum
How to use checksums
da45d769656c02efed0a47ea7f3b78913c457aecb91caaba8ecaf04114cefe58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.10.0 This release

6 release files

0.9.2

6 release files

0.9.1

6 release files

0.9.0

6 release files

0.8.1

6 release files

0.8.0

6 release files

0.7.1

6 release files

0.7.0

6 release files

0.6.2

6 release files

0.6.1

6 release files

0.6.0

6 release files

0.5.10

6 release files

0.5.9

6 release files

0.5.8

6 release files

0.5.7

6 release files

0.5.6

6 release files

0.5.5

6 release files

0.5.4

6 release files

0.4.2

2 release files

0.4.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page