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.
Browser-first timeline authoring
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.
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" {};Timeline DSL aims to center timeline creation around reviewable input files and CLI output — not manual diagram editing.
Author
Describe events, spans, lanes, and annotations as `.tdsl`, get instant previews in the Playground, and store the source in a diff-friendly format.
Validate
Check syntax and lane references in the Playground, then use `tdsl check` and `tdsl lint` locally or in CI to ensure quality.
Render
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
`.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.
Edit `.tdsl` in the Playground and immediately see WASM validation results and SVG previews.
Pass the downloaded `.tdsl` through `tdsl check` and `tdsl lint` to catch reference errors and duplicates before publishing.
Keep validation running in GitHub Actions and render to HTML / SVG / PNG / PDF for curricula, internal docs, and documentation sites.
Not a general-purpose timeline maker, but ideal for anyone who wants to manage a continuously updated timeline as text.
Fictional world timeline
Split dynasties, wars, character lifespans, and chapter events into lanes and keep updating your setting materials.
Japanese / World history
Line up eras and events, then distribute only the relevant range as HTML for class use.
Company history
Maintain founding, product launches, office openings, and policy changes as a single history.
Wikidata scaffold
From Wikidata candidate exploration to personal annotations, manage unverified hypotheses as text.
The `.tdsl` source side by side with the SVG it produces — every example below is rendered by the actual WASM engine.
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 "内閣制度発足" {};
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 "王朝終焉" {};
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 リリース" {};
There are other ways to build a timeline. Here is an honest account of what Timeline DSL prioritizes among them.
Diagram tools and spreadsheets never flag input mistakes. Timeline DSL catches broken references and duplicates upfront with `tdsl check` / `tdsl lint`.
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.
The browser Playground and the local CLI share the same validation logic, so wiring it into CI comes naturally.
| Approach | Validation | Diff & review | Output |
|---|---|---|---|
| Timeline DSL | Yes (with diagnostics) | Git diffs on text | HTML / SVG / PNG / PDF |
| Hand-drawn diagram (drawing tool) | None | Image diffs only | Image (hard to reuse) |
| Spreadsheet | None | Hard to track cell by cell | Table (not built for timelines) |
| Generic diagram DSL (e.g. Mermaid) | Syntax errors only | Git diffs on text | Diagram (timeline-specific features limited) |
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 tdslmacOS / Linux (one-line installer)
curl -sSfL https://raw.githubusercontent.com/keroway/timeline-dsl/main/install.sh | shWindows
irm https://raw.githubusercontent.com/keroway/timeline-dsl/main/install.ps1 | iexRust toolchain
cargo binstall tdsl-cliSee other installation methods (cargo / manual binary, etc.) →
No install required — try it right now in the Playground. Setup steps and grammar details are in the docs.