Minimal static site generator for markdown vaults
Project description
Foliate
A static site generator for your markdown vault. A flexible, configurable alternative to Obsidian Publish.
cd my-vault
uvx foliate init # Create .foliate/config.toml
uvx foliate build # Generate site to .foliate/build/
Why Foliate?
- Everything in your vault - All content, config, and output stay in your vault
- Single executable - One tool to generate your website, no complex setup
- Flexible - Just markdown files in, a website out
Features
- Zero config - Works out of the box with sensible defaults
- Vault-native - Everything lives in
.foliate/inside your vault - Two-tiered visibility - Control what's public vs. published
- Incremental builds - Only rebuilds changed files (auto-rebuilds on config/template changes)
- Watch mode - Auto-rebuild on file changes
- Works with any markdown - Obsidian, Logseq, or plain markdown files
- Obsidian syntax - Supports
image sizing - Quarto support - Preprocess
.qmdfiles (optional) - Deploy command - Built-in GitHub Pages deployment
Quick Start
# Initialize in your vault
cd my-vault
uvx foliate init
# Build
uvx foliate build
# Watch mode (build + serve + auto-rebuild)
uvx foliate watch
Directory Structure
my-vault/
├── .foliate/
│ ├── config.toml # Configuration
│ ├── build/ # Generated site
│ ├── cache/ # Build cache
│ ├── templates/ # Custom templates (optional)
│ └── static/ # Custom CSS/JS (optional)
├── _private/ # Ignored - never built
├── _homepage/ # Site root (/, /about/, etc.)
│ └── about.md # → example.com/about/
├── assets/ # Images, PDFs
├── Home.md # → example.com/wiki/Home/
└── Notes/
└── ideas.md # → example.com/wiki/Notes/ideas/
Special Directories
| Directory | Purpose |
|---|---|
_private/ |
Never built, regardless of frontmatter. Configurable via ignored_folders in config. |
_homepage/ |
Content deployed to site root (/) instead of /wiki/ (or other prefix). Excluded from normal wiki generation. |
Visibility System
Control what gets built and listed:
---
public: true # Built and accessible via direct link
published: true # Also appears in listings and search
---
- No frontmatter or
public: false→ Not built (private) public: true→ Built, accessible via URLpublic: true, published: true→ Built AND visible in listings
Configuration
.foliate/config.toml:
[site]
name = "My Wiki"
url = "https://example.com"
[build]
ignored_folders = ["_private", "drafts"]
wiki_prefix = "wiki" # URL prefix for wiki content (set to "" for root)
[nav]
items = [
{ url = "/about/", label = "About" },
{ url = "/wiki/Home/", label = "Wiki" },
]
Commands
foliate init # Create .foliate/config.toml
foliate build # Build site
foliate watch # Build + serve + auto-rebuild
foliate deploy # Deploy to GitHub Pages
foliate clean # Remove build artifacts
Options
foliate build --force # Force full rebuild
foliate build --verbose # Detailed output
foliate build --serve # Start server after build
foliate watch --port 3000 # Custom port
foliate deploy --dry-run # Preview deploy without executing
foliate deploy -m "msg" # Custom commit message
Deployment
Foliate generates static files in .foliate/build/. Deploy anywhere that serves static files.
GitHub Pages (Built-in)
Configure in .foliate/config.toml:
[deploy]
method = "github-pages"
target = "../username.github.io" # Path to your GitHub Pages repo
exclude = ["CNAME", ".gitignore", ".gitmodules"]
Then deploy:
foliate deploy # Sync, commit, and push
foliate deploy --dry-run # Preview changes first
rsync (VPS/Server)
rsync -avz --delete .foliate/build/ user@server:/var/www/mysite/
Simple local copy
cp -r .foliate/build/* /path/to/webserver/
Quarto Support (Optional)
Foliate can preprocess .qmd files (Quarto markdown) to .md before building:
# Install with quarto support
pip install foliate[quarto]
Configure in .foliate/config.toml:
[advanced]
quarto_enabled = true
quarto_python = "/path/to/python" # Optional: Python for Quarto
License
MIT
Project details
Release history Release notifications | RSS feed
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 foliate-0.2.2.tar.gz.
File metadata
- Download URL: foliate-0.2.2.tar.gz
- Upload date:
- Size: 28.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9247f898b1748b795c1193912c76c60f51ec81a5feaa025c0c4532be0fbc5c03
|
|
| MD5 |
d565cc83d73c24a3ed493adfb05404d0
|
|
| BLAKE2b-256 |
5d48efaafee0218906e846bcbea3ae745a9d0d0e13596f14fb8a1fc9a6023628
|
File details
Details for the file foliate-0.2.2-py3-none-any.whl.
File metadata
- Download URL: foliate-0.2.2-py3-none-any.whl
- Upload date:
- Size: 36.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
671c87e6b9dee931783299ea48e8e9d03f0a1cc4152ee83f88d8401d4d5fe74f
|
|
| MD5 |
4e368bc94e49a64b198ed58f74278512
|
|
| BLAKE2b-256 |
03ade0c6802b1da774494a8769dcbbb320e3879f5d682c548b0d2a8d00143396
|