Zero-dependency Python static-site generator. Base layout + partials + Markdown content + YAML data + shortcodes. One file, stdlib only.
Project description
Zero-dependency Python static-site generator. Base layout + partials + Markdown content + YAML data + shortcodes. One file, stdlib only.
Install
uv tool install lintc # recommended — isolated, no env needed
pipx install lintc # equivalent if you prefer pipx
pip install --user lintc # also fine
Requires Python 3.9 or newer. No other dependencies.
Quickstart
Scaffold a site:
src/
├── content/
│ ├── pages/home.yaml # structured pages
│ ├── blog/*.md # Markdown posts with YAML front matter
│ └── products/*.yaml
├── layouts/
│ ├── _base.html # the master layout
│ ├── home.html # page layouts
│ └── partials/ # shared chrome (head, header, footer, components)
├── data/ # site-wide data (site.yaml, nav.yaml, etc.) + optional lintc.yaml
└── static/ # copied verbatim into dist/
Build it:
lintc build # emits dist/
lintc serve # dev server with live reload at http://127.0.0.1:8000/
lintc check # post-emit validations + configurable plugins
CLI
lintc build [--root DIR] [--include-drafts]
lintc serve [--root DIR] [--host HOST] [--port PORT] [--no-reload] [--no-drafts]
lintc check [--root DIR]
lintc --version
lintc --help
build hides drafts by default — use --include-drafts to opt them in. serve shows drafts by default — use --no-drafts to hide them.
lintc check's validators are configurable via src/data/lintc.yaml — see the docs for the schema.
Why it exists
The reason lintc exists is that the static site for lintuxt.ai needed a compiler, and the existing Python options either required a dependency graph I didn't want (Pelican, MkDocs) or a runtime I didn't want (Hugo's Go binary, Eleventy's Node.js). The constraint was: one file, stdlib only, no installation ceremony beyond having Python on the box.
It turned out to fit a useful niche. Personal sites and small documentation trees don't need the kitchen sink — they need layouts, partials, Markdown, structured data, and a dev server. lintc does exactly that and nothing more. The whole compiler is one Python file you can read top-to-bottom in an hour, including tests.
The trade-off is real: lintc is not Hugo, not Eleventy, not Astro. There's no plugin ecosystem of templates, no theme marketplace, no first-class image optimization, no markdown extension marketplace. If you're building a 500-page documentation site for a SaaS product, this is the wrong tool. If you're building a personal site, a project page, or a small handful of docs and you want the build pipeline to fit in your head, lintc is the right shape.
It also doubles as a portfolio surface: every release of lintc is visible on its own engineering page on lintuxt.ai, embedded via lintc's own body_source field and the remote-sync plugin keeping the content in sync from this very README. The site you might be looking at is built by the thing you're reading about.
Documentation
Full docs: docs/index.md. Changelog: docs/changelog.md.
License
MIT — see 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lintc-0.4.0.tar.gz.
File metadata
- Download URL: lintc-0.4.0.tar.gz
- Upload date:
- Size: 47.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cfd5de9d9071f32c6b6f8ed0cea33f4dfa1aa61f10b4e347aedc3debe5951622
|
|
| MD5 |
01dfcf474f63b59f7abdc70474b39a78
|
|
| BLAKE2b-256 |
63d16d25501f1d5646bd8cc30cca5076a80ccd55bb46a6195328b30f6b487efb
|
Provenance
The following attestation bundles were made for lintc-0.4.0.tar.gz:
Publisher:
release.yml on lintuxt/lintc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lintc-0.4.0.tar.gz -
Subject digest:
cfd5de9d9071f32c6b6f8ed0cea33f4dfa1aa61f10b4e347aedc3debe5951622 - Sigstore transparency entry: 1630623998
- Sigstore integration time:
-
Permalink:
lintuxt/lintc@c173ad8269db9dc502f495c395da46b22d3b8e58 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/lintuxt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c173ad8269db9dc502f495c395da46b22d3b8e58 -
Trigger Event:
push
-
Statement type:
File details
Details for the file lintc-0.4.0-py3-none-any.whl.
File metadata
- Download URL: lintc-0.4.0-py3-none-any.whl
- Upload date:
- Size: 30.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
021045b9311159b219ecaf5c124e061a4ef1d81ae24f6e722be16f4932bc7c02
|
|
| MD5 |
dbb5bbcae5709e4b52182d03bd4a86b3
|
|
| BLAKE2b-256 |
32e18bd4a2845e9091b2e6f0543519dabe2c48fdd1fe8bfbe4622fba31aca885
|
Provenance
The following attestation bundles were made for lintc-0.4.0-py3-none-any.whl:
Publisher:
release.yml on lintuxt/lintc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lintc-0.4.0-py3-none-any.whl -
Subject digest:
021045b9311159b219ecaf5c124e061a4ef1d81ae24f6e722be16f4932bc7c02 - Sigstore transparency entry: 1630624012
- Sigstore integration time:
-
Permalink:
lintuxt/lintc@c173ad8269db9dc502f495c395da46b22d3b8e58 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/lintuxt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c173ad8269db9dc502f495c395da46b22d3b8e58 -
Trigger Event:
push
-
Statement type: