Skip to main content

Preview local Markdown files and doc trees with live reload, sidebar navigation, anchors, and syntax highlighting

Project description

markserv

PyPI Python Versions CI

markserv opens local Markdown files and docs folders in your browser as a lightweight live-preview web app.

Point it at a README, notes directory, or docs tree and you get a clean GitHub-style reading view with live reload, sidebar navigation, heading anchors, syntax highlighting, and theme switching.

markserv screenshot

Why markserv?

  • GitHub-flavored Markdown rendering via cmarkgfm
  • Live reload while editing local docs
  • Cmd/Ctrl+K quick search across pages, headings, and body text
  • Sidebar navigation for directory-based docs
  • Automatic heading anchors for deep-linking
  • Syntax highlighting for fenced code blocks
  • YAML front matter for titles and nav metadata
  • Safer asset serving defaults for linked local files
  • System, light, and dark theme support with saved preference

Install

Requires Python 3.11+

Use case Command
Install from PyPI with uv uv tool install markserv
Install from PyPI with pipx pipx install markserv
Install a local checkout for development uv tool install .

Quick start

Serve a docs directory

markserv docs/

Serve a single Markdown file

markserv README.md

Run the built-in demo site

markserv.demo

Common variations

Command What it does
markserv . Serve the current directory
markserv --host localhost --port 4422 . Bind to a custom host/port
markserv --no-open README.md Start without opening a browser
markserv.demo --no-open --port 9001 Run the demo on a custom port

What it does

  • Renders common Markdown extensions like .md and .markdown
  • Watches Markdown files and reloads the browser when content changes
  • Supports Cmd/Ctrl+K quick search across page titles, headings, paths, and body text
  • Respects .gitignore while scanning, so ignored trees like .venv/ are skipped
  • Serves linked local assets from the same file tree with safer defaults for hidden, executable, and sensitive files
  • In directory mode, shows a sidebar for browsing multiple Markdown pages
  • Adds heading anchors automatically for easy deep-linking
  • Syntax-highlights fenced code blocks
  • Supports YAML front matter for page titles and navigation labels/order
  • Remembers your theme choice in browser storage

Front matter

markserv supports YAML front matter for page and navigation metadata:

---
title: Overview
nav_label: Start Here
nav_order: 10
hidden: false
---

# Overview
Key Purpose
title Browser/page title fallback
nav_label Sidebar label override
nav_order Numeric sort order in the sidebar
hidden Hide the page from sidebar navigation while keeping it routable

Tech stack

markserv uses:

Development

Install dev tooling:

make install

Common commands:

Task Command
Format make format
Check formatting make format-check
Lint make lint
Type-check make typecheck
Test make test
Run the full local CI suite make all-ci

Notes

  • markserv is intended for plain Markdown / GFM-style docs, not MDX.
  • UI components are rendered with htmy from Python.
  • Front-end assets live under src/markserv/public/.
  • Bundled CSS comes from github-markdown-css and generated Pygments themes.
  • Bundled HTMX assets are used for SSE-driven live updates.
  • The upstream stylesheet license is included at src/markserv/public/licenses/github-markdown-css.LICENSE.
  • The bundled HTMX license is included at src/markserv/public/licenses/htmx.LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markserv-1.2.1.tar.gz (66.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

markserv-1.2.1-py3-none-any.whl (79.4 kB view details)

Uploaded Python 3

File details

Details for the file markserv-1.2.1.tar.gz.

File metadata

  • Download URL: markserv-1.2.1.tar.gz
  • Upload date:
  • Size: 66.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for markserv-1.2.1.tar.gz
Algorithm Hash digest
SHA256 aacdb49ab18839f37d2e80192d125ce1dc76dc3409736e20a9382a1b13a54888
MD5 b09a52260f18a0959c5fcb910d53b599
BLAKE2b-256 c131024a9b0ec3781cd5553799ebc94793475338186e10b4802fbc3838d7a0f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for markserv-1.2.1.tar.gz:

Publisher: release.yml on nathan-gage/markserv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file markserv-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: markserv-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 79.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for markserv-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ceb0be72cad2a574c4758fad66642d36dedcf4f8e5f96cdcb7d76ba92850ef81
MD5 baeb138186d181b8a98ab55ec4657c5c
BLAKE2b-256 06c70a3dfc241d2e51b9dfe908fb7e77e07930e5ca2b32536503c56adee74e84

See more details on using hashes here.

Provenance

The following attestation bundles were made for markserv-1.2.1-py3-none-any.whl:

Publisher: release.yml on nathan-gage/markserv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page