webolator
Turn a folder of markdown, or a single .md file, into a browsable website. No config file, no index file, no SUMMARY.md.
Docs: https://vivainio.github.io/webolator/ (built with webolator, of course)
- Zero config. Point it at a folder and the navigation comes from the directory tree. Page titles come from the first
# heading. - Mermaid.
```mermaidblocks become diagrams, rendered in the browser. - Syntax highlighting happens at build time (syntect), with light and dark themes and no JavaScript.
- Cross-file links work.
other.md,dir/,../x.md#some-headingand/root/relative.mdare rewritten to the right pages and anchors. Broken links print a warning. - Sibling files are kept. Raw
.html,.txt/.log/code files, PDFs and images are copied and linked. HTML, text and PDF files also appear in the sidebar. --singlewrites one self-contained.htmlwith everything embedded (images, text files, HTML files, PDFs), which is easy to email or attach.--serveruns a local preview with live reload.- Reading features: an "On this page" sidebar, previous/next links, "last updated" and "Edit this page" from git, a light/dark toggle, copy buttons on code, image zoom and a mobile menu.
- Writing extras:
$math$(KaTeX),:emoji:,[[wikilinks]], and optional front matter (title,order,hidden). See the syntax reference for every supported form. --checkfails the build on broken links, for CI.--files assets/shows a folder as a plain file list (name, size, date) instead of rendering it. Useful for downloads and attachments.- Custom CSS. A
webolator.cssin the docs root is applied automatically, or you can pass--css file.css. Colors are CSS variables, so a theme can be a few lines. See styling. - GitHub-flavored markdown: tables, task lists, footnotes, strikethrough, autolinks and
> [!NOTE]alerts. - Light and dark mode follow the OS setting.
Installation
Using uv (easiest)
Install the published wheel from PyPI as a standalone tool:
uv tool install webolator
This puts the webolator command on your PATH. To try it without installing anything:
uvx webolator docs/ --serve
Pre-built binaries
Download the latest release for your platform from the GitHub Releases page:
- Linux (x86_64):
webolator-linux-x86_64.tar.gz - Windows (x86_64):
webolator-windows-x86_64.zip - macOS (Intel):
webolator-macos-x86_64.tar.gz - macOS (Apple Silicon):
webolator-macos-arm64.tar.gz
Extract the archive and place the webolator binary in your PATH.
From source
cargo install --git https://github.com/vivainio/webolator
Usage
webolator docs/ # static site in ./site
webolator docs/ -o public # ...or somewhere else
webolator docs/ --single # one self-contained docs.html
webolator notes.md --single # a single file, plus anything it links to
webolator docs/ --serve # http://127.0.0.1:8000 with live reload
Try it on the bundled demo:
cargo run -- examples/demo --serve
How the site is put together
| Source | Result |
|---|---|
index.md or README.md in a folder |
that folder's index.html |
| folder with no index | a generated listing page |
foo.md |
foo.html (or foo.md.html if a raw foo.html already exists) |
| any other file | copied as is |
hidden files and folders, node_modules, target, venv |
skipped |
anything in .gitignore, .webolatorignore or --exclude |
skipped (--no-ignore turns off the .gitignore part) |
Number prefixes like 01-usage.md or 02-guides/ set the sidebar order. They don't appear in labels and are removed from URLs, so 02-guides/01-setup.md becomes guides/setup.html.
If you pass a single file, webolator follows its local links, including links to parent folders. The site then contains that file, which becomes the home page, plus everything reachable from it.
In --single mode, each page becomes a section with hash routing, so the back and forward buttons and deep links like docs.html#p-guide-install--setup work. Images are inlined. Linked HTML files are shown in an iframe and text files as preformatted text, and PDFs and other files open from embedded blobs.
Mermaid offline
By default mermaid.js is loaded from the jsDelivr CDN, and only on pages that contain a diagram. To work fully offline, pass a local copy:
webolator docs/ --single --mermaid-js mermaid.min.js
In static mode the file is copied to _webolator/. In --single mode it is inlined.
Metadata
Release files for webolator 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| webolator-0.3.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details for webolator-0.3.0-py3-none-win_amd64.whl |
| webolator-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details for webolator-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
| webolator-0.3.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details for webolator-0.3.0-py3-none-macosx_11_0_arm64.whl |
| webolator-0.3.0-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details for webolator-0.3.0-py3-none-macosx_10_12_x86_64.whl |
Total release size: 8.7 MB
Release files / webolator-0.3.0-py3-none-win_amd64.whl
| Download URL | webolator-0.3.0-py3-none-win_amd64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5eaaef9a9212578f6c528f9dddcd12cf108a8a93b1e05d2d589ca2336411e74b
|
|
BLAKE2b-256 checksum How to use checksums |
22cdfa10fe42c448752c1b20b6ebd93d57495155920d87ab6e291103eff3df59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / webolator-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | webolator-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
83cc24667187f276b790b7ca3e86d769edc423dd56000fde7cdce4c261785522
|
|
BLAKE2b-256 checksum How to use checksums |
f56a5bac8d465b15b8a23ce930ea69fbe7fe99cd82063328b9b8edf3242627d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / webolator-0.3.0-py3-none-macosx_11_0_arm64.whl
| Download URL | webolator-0.3.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7cd548074231b72407ba6b8cc98345009698858ed7ee7f8d9cb1bb639ec25e7b
|
|
BLAKE2b-256 checksum How to use checksums |
c487a21a4262ffea5ddf67966ba1b4f68d97a00b2c201e21af089e67d3f2d2d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / webolator-0.3.0-py3-none-macosx_10_12_x86_64.whl
| Download URL | webolator-0.3.0-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
f97615fb542facdcb674db6801ff595dd20533e7e7f99c3894121034968b1550
|
|
BLAKE2b-256 checksum How to use checksums |
2f365f6bcd06b59e954ebb64ed6f30392756bfcbfeb703145958a9ac011ecf57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logSecurity for webolator 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 4 files in this release have been uploaded with provenance metadata.
Attestation for webolator-0.3.0-py3-none-win_amd64.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.