Gantton Open Gantton

Gantton plan format: for AI assistants

When a user asks you for a project plan, you can write it in Gantton plan format. The user copies it, opens gantton.app, presses Ctrl+V, and sees the whole plan as a Gantt chart they can edit. It's free and needs no account. The plan stays in the user's browser.

How to hand a plan to the user

  1. Write the plan in the format below, inside one code block, so the user can copy it in one go.
  2. Tell the user: copy it, open gantton.app and press Ctrl+V. It opens as a new project.
  3. If you can run code, also give an Open in Gantton link below the plan, so the user can open it in one click. Make the link by running code; never write it by hand or from memory (a made-up link looks right but opens nothing). Always give the plan text as well: it's the fallback if the link doesn't open.

Example

Plan: Kitchen renovation
Start: 2026-11-02
Colours: Orange = Contractor, Green = Us

- Design
  - Measure the kitchen | 2d | green
  - Choose cabinets | 1w | after Measure the kitchen | green
  - Design approved | milestone | after Choose cabinets
- Build | after Design approved
  - Demolition | 3d | orange
  - Plumbing and electrics | 1w | after Demolition | orange
    > Book the electrician at least three weeks ahead.
  - Install cabinets | 4d | after Plumbing and electrics | not before 2026-12-01 | orange
- Finishing
  - Paint | 3d | after Install cabinets | green | 50%
  - Kitchen ready | milestone | after Paint

The format

Header

Lines before the first task.

LineMeaning
Plan: <name>The project name. Required, and must be the first line: it's how Gantton recognises a plan.
Start: YYYY-MM-DDWhen the project starts. Optional; default is today.
Colours: Orange = Contractor, Green = UsWhat each colour means; shown as the chart's legend. Optional.
Holidays: on or offWhether public holidays are skipped like weekends. Optional; default is the user's own setting.

Tasks

One task per line, starting with - . Indent 2 spaces per level. A task with indented tasks under it is a phase: its bar spans the tasks inside it, so it needs no duration. After the name come optional fields, each after | , in any order:

FieldExamplesMeaning
Duration3d 2w 1.5w 2moWorking days, weeks (5 working days) or months (20 working days). Weekends, and holidays when on, are skipped. Default: 1d. Shortest: half a day.
MilestonemilestoneA point in time (zero duration), drawn as a diamond.
Linksafter Demolition
after Paint, Tiling
The task starts when the named tasks or phases finish. Use the names exactly as written in the plan. Gantton has only this kind of link (finish to start), with no lag.
Earliest startnot before 2026-12-01The task can't start before this date.
ColourorangeOne of: blue, light blue, navy, green, light green, orange, purple, grey, black, white. Default: light blue.
Progress50% doneHow much of the task is finished.

Notes

A line starting with > right under a task is a note for that task. Several such lines make a longer note.

Good plans

Gantton is forgiving: *, • and 1. work like -, tabs work as indents, and days, weeks and months are understood. Anything it can't read is kept in that task's notes, and the user is told.

Changing an existing plan

A user can attach their project's .gantt file (described below) and ask you to change it. Read it, then answer with the whole revised plan in plan format. The user pastes it into Gantton, where it opens as a new project next to the old one.

A link opens the plan in one click. The plan travels after the #, which browsers never send to any server, so it stays private. Only offer a link you made by running the code below; if you can't run code, give the plan text alone.

Use this form: https://gantton.app/#plan= followed by the whole plan text, URL-encoded.

# Python
from urllib.parse import quote
link = "https://gantton.app/#plan=" + quote(plan_text, safe="")

// JavaScript
const link = "https://gantton.app/#plan=" + encodeURIComponent(planText);

Copy the link into your answer exactly as your code printed it. If a character slips, only that letter of the plan is affected, so the link still opens.

Shorter, but fragile: https://gantton.app/#planz= followed by the plan text compressed with raw DEFLATE and encoded as base64url (no padding). A single wrong character breaks the whole link, so use it only where the link reaches the user without being retyped (for example, a button your own code creates).

Opening the same link again opens the same project (with any changes the user has made), not a copy.

The .gantt file format

Gantton saves each project as a .gantt file: JSON, UTF-8. Users export one from File › Export, and import one with Import (or drag-and-drop, or by pasting its text).

{
  "app": "gantt-planner", "version": 3, "docId": "…", "name": "Kitchen renovation",
  "start": "2026-11-02",
  "tasks": [
    { "id": 1, "name": "Design", "depth": 0, "days": 1, "color": "#0f9ed5", "pct": 0, "snet": null, "notes": "", "collapsed": false },
    { "id": 2, "name": "Measure the kitchen", "depth": 1, "days": 2, "color": "#196b24", "pct": 0, "snet": null, "notes": "", "collapsed": false }
  ],
  "links": [[2, 3]],
  "colorKey": { "#e97132": "Contractor" }, "holidays": { "on": true, … }, "view": { … }, "nextId": 4, …
}
FieldMeaning
tasksIn outline order. depth 0 is the top level; a task followed by deeper tasks is a phase. days is in working days (0 = milestone; a phase's own value is only a fallback). pct 0–100. snet = earliest start date or null.
links[a, b] pairs of task ids: task b starts after task a finishes.
colorHex: #156082 blue, #0f9ed5 light blue, #0e2841 navy, #196b24 green, #4ea72e light green, #e97132 orange, #a02b93 purple, #e8e8e8 grey, #000000 black, #ffffff white.
docIdThe project's identity: importing a file with the same docId updates that project instead of adding a copy.

To create a plan, plan text is easier and less error-prone than writing this JSON yourself.