La Famille is a fast, feature-rich static site generator written in Go. It goes beyond simple markdown-to-HTML conversion by offering powerful developer tools, an interactive Terminal UI (TUI), and AI-ready RAG (Retrieval-Augmented Generation) exports.
This project is built and maintained primarily by Jules (AI assistant) alongside an eight-legged friend, Raoul(s) the Octopus. We take a "Jules-forward" approach to development. If you are opening a Pull Request, please make sure to tag Jules in the comments to keep the AI looped in.
- Lightning-Fast Static Generation: Converts Markdown content into clean, semantic HTML using the
goldmarklibrary. - Interactive TUI: A sleek Bubbletea-powered terminal interface for managing builds, serving the site locally, and viewing project stats.
- Robust CLI: A powerful command-line interface built with
cobrafor tasks like initialization, building, serving, and RAG generation. - RAG Export: Native tools to extract your site's content and metadata into clean archives optimized for LLM context windows (
rag-system.md,rag-content.md, etc.). - Ask This Site (experimental): A local, citation-grounded Q&A assistant that runs entirely on your machine. Binds only to loopback, never sends content off-device, and supports the Ollama daemon out of the box.
- Flexible Templating: Support for multiple HTML layouts (e.g., standard, cyberpunk, minimal) easily overridden via YAML frontmatter.
- Taxonomy Archives: Add
tags:orcategories:to any page's YAML frontmatter and the build emits/tags/and/categories/archive pages — linked from each article and from the site nav, with no template edits required. - Built-in Local Server: Instantly preview your site with
go run ./cmd/la-famille serve. - Smart Graphing: Automatically generates
graph.json,backlinks.json, and handles non-existent internal links by generating helpful stub pages. - Interactive Knowledge Graph Explorer: Every build emits a self-contained
/graph/index.htmlpage that visualizes the site as a directed graph — search by title, page ID, tag, category, or author, filter by render/raw/stub/orphan, jump into "focus mode" for a selected page plus its neighbors, and deep-link selections via?node=. No runtime server; just open the file. Disable withgraph_explorer: falseinconfig.yaml.
| Workflow | Use when | Required inputs |
|---|---|---|
| Released binary | CI, GitHub Pages, or an operator who does not have the source checkout | A downloaded archive and its SHA256SUMS entry |
| Source checkout | Developing La Famille or changing templates/parser code | Go 1.24+ and this repository |
Released archives are self-contained: --version works offline from an empty
directory, and the default layout plus required graph/search assets are
embedded in the binary. Grab the latest cut from the
releases page —
verify an archive before use, then select a site from
any working directory:
sha256sum --check SHA256SUMS --ignore-missing
./la-famille --version --json
./la-famille --project-root /path/to/site init
./la-famille --project-root /path/to/site buildRelative paths are resolved from --project-root. Precedence is explicit CLI
flags, then config.yaml, then the selected project root/current directory.
public/ is the complete static publish artifact; the build cache is kept
beside the project and is never intended for hosting. To publish a binary-only
site to GitHub Pages, set siteurl to the full <user>.github.io/<repo> URL
and upload the contents of public/ — see RELEASE-QUICKSTART.md for the exact
steps.
The release binary ships with a small packet of layouts. init installs all
of them and scaffolds a starter homepage plus a theming demo, so a fresh site
builds to something real immediately:
./la-famille themes # list bundled themes with descriptions
./la-famille --project-root /path/to/site init --theme layout-octoburger
./la-famille --project-root /path/to/site buildOctoburger is La Famille's flagship, soul theme — and the global default.
Every fresh init site, every build of this repository (local or GitHub
Pages), and the released binary all render Octoburger out of the box. It
translates the 🍔 OCTOBURGER MENU identity from the TUI into a site layout:
Raoul(s) the octopus holds the burger while you write, with bun-yellow
mastheads, pink highlights, Raoul-blue accents over charcoal panels, and a
burger-stack card holding each article's content. It is embedded in the
release binary alongside the default layout and installed by init, so a
binary-only install gets it with no source checkout.
Beautiful docs, an octopus, and a burger — Octoburger is how La Famille introduces itself to the world, and it is what the project's own deployed site renders.
Switching looks works on a binary-only install, no source checkout required:
- Site default: change the
template:line inconfig.yamlto another installed layout (for exampletemplates/layout-terminal.html), or re-runinit --force --theme <name>(your config is kept asconfig.yaml.bak). - Single page: set
layout:in the page's frontmatter (see the scaffoldedcontent/theming.mdfor a working example).
- Go Toolchain: Go 1.24 or newer (the project
go.modspecifiesgo 1.24.0withtoolchain go1.24.3). Verify your installed version withgo version. - Go Installation & Binary Path: Ensure
gois in yourPATH. When installing binaries via Go (e.g.go install), binaries are placed in$(go env GOPATH)/bin(typically~/go/bin). Ensure$(go env GOPATH)/binis added to your shell'sPATH:export PATH="$PATH:$(go env GOPATH)/bin"
- Source Code: Clone this repository to your local machine:
Note for users who downloaded a release archive or source tarball instead of cloning: Extract the source archive, navigate into the extracted root directory, and run the commands below.
git clone https://github.com/drawmeanelephant/la-famille.git cd la-famillego run ./cmd/la-familleexecutes directly against the local module tree.
To run the static site generator using the CLI:
go run ./cmd/la-famille buildThe equivalent released-binary command is:
la-famille --project-root /path/to/site buildTo launch the interactive TUI:
go run ./cmd/la-famille tuiTo export RAG bundles:
go run ./cmd/la-famille ragFor an artifact-only Pages build, write the archive directly below the output tree without changing the checkout:
la-famille --project-root /path/to/site rag --output /path/to/site/public/rag-archiveAfter
go run ./cmd/la-famille build, openpublic/graph/index.htmlto explore the site's relationships interactively. The page is fully static — it loadsgraph.json,meta.json, andbacklinks.jsonfrom the same output directory via relative fetches.
Note:
rag-archive/is generated bygo run ./cmd/la-famille rag. It is intentionally ignored and must not be edited or committed. The Pages workflow publishes a copy underpublic/rag-archive/; it uploads the completepublic/directory as an Actions artifact and does not use agh-pagesbranch.
The TUI uses standard, frictionless keybindings for easy navigation (every screen shows its valid keys in the footer):
- Navigation: Use
up/downarrows or Unix-centricj/kprimitives to move through the menus. The selected menu item has afocus-visiblehighlight (underline + background) mirroringtemplates/layout.htmlaccessibility patterns. - Selection & Exit: Press
EnterorSpaceto execute a command. PressqorEscto safely drop back to the main menu screen buffer. - Diagnostics: Press
dfrom any screen to toggle the Diagnostics drawer (shows build warnings/errors withNext:action hints likela-famille checkorfix frontmatter in <path>). In the drawer,cclears entries and↑/↓navigates. - Watch Mode: Press
won the menu/stats/diagnostics to toggle Watch Mode (auto-rebuild on file changes) — equivalent to selecting "Toggle Watch Mode". - Help: Press
?orhfrom any screen to open the Help & Keybindings legend; press?,h,q, orEscto return. Footer help lines expand to↑/k, ↓/j: Navigate • Enter/Space: Select • m: Menu • d: Diagnostics • w: Watch • ?: Help • q: Quit. - Active Server Views: When you select "Serve Site" (or "Serve Site with Watch"), the TUI locks into an alternate screen buffer, displaying the dancing mascot animation (Raoul!). To gracefully tear down the network handle and exit back to the main menu, press
qorEsc. From serve/ask screens you can also pressdfor diagnostics or?/hfor help.
To serve the generated site locally (defaults to port 8080):
go run ./cmd/la-famille serveTo launch the local-first Ask This Site assistant against your corpus:
go run ./cmd/la-famille rag # refresh the corpus first
go run ./cmd/la-famille ask --model llama3.2 # then serve the assistant on 127.0.0.1:8090Note:
askis opt-in and experimental. It binds only to your loopback address, never sends your content off the machine, and never logs prompts or answers by default. See content/docs/ask.md for the full privacy and architecture notes.
The commands above will get you started, but La Famille has a lot more to offer. For deep-dive guides on how to use all the features, please explore our documentation:
- Setup & Getting Started
- CLI Reference
- Using the TUI
- Templating Guide
- RAG Export Guide
- Ask This Site Guide
- How the Generator Works
Generated with ❤️ by Jules
La Famille uses a comprehensive automated testing pipeline. All code merges are gated by passing go test and static analysis provided by golangci-lint to ensure security and code quality.
You can easily build your La Famille site in CI using our GitHub Action:
steps:
- uses: actions/checkout@v4
- name: Build with La Famille
uses: drawmeanelephant/la-famille@mainAll inputs are optional and fall back to sensible defaults:
steps:
- uses: actions/checkout@v4
- name: Build with La Famille
uses: drawmeanelephant/la-famille@main
with:
project-root: '.'
content-dir: 'content'
output-dir: 'public'
asset-dir: 'assets'
template: 'templates/layout-octoburger.html'
site-url: 'https://example.github.io/my-site'
# Pin a release in production; omit for the source-build fallback.
release-version: 'v1.2.3'