Quick start
Create a small site with a home page and a blog post, preview it with the development server, and build it for publishing.
This guide takes about ten minutes. You need the fugo binary on your PATH; see Installation if you do not have it yet.
fugo versionCreate the project#
A fugo project is a directory with a configuration file, content and templates:
mkdir -p my-site/content/posts my-site/layouts
cd my-siteCreate the configuration file config.toml:
baseURL = "https://example.org/"
title = "My site"
languageCode = "en-us"baseURL: https://example.org/
languageCode: en-us
title: My site{
"baseURL": "https://example.org/",
"languageCode": "en-us",
"title": "My site"
}Add content#
Content is Markdown with front matter. The home page’s content is content/_index.md:
---
title: Home
---
Welcome to my site.A blog post is a page of the posts section, content/posts/hello.md:
---
title: Hello, fugo
date: 2026-10-02
---
This is my **first** post.Add templates#
fugo does not ship a theme: a site brings its layouts, or a theme that has them. Templates are Tera files, named after what they render. Start with a base template that every page extends, layouts/baseof.html:
<!doctype html>
<html lang="{{ site.language_code or "en" }}">
<head>
<meta charset="utf-8">
<title>{% block title %}{{ page.title }} | {{ site.title }}{% endblock title %}</title>
</head>
<body>
<header><a href="{{ site.home.rel_permalink }}">{{ site.title }}</a></header>
<main>{% block main %}{% endblock main %}</main>
</body>
</html>The home page lists the posts, layouts/home.html:
{% extends "baseof.html" %}
{% block title %}{{ site.title }}{% endblock title %}
{% block main %}
{{ page.content }}
<h2>Posts</h2>
<ul>
{% for p in site.regular_pages %}
<li>
<a href="{{ p.rel_permalink }}">{{ p.title }}</a>
<time>{{ p.date | date(format="%B %-d, %Y") }}</time>
</li>
{% endfor %}
</ul>
{% endblock main %}A post uses layouts/single.html:
{% extends "baseof.html" %}
{% block main %}
<article>
<h1>{{ page.title }}</h1>
{{ page.content }}
</article>
{% endblock main %}And a section such as /posts/ uses layouts/list.html:
{% extends "baseof.html" %}
{% block main %}
<h1>{{ page.title }}</h1>
<ul>
{% for p in page.pages %}
<li><a href="{{ p.rel_permalink }}">{{ p.title }}</a></li>
{% endfor %}
</ul>
{% endblock main %}Check the templates before you build. fugo templates check reports syntax errors, unknown functions and missing templates with their positions:
fugo templates checkPreview with the server#
fugo serverOpen http://localhost:1313/. The server builds the site into memory, watches the project, and reloads the browser when you save a file. Edit content/posts/hello.md and watch the page change. Press Ctrl+C to stop it.
Drafts and pages dated in the future are left out unless you ask for them: fugo server -D -F.
Build for publishing#
fugofugo without a command builds the site into public/, the directory you upload to your host. Add --minify to minify HTML, CSS and JavaScript. See Host and deploy for publishing to GitHub Pages and other hosts.
Next steps#
- Learn the directory structure of a project.
- Organize content with sections and page bundles.
- Learn Tera templates and the template lookup order.
- Look up any function in the reference.