Skip to main content

Zero-config static site builder for markdown blogs

Project description

mdwiki

mdwiki is a small static site builder that turns a directory tree of markdown files into a blog-ready HTML site.

It keeps the authoring model simple:

  • directories become URL segments
  • each markdown file becomes one HTML page
  • local images referenced from markdown are copied into the output site
  • index pages and tag pages are generated automatically

Install

Use uv:

uv tool install mdwiki

Or install from source:

uv sync
uv run mdwiki_exec ./example-posts ./dist

CLI

Build a site from a markdown source tree:

mdwiki_exec <source_dir> <dist_dir>

Show the built-in help or version:

mdwiki_exec --help
mdwiki_exec --version

Example:

mdwiki_exec ./post ./dist

source_dir usually contains:

  • markdown posts under dated folders such as post/2024/04/03/demo.md
  • optional local images next to each markdown file
  • optional CNAME
  • optional config.json

Optional GoatCounter support

You can enable real pageview counters by adding goatcounter_script to your config.json:

{
  "goatcounter_script": "<script data-goatcounter=\"https://drunkpig.goatcounter.com/count\" async src=\"//gc.zgo.at/count.js\"></script>"
}

When this field is present:

  • article pages render a counter next to the slug
  • index pages fetch and display per-article pageviews

When it is absent, mdwiki renders 未知 instead of fake random numbers.

Optional source markdown link

You can also expose the original markdown source for crawlers and readers:

{
  "source_markdown_base_url": "https://raw.githubusercontent.com/drunkpig/drunkpig.github.io/master/post"
}

When this field is present, article pages will:

  • add a visible link at the top of the article body
  • add a standard <link rel=\"alternate\" type=\"text/markdown\"> tag in <head>

Build date in footer

The default footer template now renders build_version as a YYYY-MM-DD date during site generation. Because GitHub Pages is built from source on every deploy, this date updates for all generated pages on each successful build.

GitHub Pages workflow

The recommended deployment model is:

  1. Keep markdown source in your repository.
  2. Build the site in GitHub Actions.
  3. Upload the generated dist/ directory as a Pages artifact.
  4. Deploy with actions/deploy-pages.

Example workflow:

name: Build and Deploy Pages

on:
  push:
    branches: ["master"]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - uses: actions/configure-pages@v5
      - name: Install mdwiki
        run: pip install mdwiki
      - name: Build site
        run: mdwiki_exec ./post ./dist
      - uses: actions/upload-pages-artifact@v3
        with:
          path: ./dist

  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
    steps:
      - id: deployment
        uses: actions/deploy-pages@v4

Develop with uv

uv sync
uv run mdwiki_exec ./post ./dist
uv build

Publish to PyPI:

git tag -a v0.3.3 -m "Release v0.3.3"
git push origin master v0.3.3

Pushing a new v* tag triggers the bundled GitHub Actions release workflow, which builds the package with uv and publishes it to PyPI.

Notes

  • CNAME is optional.
  • The bundled default theme is stored under mdwiki/templates/default.
  • mdwiki_exec is the supported public CLI entrypoint.

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

mdwiki-0.3.5.tar.gz (36.3 kB view details)

Uploaded Source

Built Distribution

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

mdwiki-0.3.5-py3-none-any.whl (38.1 kB view details)

Uploaded Python 3

File details

Details for the file mdwiki-0.3.5.tar.gz.

File metadata

  • Download URL: mdwiki-0.3.5.tar.gz
  • Upload date:
  • Size: 36.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mdwiki-0.3.5.tar.gz
Algorithm Hash digest
SHA256 0e55434adc0bbeb8aaf9e71b08c6c75d2b84b1ae9bf21bf9093ae47b33d3fe25
MD5 2b9c9c39df378dae502dceb3b08f2afa
BLAKE2b-256 be94b431a83fca3547cff8957c1a97ad39b943263b3cb80444eb0617f8750f48

See more details on using hashes here.

File details

Details for the file mdwiki-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: mdwiki-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 38.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mdwiki-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 cca10c3bbc353700352f2953dbe5bca3051105623c08fadcf15aeb907f3ceb3e
MD5 5bd8d5758e5e2a01b48832747d1ce768
BLAKE2b-256 8f5d8413c5d480a53143649bf0542bc8650cb052ef4417c10ca9779c5f5c985a

See more details on using hashes here.

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