Free Gantt Chart Generator Online - Project Timeline Maker - Small Study Tools
Visual Timeline · Export PNG · 100% Free

Gantt Chart Generator

Build professional project timelines instantly, no signup and no download. Add tasks, set dates, assign colours and export your Gantt chart as a PNG. Works smoothly on mobile too. Pro Mode unlocks milestones, dependencies, progress tracking, team assignment and critical path.

100% Private — saved only in your browser, never sent to a server
Pro Version is Free for now
✓ Milestones · Dependencies · Progress · Team ·
Critical Path · Today Line · Zoom · CSV/PDF/Word Export unlocked
Day Night
Total Tasks
0
in chart
Duration
0
total days
Avg Progress PRO
0%
completion
End Date
project finish
Project:
Zoom PRO
You can also type the date directly (YYYY-MM-DD)
Gantt Chart
Add your first task above to start building your Gantt chart
Save chart as:
Task List 0 tasks
No tasks yet. Add a task above.
📖 Quick Reference
Bars show each task's start date and duration.
Milestones mark key single-day dates on the timeline.
Dependencies arrows show which tasks must finish first.
🔴Critical path the chain of tasks that decides your finish date.
🔴 Critical Path PRO
The critical path is auto-highlighted in red on your chart, the longest chain of dependent tasks that determines your project's earliest finish date.
💡 Project Planning Tips PRO
'; const blob = new Blob([html], {type: 'text/html'}); const a = document.createElement('a'); a.download = 'smallstudytools-gantt-print.html'; a.href = URL.createObjectURL(blob); a.click(); toast('Open the downloaded file in your browser, then Print → Save as PDF'); }function exportWord() { if (!tasks.length) { toast('Add tasks first'); return; } const proj = document.getElementById('projectTitle').value || 'My Project'; let minD = parseDate(tasks[0].start); let maxD = addDays(parseDate(tasks[0].start), tasks[0].dur); tasks.forEach(t => { const s=parseDate(t.start),e=addDays(s,t.dur); if(smaxD)maxD=e; }); const totalDays = daysBetween(minD, maxD); const useWeeks = totalDays > 28; const colDays = useWeeks ? 7 : 1; const cols = Math.ceil(totalDays / colDays) + 1; const colW = Math.max(18, Math.floor(500 / cols));let headerCells = `Task`; for (let i=0;i${d.getDate()}/${d.getMonth()+1}` : `${d.getDate()}/${d.getMonth()+1}`; headerCells += `${lbl}`; }let taskRows = ''; tasks.forEach((t, idx) => { const taskStart = parseDate(t.start); const startOffset = Math.floor(daysBetween(minD, taskStart) / colDays); const durCols = Math.ceil(t.dur / colDays); const bgLight = t.color + '30'; const assigneeHtml = t.assignee ? '
' + esc(t.assignee) + '' : ''; const milestoneStr = t.type === 'milestone' ? ' ◆' : ''; const rowBg = idx % 2 === 0 ? '#fff' : '#f8fafc'; let cells = '' + esc(t.name) + milestoneStr + assigneeHtml + ''; for (let c=0;c= startOffset && c < startOffset + durCols; const isProgress = inTask && t.progress > 0 && c < startOffset + Math.ceil(durCols * t.progress/100); const isMilestone = t.type==='milestone' && c===startOffset; let bg = '#ffffff'; let content2 = ''; if (isMilestone) { bg = t.color; content2 = '◆'; } else if (isProgress) { bg = t.color; } else if (inTask) { bg = bgLight; } else { bg = idx%2===0?'#fff':'#f8fafc'; } if (inTask && c===startOffset && t.type!=='milestone') { content2 = `${t.progress>0?t.progress+'%':''}`; } cells += `${content2}`; } taskRows += `${cells}`; });const html = `

${esc(proj)}

Generated by SmallStudyTools.com  |  ${new Date().toLocaleDateString()}

${headerCells}${taskRows}

smallstudytools.com — Free Online Gantt Chart Generator

`;const blob = new Blob([html], {type: 'text/html;charset=utf-8'}); const a = document.createElement('a'); a.download = 'smallstudytools-gantt.doc'; a.href = URL.createObjectURL(blob); a.click(); toast('Word file downloaded! Open with Microsoft Word or LibreOffice.'); }function exportCSV() { if (!tasks.length) { toast('Add tasks first'); return; } const headers = ['#','Task Name','Start Date','Duration (days)','End Date','Progress %','Assignee','Type','Depends On']; const rows = tasks.map((t,i) => [ i+1, t.name, t.start, t.dur, fmtDate(addDays(parseDate(t.start), t.dur)), t.progress||0, t.assignee||'', t.type||'task', t.dependsOn||'' ]); const csv = [headers, ...rows].map(r => r.map(v => `"${String(v).replace(/"/g,'""')}"`).join(',')).join('\n'); const blob = new Blob([csv], {type:'text/csv'}); const a = document.createElement('a'); a.download = 'smallstudytools-gantt.csv'; a.href = URL.createObjectURL(blob); a.click(); toast('CSV exported!'); }// ── ZOOM (PRO) ───────────────────────────────────────────────── function setZoom(z, btn) { zoom = z; document.querySelectorAll('.zoom-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); redraw(); }// ── SAMPLE DATA ──────────────────────────────────────────────── function loadSample() { const today = new Date(); const base = fmtDate(today); const d = (n) => fmtDate(addDays(today, n)); try { document.getElementById('fStart')._flatpickr && document.getElementById('fStart')._flatpickr.setDate(today); } catch(e) {} tasks = [ {id:1,name:'Research & Planning',start:base,dur:5,color:'#4f46e5',progress:100,assignee:'Alice',type:'task',dependsOn:null}, {id:2,name:'Design Phase',start:d(5),dur:7,color:'#7c3aed',progress:60,assignee:'Bob',type:'task',dependsOn:1}, {id:3,name:'Development',start:d(10),dur:14,color:'#10b981',progress:30,assignee:'Alice',type:'task',dependsOn:2}, {id:4,name:'Testing',start:d(22),dur:5,color:'#f59e0b',progress:0,assignee:'Carol',type:'task',dependsOn:3}, {id:5,name:'Launch',start:d(27),dur:1,color:'#ef4444',progress:0,assignee:'',type:'milestone',dependsOn:4}, ]; save(); redraw(); renderTaskList(); toast('✓ Sample loaded — 5 tasks added! Try switching to Pro for milestones, progress & more.'); }// ── ACTIONS ──────────────────────────────────────────────────── function clearAll() { if (!tasks.length) return; tasks = []; save(); redraw(); renderTaskList(); toast('Cleared!'); }// ── MODE ─────────────────────────────────────────────────────── function setMode(mode) { isPro = mode === 'pro'; document.getElementById('btnSimple').classList.toggle('active', !isPro); document.getElementById('btnPro').classList.toggle('active', isPro); widget().classList.toggle('pro-mode', isPro); document.getElementById('proModeBar').style.display = isPro ? 'flex' : 'none'; document.getElementById('modeHint').textContent = isPro ? 'Milestones · Dependencies · Progress · Team · Critical Path · Today Line · Zoom · CSV Export' : 'Add tasks · set dates · export PNG'; document.getElementById('formGrid').className = isPro ? 'form-grid-pro' : 'form-grid'; redraw(); renderTaskList(); try { localStorage.setItem('sst_gantt_mode', mode); } catch(e) {} }// ── UTILS ────────────────────────────────────────────────────── function esc(s) { return (s||'').replace(/&/g,'&').replace(//g,'>'); } function save() { try { localStorage.setItem(SK, JSON.stringify(tasks)); } catch(e) {} } function toast(msg) { const t=document.getElementById('toast'); t.textContent=msg; t.classList.add('show'); setTimeout(()=>t.classList.remove('show'), 2200); }// ── INIT ─────────────────────────────────────────────────────── try { if (typeof flatpickr === 'function') { flatpickr('#fStart', { dateFormat: 'Y-m-d', altInput: true, altFormat: 'd M Y', defaultDate: new Date(), disableMobile: true, allowInput: true, }); } else { document.getElementById('dateFallbackNote').classList.add('show'); } } catch (e) { document.getElementById('dateFallbackNote').classList.add('show'); }try { const saved = JSON.parse(localStorage.getItem(SK) || '[]'); if (Array.isArray(saved) && saved.length) { tasks = saved; redraw(); renderTaskList(); } const savedMode = localStorage.getItem('sst_gantt_mode'); if (savedMode === 'pro') setMode('pro'); } catch(e) {}

How to Use the Gantt Chart Generator

From a blank timeline to a downloadable project chart. No signup, works on mobile too.

1
Name the Project
Type your project name, or load a sample to try it out.
2
Add Tasks
Set a name, start date, duration and colour for each task.
3
Auto-Saves as You Go
Your chart is saved in your browser, nothing to lose.
4
Export or Go Pro
Export as PNG, or unlock milestones and critical path in Pro.

Everything above runs entirely in your browser. Your project data is never uploaded to a server, so it stays completely private from start to finish.

Specifications
Price Free
Signup Not Required
Data Storage Local only (this device)
Chart Type Horizontal bar timeline (canvas)
Zoom Levels Day, Week, Month (Pro)
Export Formats PNG · CSV (Pro) · PDF (Pro) · Word Table (Pro)
Pro Tools Milestones · Dependencies · Progress · Critical Path
Platform Optimized for Web & Mobile
Category Strategy & Diagrams
Found a bug or something not working right? Let us know and we'll fix it. Every report helps make this tool better.
Report an Issue

Gantt Chart Generator, Free and Online

A Gantt chart generator turns a task list into a visual project timeline, one bar per task, positioned by start date and sized by duration. This one requires no signup and no download, works smoothly on mobile as well as desktop, and runs entirely in your browser.

A list of tasks with deadlines tells you what needs doing, but it does not tell you whether two tasks overlap, whether a delay in one pushes back everything after it, or how the whole project actually fits together over time. That is the gap a Gantt chart closes. This free Gantt chart maker online tool lets you add tasks with a name, start date and duration, assign a colour, and see the timeline build instantly, no account and no software installation needed. Click "Try Sample Project" to see a filled-in 5-task example immediately. Export the finished chart as a PNG. Pro Mode adds milestones, task dependencies with automatic arrows, percentage progress bars, team member assignment, an auto-highlighted critical path, a today marker, day/week/month zoom, and export to CSV, PDF and a colour-filled Word table.

1Simple vs Pro, What Each Mode Includes

FeatureSimple ModePro Mode (Free)
Unlimited tasks, coloured timeline barsIncludedIncluded
Sample project, PNG exportIncludedIncluded
Milestones, task dependencies with arrowsNot includedIncluded
Progress tracking, team assignmentNot includedIncluded
Auto-highlighted critical path, today markerNot includedIncluded
Day / Week / Month zoomNot includedIncluded
Export as CSV, PDF, or a Word tableNot includedIncluded

2Reading a Gantt Chart

Bars = Duration
Diamonds = Milestones
Arrows = Dependencies
🔴
Red = Critical Path

The critical path is the part most people skip over but it is genuinely the most useful concept in the chart. It is the longest chain of dependent tasks running through the project, and it is what actually determines the earliest possible finish date. A delay to any task on that path pushes the whole project back, while a delay to a task off the critical path might not matter at all if there is slack elsewhere in the schedule. Once you know which tasks sit on the critical path, you know exactly where to focus your attention when something starts slipping, rather than treating every task as equally urgent.

3Where the Gantt Chart Actually Came From

The Gantt chart is named after Henry Gantt, but he was not the first to draw one. Polish engineer Karol Adamiecki created a very similar scheduling diagram, which he called the harmonogram, as early as 1896, more than a decade before Henry Gantt's version, a history detailed by GanttChart.com's account of the chart's origins. Adamiecki described his method to the Society of Russian Engineers in 1903, but published it only in Polish and Russian, which kept it largely unknown outside Eastern Europe. Henry Gantt developed his own version independently and published it in English between 1910 and 1915, and because his work reached Western industry first, the chart carries his name rather than Adamiecki's, a naming quirk of timing and language rather than who actually got there first.

QuestionQuick Answer
What decides a task's position on the chart?Its start date, plotted against the shared project timeline
What decides a bar's length?The task's duration in days
Why do dependencies matter?They show which tasks cannot start until another finishes
What is the critical path good for?Showing which tasks, if delayed, delay the whole project
Privacy Note

Everything, including Pro Mode's milestones, dependencies, progress tracking and critical path, runs entirely in your browser using JavaScript. Your project data is saved only in local storage on your own device, and is never sent to a server.

4Frequently Asked Questions

How do I create a Gantt chart online for free?
Add each task with a name, start date and duration, or click Try Sample Project to load a 5-task example. The bars appear instantly on the timeline. Export the finished chart as a PNG. No signup is required, and everything is saved only in your browser.
What is a Gantt chart used for?
A Gantt chart visualises a project schedule as horizontal bars along a timeline, one bar per task, positioned by its start date and sized by its duration. It lets a team see at a glance which tasks overlap, which come next, and how the whole project fits together, which is why it remains one of the most common project planning tools over a century after it was introduced.
Who actually invented the Gantt chart?
Polish engineer Karol Adamiecki created a very similar scheduling chart, which he called the harmonogram, as early as 1896, more than a decade before Henry Gantt. Adamiecki described it to the Society of Russian Engineers in 1903 but published his work only in Polish and Russian, which limited its reach. Henry Gantt independently designed and published his own version in English between 1910 and 1915, and because his work reached a wider Western audience first, the chart was named after him rather than Adamiecki.
What is the critical path in a Gantt chart?
The critical path is the longest chain of dependent tasks in a project, the sequence that actually determines the earliest possible finish date. A delay to any task on the critical path pushes back the whole project, while a delay to a task off the critical path may not, since other tasks can absorb the slack. Highlighting it tells you exactly which tasks to protect most closely.
What is the difference between a Gantt chart and a simple task list?
A task list shows what needs doing, but a Gantt chart shows when each task happens relative to every other task, how long it takes, and whether tasks overlap or depend on one another. That timeline view is what makes scheduling conflicts, resourcing gaps and unrealistic deadlines visible before they become a problem.
Is my Gantt chart data private?
Yes. Everything, including Pro Mode's milestones, dependencies, progress tracking and critical path, runs entirely in your browser using JavaScript. Your project data is saved only in your browser's local storage, and is never sent to a server.

Grounded in the documented Adamiecki and Gantt timeline, not the simplified single-inventor story most sites repeat. The full history is detailed on GanttChart.com's history of the Gantt chart. For related project and diagram tools on the rest of this site, see the WBS Generator and the full SmallStudyTools.com tool library.

Lilly
Here to help you find a tool
Search tools Search blogs
Try me to find a tool! 👋