Skip to main content

Generate Gantt charts from JSON descriptions using matplotlib

Project description

jsonantt

jsonantt generates beautiful Gantt chart images from a simple JSON description.
Charts are rendered with matplotlib so they can be saved as .png, .pdf, .svg, and more.


Features

  • Infinitely nestable tasks — define sub-tasks, sub-sub-tasks, etc.
  • Auto date computation — parent task start/end are derived automatically from children when not specified.
  • Milestone markers — easy "milestone": true flag renders a distinctive diamond.
  • Fully colourable — set colours per-task; children inherit their parent's colour.
  • Clean, indented y-axis labels — task names are left-aligned with proper indentation per depth level.
  • PNG / PDF / SVG output — whatever matplotlib supports.

Installation

pip install jsonantt

Or, directly from source:

git clone https://github.com/briday1/jsonantt.git
cd jsonantt
pip install -e .

Quick start

1. Create a JSON description

{
  "title": "My Project",
  "dateformat": "%Y-%m-%d",
  "tasks": [
    {
      "name": "Phase 1 – Planning",
      "children": [
        { "name": "Requirements", "start": "2024-01-08", "end": "2024-01-19" },
        { "name": "Architecture",  "start": "2024-01-15", "end": "2024-01-31" }
      ]
    },
    { "name": "Planning done", "milestone": true, "date": "2024-01-31" },
    {
      "name": "Phase 2 – Build",
      "color": "#70AD47",
      "children": [
        { "name": "Backend",  "start": "2024-02-01", "end": "2024-03-01" },
        { "name": "Frontend", "start": "2024-02-12", "end": "2024-03-08" }
      ]
    },
    { "name": "Launch", "milestone": true, "date": "2024-04-01", "color": "#FF5757" }
  ]
}

2. Generate the chart

CLI:

jsonantt project.json project.png
jsonantt project.json project.pdf   # vector PDF
jsonantt project.json project.svg   # scalable SVG
jsonantt --dpi 300 project.json project.png   # high-resolution PNG

Python API:

from jsonantt import load_chart, render_chart

config = load_chart("project.json")
render_chart(config, "project.png", dpi=150)

JSON reference

Field Type Description
title string Optional chart title shown at the top
dateformat string strptime format string (default: "%Y-%m-%d")
start date string Optional chart x-axis start date (overrides task dates)
end date string Optional chart x-axis end date
style object Visual style overrides (see below)
tasks array Top-level list of task objects
arrows array Dependency arrows drawn between tasks (see below)

Task object

Field Type Description
name string Required. Task label
id string Unique identifier used for not_before and arrows references
start date string Bar start date
end date string Bar end date
duration string or int Duration from start (or resolved not_before end): "14d", "2w", "3m", "2y", or a plain integer (days)
not_before string id of another task — this task starts immediately after that task ends
color CSS hex string Bar/milestone colour (e.g. "#4472C4")
milestone boolean Render as a diamond milestone instead of a bar
date date string Milestone date (used when milestone: true)
marker_size number Override milestone diamond size in points
bold boolean Render label in bold (top-level tasks are auto-bolded by default)
children array Nested sub-tasks (infinitely nestable)

Auto date computation: When a task has children but no explicit start/end, the dates are computed automatically as the earliest child start and latest child end, recursively.

Duration formats: d/day/days, w/week/weeks, m/month/months, y/year/years — e.g. "14d", "2w", "3m", "1y".

Arrow object

Field Type Description
from string id of the source task (arrow starts at its end)
to string id of the target task (arrow points to its start)
color CSS hex string Arrow colour (default: "#888888")
label string Optional text label drawn on the arrow

Style object

Field Default Description
width 14 Figure width in inches
row_height 0.3 Height of each task row in inches
bar_height 0.5 Bar height as a fraction of row_height
font_size 12 Base font size in points
indent_size 3 Spaces added per depth level in labels
label_fraction 0.28 Fraction of figure width used for labels
colors palette Array of default hex colours cycled per top-level task
background "#FFFFFF" Figure background colour
grid_color "#E0E0E0" Vertical gridline colour
row_band_color "#F5F5F5" Alternating row band colour
milestone_color "#E65100" Default milestone colour
milestone_size 14 Default milestone diamond size in points
major_tick null Major tick unit: "year", "quarter", "month", "week"
minor_tick null Minor tick unit: "quarter", "month", "week", "day"
major_grid_width 2.0 Major gridline linewidth
minor_grid_width 1.5 Minor gridline linewidth
tick_position "top" X-axis label position: "top", "bottom", or "both"
bold_tasks true Auto-bold top-level (depth 0) task labels

Examples

See the examples/ folder for ready-to-run JSON files.

Simple project

examples/simple.json — a five-phase project with milestones

simple

Complex roadmap

examples/complex.json — a multi-year roadmap with deep nesting and custom colours

complex

Dependencies & arrows

examples/dependencies.jsonid, duration, not_before, and arrows

dependencies

Generate them locally:

jsonantt examples/simple.json examples/simple.png
jsonantt examples/complex.json examples/complex.png
jsonantt examples/dependencies.json examples/dependencies.png

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jsonantt-2026.2.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jsonantt-2026.2-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file jsonantt-2026.2.tar.gz.

File metadata

  • Download URL: jsonantt-2026.2.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for jsonantt-2026.2.tar.gz
Algorithm Hash digest
SHA256 b50652be009f53381382cdef0d8a68edd65d39499e137078ee2e9b734856c860
MD5 a9886e5759017f34e435f73f219d1bf7
BLAKE2b-256 df3096d27d4d8aa85c1d4b5870fd85818d1c7403883c502e7d896ea0830d53f7

See more details on using hashes here.

File details

Details for the file jsonantt-2026.2-py3-none-any.whl.

File metadata

  • Download URL: jsonantt-2026.2-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for jsonantt-2026.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d3131f8feb6ec9718cb5addb8bdfda422295582e2288323b403e9ee5924eaf5e
MD5 f30c6cce8bed62ae96e7a03fc757fada
BLAKE2b-256 6c04c9b5aa9e6c0636f2a13d5dcab44a427b49fa20cb6b5dcfa7aec652c8869e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page