Skip to content
A dev server for technical writing

Taliesin

Your .tmd files become a live post, a book, or a website, and only the block you changed re-renders.

When you save, the page does not reload. The scene below keeps turning where you left it, and the Python kernel keeps the variables it has already computed.

This scene is live WebGL. Drag to orbit it. It is the {js} cell above plus a shared makeScene3D helper that {{< include >}} pulls in from _includes/three-scene.tmd, which loads Three.js from esm.sh, so the scene needs network access. More of them, and the source, on the showcase.

taliesin preview post.tmd   # http://127.0.0.1:4321, updating as you save

What it builds

One .tmd file is a post. A directory with a _site.yml is a website, and a chapters: list in it makes a book. They share one renderer, so what you learn for one applies to the others.

Blog posts & papers

Prose, math, figures, citations, and cross-references, with executable Python cells and live interactive graphics.

See the gallery

Multi-chapter books

A sidebar, numbered chapters, cross-chapter references, and full-text search. The User Guide is a Taliesin book.

Read the docs book

Multi-page websites

Navbar, footer, OpenGraph, Cmd-K search, and opt-in post listings with an Atom feed per dated listing. This site is a Taliesin website, built by the same build you run.

Recipes for books and sites

Executed code

A {python} cell runs against a warm kernel. Change a parameter and only that cell (and the figure it produced) re-renders. The rest of the page does not move, and the kernel stays warm between saves.

Figure 1 is the output of a cell in this page’s source, executed by the same build that wrote the HTML you are reading.

import numpy as np
import matplotlib.pyplot as plt

cycles = 6
t = np.linspace(0, 1, 600)
fig, ax = plt.subplots(figsize=(8, 3))
ax.plot(t, np.sin(2 * np.pi * cycles * t) * np.exp(-2.2 * t), lw=2)
ax.set_xlabel("t")
ax.set_ylabel("amplitude")
plt.show()
Figure 1: Drawn by a Python cell in this page’s source as the site was built. Change the number of cycles, save, and only this figure re-renders.

Editing and publishing

Click to source

Ctrl-click (Cmd-click on Mac) anything in the preview and your editor jumps to the line it came from, even across files pulled in with {{< include >}}. The .tmd stays the only place you edit.

Works offline

Fonts, KaTeX and its font files, syntax highlighting and the vendored plotting libraries are all compiled into the binary and written into the page. Taliesin itself never fetches anything at runtime, so a built page renders the same offline. Anything you import() from a {js} cell is your own network call, which is why the scene above says so when it cannot reach esm.sh.

Static output

One command turns a document into a single HTML file, or a portable folder with its local assets copied alongside. Point it at a directory instead and you get a whole site or book as static files, with no server runtime and nothing to reproduce.

This page and the documentation book are built by Taliesin from plain .tmd files in one repository.