[Nowline]
Roadmaps as code. For everyone.
Human readable roadmaps, built for AI.
Plain .nowline text files. Version-controlled. Render to SVG, PNG, PDF, HTML, Mermaid, XLSX, and MS Project XML.
What is Nowline?
Nowline is a text-first DSL for describing product and engineering roadmaps — human readable and machine readable. You write plain .nowline text files — indented, keyword-driven, diff-friendly — and tooling renders them as timelines, validates them, and composes them.
examples/minimal.nowline:
Renders to:
[Minimal roadmap rendered with light theme and now-line on 2026-02-09]
Why Nowline?
- Text, not a Gantt chart. Version-controlled, diffable, reviewable in a PR.
- Indentation, not XML. Roadmaps read like outlines, because that's how people think about them.
- Strict enough to catch mistakes. 30+ validation rules, clear error messages with line and column numbers.
- Composable.
include other files with explicit merge / ignore / isolate semantics.
Quick start
Install the CLI from your package manager:
Debian/Ubuntu and Windows users can grab the latest .deb or .exe from GitHub Releases. See packages/cli/README.md for the full install matrix (including man nowline setup).
Toolchain
Two-tier Node policy: Node ≥ 22 to consume @nowline/* packages (engines.node on every published package), Node 26 (.nvmrc) to develop. CI tests both versions on every PR. See Toolchain & Supported Versions for the full policy and bump procedure.
Render your first roadmap:
Or scaffold a brand-new file from a template:
To give an AI agent Nowline tools, install the plugin from this repo's marketplace. In Claude Code:
GitHub Copilot CLI and Codex read the same marketplace; see plugins/nowline/README.md for those and the other ways to add the MCP server.
For the VS Code / Cursor / VSCodium extension, search Nowline on the VS Code Marketplace or Open VSX.
0.x versioning. nowline is on 0.x.y while we settle the embed surface and IDE expansion. Public APIs may change between minor versions; full SemVer guarantees apply once we ship 1.0. See specs/releasing.md for the version contract.
To run from a checkout for local development (pnpm install && pnpm build), see CONTRIBUTING.md.
Use the CLI
nowline is verbless: rendering is the default. Other operations are flags on the same command.
Render (default)
The render pipeline is @nowline/core parse → @nowline/layout layout → @nowline/renderer SVG → format-specific exporter. Output is byte-for-byte deterministic for the same input, theme, and --now. A single nowline binary ships every format — see packages/cli/README.md for install details.
Validate (--dry-run)
Run the full pipeline (parse + validate + layout + format) without writing. Exits 0 on success, 1 if any errors are emitted.
--diagnostic-format text|json picks the stderr format; with --dry-run --format=json it defaults to json, otherwise text. JSON mode writes one { "$nowlineDiagnostics": "1", "diagnostics": [...] } document to stderr whenever any diagnostic exists, warnings included, so a warnings-only source exits 0 with the document. Clean sources print nothing.
Convert text ↔ JSON
Convert is just -f json (or -f nowline to go the other way). Input format is inferred from the extension; --input-format overrides for unusual filenames.
The emitted JSON carries a top-level "$nowlineSchema": "1" so downstream tools can detect schema changes. Comments are not preserved across round-trips — see packages/cli/README.md for the canonical printer rules.
Serve (--serve)
Run a live-reload preview in the browser. Great while authoring.
The server re-parses, re-validates, re-lays-out, and re-renders on every file change; connected clients refresh automatically via Server-Sent Events. Validation errors are displayed as an overlay on top of the most recent successful render.
Init (--init)
Scaffold a new .nowline file in cwd. The positional argument is the project name, not a file path. .nowline is auto-appended.
minimal, teams, and product correspond to the files under examples/. Existing files are silently overwritten.
Exit codes
Manual
After any package-manager install (brew install lolay/tap/nowline, npm install -g @nowline/cli, or the .deb from GitHub Releases), man nowline shows the CLI manual and man 5 nowline shows the full DSL reference. Both man pages also ship as standalone assets on every GitHub Release — see packages/cli/man/ for the mdoc sources.
Language at a glance
File structure
Entities
Properties
Roadmap start date
A roadmap may carry an optional start:YYYY-MM-DD that anchors the timeline baseline:
- If the roadmap contains any
anchor, or any milestone with a date: property, start: is required.
- Every such date must be on or after
start:.
- A pure-relative roadmap (built from
duration: and after: only) does not need start:.
- Across
includes that don't use roadmap:ignore, the parent and any included roadmap must agree on start: — both absent, or both present with the same value. Mismatches are errors, not silent overrides.
Includes
merge — default: child content is merged; parent definitions win on collision.
ignore — child content of that kind is discarded.
isolate — child roadmap is preserved as a self-contained region (requires a roadmap in the child).
Waves never merge. Under roadmap:merge or roadmap:isolate, an included file that declares a roadmap, swimlanes, or waves must declare the same waves as its parent, in the same order with the same start floors (NL.E0202).
For the full grammar reference, see specs/dsl.md.
Examples
Progressively-richer examples are included. Every build of main renders them, and the renderer fixtures in tests/, at review.nowline.dev.
examples/minimal.nowline — smallest complete file.
examples/capacity.nowline — lane and item capacity: with on-call support taking a quarter of team bandwidth; lane utilization underline.
examples/sizing.nowline — T-shirt size: entries plus shortening calendar span with capacity: (parallel work).
examples/teams.nowline — persons, teams, anchors, milestones, footnotes.
examples/product.nowline — full config, styles, labels, parallels, groups, descriptions.
examples/long.nowline — stress test: eight swimlanes, ~160 items, parallels, groups, anchors, milestones, footnotes, cross-cutting labels. Used for layout/render perf.
examples/nested.nowline + examples/nested/ — parent Security swimlane plus five isolated per-team roadmap includes (iOS, Android, Web, Platform, Data). Demonstrates roadmap:isolate.
examples/waves.nowline — wave barriers: three waves (Foundations, Build, Launch) across three lanes, a group wave: that assigns its children, unwaved background work, and milestones after: a wave.
examples/waves-program.nowline + examples/waves-program/ — multi-team waves: web and API team files re-declare the same waves (with a start floor), so each renders alone and the program file merges them behind one barrier.
Editor support
A TextMate grammar lives at grammars/nowline.tmLanguage.json. It works in any editor that supports TextMate grammars (VS Code, Sublime Text, Zed, IntelliJ via third-party plugins, etc.). A first-class LSP server and VS Code extension are tracked in packages/lsp/ and packages/vscode-extension/.
Use as a library
@nowline/core is a pure-TypeScript parser, typed AST, and validator built on Langium. Everything the CLI does on top of parsing is itself built against this library. See packages/core/README.md for the API and a usage example.
Status
Nowline is on v0.x — published to Homebrew, npm, the VS Code Marketplace, Open VSX, and GitHub Releases. The parser, validator, layout, renderer, every export format (SVG, PNG, PDF, HTML, Markdown+Mermaid, XLSX, MS Project XML), and the verbless CLI (--dry-run, --init, --serve) are usable today. Breaking changes may land between 0.x minor versions while the embed surface and IDE expansion settle; full SemVer guarantees kick in at 1.0. The release-by-release roadmap lives in specs/milestones.md.
Contributing
Bug reports, feature requests, and pull requests are welcome. Start with CONTRIBUTING.md for setup, build/test commands, and the expected workflow. Before opening an issue, please check the templates under .github/ISSUE_TEMPLATE/. Security issues should follow SECURITY.md. All participation is governed by our CODE_OF_CONDUCT.md.
Design specs for the DSL, renderer, CLI, IDE integrations, and OSS milestones live under specs/ — start there to understand how Nowline is shaped before touching code.
License
Apache 2.0 — see LICENSE.