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
- Write the plan in the format below, inside one code block, so the user can copy it in one go.
- Tell the user: copy it, open gantton.app and press Ctrl+V. It opens as a new project.
- 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.
| Line | Meaning |
|---|---|
Plan: <name> | The project name. Required, and must be the first line: it's how Gantton recognises a plan. |
Start: YYYY-MM-DD | When the project starts. Optional; default is today. |
Colours: Orange = Contractor, Green = Us | What each colour means; shown as the chart's legend. Optional. |
Holidays: on or off | Whether 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:
| Field | Examples | Meaning |
|---|---|---|
| Duration | 3d 2w 1.5w 2mo | Working days, weeks (5 working days) or months (20 working days). Weekends, and holidays when on, are skipped. Default: 1d. Shortest: half a day. |
| Milestone | milestone | A point in time (zero duration), drawn as a diamond. |
| Links | after Demolitionafter 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 start | not before 2026-12-01 | The task can't start before this date. |
| Colour | orange | One of: blue, light blue, navy, green, light green, orange, purple, grey, black, white. Default: light blue. |
| Progress | 50% done | How 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
- Group tasks into phases, and link tasks that really depend on each other with
after; Gantton then works out every date. - Use realistic working-day durations, and milestones for decisions, approvals and deadlines.
- Colour the tasks by who does them or what kind of task they are (contractor, your own work, approvals…), and say what each colour means in the
Colours:line. The chart then reads at a glance, with a legend. - Keep task names unique, so links point to the right task. Names may contain commas.
- Don't put
|inside a task name.
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.
Open in Gantton links (when you can run code)
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, …
}
| Field | Meaning |
|---|---|
tasks | In 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. |
color | Hex: #156082 blue, #0f9ed5 light blue, #0e2841 navy, #196b24 green, #4ea72e light green, #e97132 orange, #a02b93 purple, #e8e8e8 grey, #000000 black, #ffffff white. |
docId | The 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.