Browser-first timeline authoring

Timeline DSL

Describe timelines as text and validate them instantly in the browser. Prototype in the Playground, then move to CLI or CI — history, fiction, curricula, and org histories in a Git-friendly format.

Latestv2.0.0Release notes
world-history.tdslvalidated
timeline "Fictional World" {
  range 980..1260;
}

lane "Realm" as realm { kind custom; order 10; }
lane "Events" as incident { kind custom; order 20; }

span realm 990..1184 "Haito Dynasty" {};
event incident 1042 "Northern Campaign" {};
event_range incident 1130..1137 "Succession War" {};

Make timeline authoring a reproducible process

Timeline DSL aims to center timeline creation around reviewable input files and CLI output — not manual diagram editing.

Author

Author in browser and CLI

Describe events, spans, lanes, and annotations as `.tdsl`, get instant previews in the Playground, and store the source in a diff-friendly format.

Validate

Catch broken timelines immediately

Check syntax and lane references in the Playground, then use `tdsl check` and `tdsl lint` locally or in CI to ensure quality.

Render

Output to HTML / SVG / PNG / PDF

Generate static artifacts that are easy to embed in documentation sites, GitHub Pages, and more. The browser Playground can save HTML / SVG / `.tdsl`; PNG / PDF output and Wikidata resolution are handled by the CLI.

From source to artifact

Source to artifact in one continuous flow

`.tdsl` is not the artifact itself — it is the input to regenerate your timeline. Author in the browser, save the file, pass it to CLI and CI. The more you update your timeline, the easier it becomes.

01

Prototype in the browser

Edit `.tdsl` in the Playground and immediately see WASM validation results and SVG previews.

02

Validate locally with CLI

Pass the downloaded `.tdsl` through `tdsl check` and `tdsl lint` to catch reference errors and duplicates before publishing.

03

CI quality gate and auto-build

Keep validation running in GitHub Actions and render to HTML / SVG / PNG / PDF for curricula, internal docs, and documentation sites.

A specialist tool — broad in application

Not a general-purpose timeline maker, but ideal for anyone who wants to manage a continuously updated timeline as text.

Fictional world timeline

Fiction & game worldbuilding

Split dynasties, wars, character lifespans, and chapter events into lanes and keep updating your setting materials.

Japanese / World history

Classroom & curriculum

Line up eras and events, then distribute only the relevant range as HTML for class use.

Company history

Company history

Maintain founding, product launches, office openings, and policy changes as a single history.

Wikidata scaffold

Research notes

From Wikidata candidate exploration to personal annotations, manage unverified hypotheses as text.

See real output

The `.tdsl` source side by side with the SVG it produces — every example below is rendered by the actual WASM engine.

Modern Japanese History
View DSL source
timeline "日本近現代史" {
    title "日本近現代史";
    unit year;
    range 1853..1926;
    calendar proleptic_gregorian;
}

lane "政治" as politics { kind custom; order 10; }
lane "外交" as diplomacy { kind custom; order 20; }
lane "文化" as culture { kind custom; order 30; }

event politics 1868 "明治改元" { tags ["era"]; };
span politics 1868..1912 "明治時代" { tags ["era"]; };
span politics 1912..1926 "大正時代" { tags ["era"]; };
event diplomacy 1853 "黒船来航" {};
event diplomacy 1854 "日米和親条約" {};
event diplomacy 1894 "日清戦争開始" {};
event diplomacy 1904 "日露戦争開始" {};
event culture 1872 "新橋〜横浜間鉄道開業" {};
event culture 1885 "内閣制度発足" {};
Fictional World Chronicle
View DSL source
timeline "架空世界年表" {
    title "架空世界年表";
    unit year;
    range 980..1260;
    calendar proleptic_gregorian;
}

lane "王朝" as realm { kind custom; order 10; }
lane "事件" as incident { kind custom; order 20; }
lane "人物" as people { kind custom; order 30; }

span realm 990..1184 "灰都王朝" { tags ["dynasty"]; };
span realm 1200..1260 "東方連盟" { tags ["dynasty"]; };
event incident 1042 "北方遠征" {};
event_range incident 1130..1137 "継承戦争" { tags ["war"]; };
span people 1088..1162 "巡礼王" { tags ["person"]; };
event people 1184 "王朝終焉" {};
Library Release Cycle
View DSL source
timeline "ライブラリ リリースサイクル" {
    title "ライブラリ リリースサイクル";
    unit year;
    range 2020..2028;
    calendar proleptic_gregorian;
}

lane "メジャー" as major { kind custom; order 10; }
lane "LTS" as lts { kind custom; order 20; }

span major 2020..2022 "v1.x" {};
span major 2022..2024 "v2.x" {};
span major 2024..2026 "v3.x" {};
span major 2026..2028 "v4.x" {};
span lts 2022..2025 "v2.x LTS" { tags ["lts"]; };
span lts 2024..2027 "v3.x LTS" { tags ["lts"]; };
event major 2022 "v2.0 リリース" {};
event major 2024 "v3.0 リリース" {};
event major 2026 "v4.0 リリース" {};

Browse all samples in the Gallery →

Why Timeline DSL instead of hand-drawn diagrams or spreadsheets

There are other ways to build a timeline. Here is an honest account of what Timeline DSL prioritizes among them.

A timeline you can validate

Diagram tools and spreadsheets never flag input mistakes. Timeline DSL catches broken references and duplicates upfront with `tdsl check` / `tdsl lint`.

Regenerable from text

A hand-drawn diagram must be redrawn on every change. `.tdsl` is text, so you can diff and review it in Git, and regenerate it from Wikidata or CSV.

A CLI + WASM that runs anywhere

The browser Playground and the local CLI share the same validation logic, so wiring it into CI comes naturally.

How it compares to alternatives

ApproachValidationDiff & reviewOutput
Timeline DSLYes (with diagnostics)Git diffs on textHTML / SVG / PNG / PDF
Hand-drawn diagram (drawing tool)NoneImage diffs onlyImage (hard to reuse)
SpreadsheetNoneHard to track cell by cellTable (not built for timelines)
Generic diagram DSL (e.g. Mermaid)Syntax errors onlyGit diffs on textDiagram (timeline-specific features limited)

Integrate CLI into local and CI workflows

Once you've validated your structure in the Playground, install the CLI for your platform to set up local maintenance and automated CI builds. See Quick Start for detailed setup.

macOS / Linux

brew tap keroway/tap
brew install tdsl

macOS / Linux (one-line installer)

curl -sSfL https://raw.githubusercontent.com/keroway/timeline-dsl/main/install.sh | sh

Windows

irm https://raw.githubusercontent.com/keroway/timeline-dsl/main/install.ps1 | iex

Rust toolchain

cargo binstall tdsl-cli

See other installation methods (cargo / manual binary, etc.) →

Write your first timeline in 30 seconds

No install required — try it right now in the Playground. Setup steps and grammar details are in the docs.