Configuration
Two files, read in this order:
~/.config/trunade/config.toml, for every lesson.trunade.tomlnext to the.md, for that folder only.
Each one overrides only what it declares. With --config file.toml, only that file is read.
Example
timeout_seconds = 10
compile_timeout_seconds = 60
output_limit_bytes = 1048576
editor = ["zed", "{file}:{line}"]
[languages.cpp]
aliases = ["c++", "cxx", "cc"]
source = "main.cpp"
compile = ["g++-16", "-std=c++23", "-Wall", "-Wextra", "-fdiagnostics-color=always", "{flags}", "{source}", "-o", "{binary}"]
run = ["{binary}"]
Fields
| Field | What it does |
|---|---|
timeout_seconds |
run time limit with fixed stdin |
compile_timeout_seconds |
compile time limit |
output_limit_bytes |
output limit per run |
editor |
command to open the .md at the block’s line |
Languages
Each [languages.name] replaces the whole language.
| Field | What it does |
|---|---|
aliases |
other names accepted in the fence |
source |
source file name |
compile |
compile command (optional; Python has none) |
run |
run command |
In the commands, {source} and {binary} become the temporary paths and {flags} becomes the block’s flags, as separate arguments.
Example: Rust
[languages.rust]
aliases = ["rs"]
source = "main.rs"
compile = ["rustc", "-O", "{flags}", "{source}", "-o", "{binary}"]
run = ["{binary}"]
Page preferences
What you pick in the ☰ panel (fonts, theme, code colors, width, size, language) is saved by Trunade! in ~/.config/trunade/preferences.toml. It applies to every lesson. You can edit it by hand; unknown values are ignored.
theme = "light" # auto | light | dark
code_theme = "dark" # auto | light | dark
locale = "en" # pt | en
font_scale = 1.2
text_width = "narrow" # narrow | wide
title_font = "gloock" # gloock | ibm-plex-mono | fraunces | cormorant-garamond | young-serif
body_font = "inter" # jetbrains-mono | fira-code | inter | open-sans
code_font = "fira-code" # jetbrains-mono | fira-code
Usage log
Every time Trunade! opens a lesson it writes a local log to ~/.local/share/trunade/logs/ (or $XDG_DATA_HOME/trunade/logs/), one file per session, in JSON Lines: 2026-10-16T14-02-33Z-aula14.jsonl. The path is printed in the terminal at startup.
The log is anonymous and never leaves the machine. It keeps what happened on the page, not who was in the room:
| Event | Fields |
|---|---|
start, document |
.md name, version, number of blocks (document when the file changes) |
connect, disconnect, visibility |
page opened, closed, in the background |
section |
heading where the page stopped |
run |
block (cell, line, language), whether it was edited on the page, number of cases |
case |
outcome and verdict of each test case, time |
finished |
outcome, times, first line of the compile error |
quiz |
question, chosen options, whether it was right |
step, zoom, print, runAll |
step shown, zoomed block, PDF, run all |
Every event has a UTC time. To erase it, delete the files.