Publish a personal blog with every post written in two or more languages
Host a static site on any plain web server without a runtime
Lazy-load Twitter embeds or Prism.js code highlighting only on pages that declare them
Use SPA-style article navigation with prefetch to avoid white-flash transitions
Needs Python 3.14 and Poetry, and every article must have a translated version for each configured language or the build fails.
Swallow is a static site generator, sometimes shortened to SSG, written in Python with the Alpine.js library for the browser side. A static site generator takes Markdown files plus templates and produces plain HTML pages, which you can host on any web server. The author describes Swallow as minimal and fast, and the project's tagline is about conveying your words without walls of language. It is released under the MIT license and runs on Python 3.14 with Jinja2 templates. The distinguishing feature is multi-language blogging. If you want to publish the same article in several languages, you write one Markdown file per language with a suffix like _en.md or _ja.md. Every article must have a translated version for each configured language, otherwise the build will fail. The README notes that a default-message fallback for missing translations is being considered for a future update. Swallow also does on-demand loading of extensions on the client side. Instead of always shipping every helper script, the generator inspects each article's frontmatter for an extensions list, like Twitter or codeblock, and only loads the matching scripts (for example the Twitter embed widget or Prism.js for code highlighting) when an article actually needs them. The third main feature is an SPA-like transition between articles: when you follow an internal link, only the main content area swaps in, with prefetching to avoid blank white screens. Installation has four steps: clone the repo, run poetry install to fetch Python dependencies, run swallow init to enter settings such as the target output directory, then write articles in the markdown folder. Each article uses YAML frontmatter with required fields for per-language title and summary, a date that becomes the article's ID and file name, optional tags, optional extension declarations, and an optional draft flag that tells Swallow to skip generation. The author welcomes contributions for new extensions, new themes, and bug fixes, and plans to add a CONTRIBUTING.md later.
Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.