A minimal, opinionated static site generator
Project description
Midas
A minimal, opinionated static site generator. Drop markdown files into a folder, run one command, and get a clean, fast, multilingual website.
Features
- Zero config for single-language sites
- Markdown with syntax highlighting, tables, and strikethrough
- Multilingual support as a first-class feature
- RSS feeds per language
- Built-in templates and CSS that update with the package
- Jinja2 templates — optional override for power users
- Built-in dev server — no extra tools needed
Installation
Requires Python 3.9 or newer.
pip install midas-ssg
Or install from source in editable mode for development:
pip install -e .
This installs the midas command-line tool.
Quick start
midas init my-blog
cd my-blog
midas serve
Open http://localhost:8000 to see your site.
Commands
| Command | Description |
|---|---|
midas init <folder> |
Scaffold a new Midas project into <folder>. Requires an empty directory. |
midas init |
Scaffold a new Midas project into the current directory. Also requires an empty directory. |
midas build |
Build the site to dist/. |
midas serve |
Build and start a local development server on http://localhost:8000. |
midas clean |
Delete the dist/ folder. |
Directory structure
After midas init, your project looks like this:
my-blog/
├── midas.yaml # Site configuration
├── style.css # Optional CSS overrides (empty by default)
├── content/ # Your markdown content
│ ├── index.md # Homepage
│ ├── posts/ # Blog posts
│ └── img/ # Images (copied as-is)
└── static/ # Other static assets (favicons, fonts, etc.)
The built site is written to dist/.
How it works
Templates
Midas ships with built-in Jinja2 templates (base.html, home.html, post.html, etc.) that live inside the installed package. When you update Midas (pip install -U midas), your site's HTML updates automatically.
You never have to touch HTML. If you want to customize a template, create a templates/ folder in your project and copy only the files you want to override. Midas will use your version instead of the built-in one, but you'll stop receiving updates for those specific templates.
Styles
Midas provides a built-in light minimalist stylesheet. It is copied to dist/midas.css on every build.
To customize styles, edit the style.css file at your project root. It is copied to dist/style.css and loaded after midas.css, so any rule you write overrides the base. Keep your overrides minimal — only change what you need.
For other assets (favicons, fonts, PDFs), drop them into static/ and they are copied to dist/.
Writing content
Blog posts
Create a markdown file in content/posts/:
---
title: "Hello World"
description: "My first post"
date: 2025-01-01
---
Your post content here.
Posts are sorted by date. The filename can also include a date prefix: 2025-01-01-hello-world.md.
Standalone pages
Any .md file outside posts/ becomes a page:
---
title: "About"
---
This is the about page.
Homepage
content/index.md with type: home becomes the homepage. You can put metadata in its frontmatter or in midas.yaml under home:.
Multilingual content
Add languages in midas.yaml:
languages:
default: en
additional: [fi]
Then create content in content/fi/posts/ for Finnish posts. Frontmatter language takes priority over folder inference.
Configuration
midas.yaml is optional but recommended:
site:
url: "https://example.com"
name: "My Site"
description: "A personal website"
copyright: "© 2024 Your Name"
languages:
default: en
additional: [fi]
home:
name: "Your Name"
bio: "A short description about you."
profilePic: "/img/profile.webp"
socials:
- name: github
url: "https://github.com/yourusername"
- name: email
url: "mailto:hello@example.com"
cards:
- title: "My Project"
url: "https://example.com/project"
recentPosts: 3
Customization
CSS overrides
Edit style.css at your project root. For example, to switch to a dark background:
body {
background: #1a1a1a;
color: #fafafa;
}
Template overrides
Create a templates/ folder and drop in only the files you want to override. For example, to customize the homepage:
mkdir templates
cp $(python -c "import midas; print(midas.__file__)")/../templates/home.html templates/
Then edit templates/home.html. When you run midas build, you'll see a warning:
Templates overridden: home.html
These will not receive updates from Midas automatically.
Icons
The built-in home.html template renders social icons by looking up SVG files in templates/icons/ by name. If you create a templates/icons/ folder in your project, you can add or replace icons there.
Dependencies
- markdown — Markdown parsing
- Pygments — Syntax highlighting
- Jinja2 — Templating
- PyYAML — YAML parsing
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 midas_ssg-0.1.0.tar.gz.
File metadata
- Download URL: midas_ssg-0.1.0.tar.gz
- Upload date:
- Size: 379.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a73d16e8b905fa5a960769e51c6616d5e0b1e48831c460ca211247807fc47b71
|
|
| MD5 |
6291fddc2c3100dc9833212ee910fe50
|
|
| BLAKE2b-256 |
6340595ce7452de4270e9f107e1a712799020614505618b99fcfaddc87ba671a
|
Provenance
The following attestation bundles were made for midas_ssg-0.1.0.tar.gz:
Publisher:
publish.yml on vike256/Midas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
midas_ssg-0.1.0.tar.gz -
Subject digest:
a73d16e8b905fa5a960769e51c6616d5e0b1e48831c460ca211247807fc47b71 - Sigstore transparency entry: 1615869318
- Sigstore integration time:
-
Permalink:
vike256/Midas@aa82da3b6ff800ab8acdf3aaa7974ebfec6d00d0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vike256
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aa82da3b6ff800ab8acdf3aaa7974ebfec6d00d0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file midas_ssg-0.1.0-py3-none-any.whl.
File metadata
- Download URL: midas_ssg-0.1.0-py3-none-any.whl
- Upload date:
- Size: 382.5 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 |
0a176f3d47ebd254ddebed6da1e1759a3772259808cf80ae888cb95072d1dbe7
|
|
| MD5 |
d6e5eecd04598a92c311e2c033ed183a
|
|
| BLAKE2b-256 |
0a6727372aab97bc9f23eb569badca1d83444792cd54fce334d9af428126e6c6
|
Provenance
The following attestation bundles were made for midas_ssg-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on vike256/Midas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
midas_ssg-0.1.0-py3-none-any.whl -
Subject digest:
0a176f3d47ebd254ddebed6da1e1759a3772259808cf80ae888cb95072d1dbe7 - Sigstore transparency entry: 1615869326
- Sigstore integration time:
-
Permalink:
vike256/Midas@aa82da3b6ff800ab8acdf3aaa7974ebfec6d00d0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/vike256
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aa82da3b6ff800ab8acdf3aaa7974ebfec6d00d0 -
Trigger Event:
push
-
Statement type: