Simple real-time static site generator

StaPy is a real-time static page generator made with Python 3. The code is a file of about 200 lines to modify freely.

Source code


Requires Python 3.4 or newer on any operating system.


Simple and minimal themes made with StaPy:


Create a project directory anywhere and download the last release from StaPy repository.

mkdir stapy
cd stapy
tar zxvf last.tar.gz --strip 1
rm last.tar.gz


Static files are generated in the web directory. It contains all pages and files you need to deploy (html, css, js, images...).

HTTP server

Run standalone HTTP server:


Access to http://localhost:1985


When a page is open in the browser, the server search a json file in build/json directory. The name of the json file is the same as the URL path. Examples:

/                 : index.html.json
/hello.html       : hello.html.json
/hello/world.html : hello/world.html.json
/hello/world/     : hello/world/index.html.json

If the json file does not exist, a 404 error is sent.


The json file contains all the data required for generate the page:

  "title": "Page title",
  "description": "Page description",
  "template": "build/template/default.html",
  "content": "build/page/index.html"

template and content keys are required.

A file named default.json in the build/json directory is used for the default configuration. It will be merged with the page's json file. This is useful for a global configuration.


  "title": "Default title",
  "template": "build/template/default.html"


  "title": "Home title",
  "content": "build/page/index.html"

default.json + index.html.json

  "title": "Home title",
  "template": "build/template/default.html",
  "content": "build/page/index.html"

Note: the default.json file is optional.


The template file is the skeleton of the page:

<!DOCTYPE html>
<html xmlns="" lang="en" xml:lang="en">
        <meta charset="utf-8">
        <title>{{ title }}</title>
        <meta name="description" content="{{ description }}" />
        <link rel="stylesheet" href="/css/style.css" />
        {% content %}

All variables in double curly braces {{ }} will be replaced with the text declared in the json file for the var.

All variables in curly brace percent {% %} will be replaced with the content of the file declared in the json file for the var.

Tip: set false for the variable in the json file to replace it with empty text.


All necessary resources like js, css or images are copied from the build/web directory to the web directory.

Static files

The final static HTML files and resources are added or refreshed when the pages are opened in the browser. When /hello.html is open, the hello.html file is automatically generated in the web directory.


The website can be regenerated with a crawler (for example when the template is updated). StaPy gives a simple cURL crawler. All declared routes (json) will be reached.


200 http://localhost:1985/
200 http://localhost:1985/hello.html

Feel free to delete the web directory and launch the crawler.


Setup Netlify to deploy the web directory of the git repository.