Task labels cannot contain commas when you build a Gantt chart with the Gantt Chart Maker, because every non-empty input row uses exactly two literal commas to separate the task name from its start date and end date in a CSV-lite format that does not recognize quoted fields or escaped delimiters. That restriction is not a stylistic choice; it is the parsing contract: if a label adds a third comma anywhere, the parser counts four fields, the whole request is rejected, and no chart is returned. The good news is that comma-free rewrites usually look just as clean in a printed timeline, and they survive every other validation rule the tool applies. Substituting a semicolon, slash, pipe, em dash, or pair of parentheses keeps the label readable while preserving the two-comma row structure, and the resulting SVG still renders the label exactly as you typed it after XML escaping for ampersands, angle brackets, quotes, and apostrophes. This article walks through why the rule exists, which substitute characters look best in a printed timeline, the exact row format the parser accepts, and how to download the final chart as a standalone SVG file.
Whether you maintain a single project list or paste in a team schedule, the same two-comma rule applies to every row, so solving the comma question once is the fastest path to a clean export.

Why the Format Forbids Commas Inside Labels
The Gantt Chart Maker treats pasted input as "CSV-lite" rather than full CSV. Every non-empty row must contain exactly two literal commas, leaving three fields: a task label, a start date, and an end date. Quoted fields, quoted commas, additional columns, escaped delimiters, and multiline fields are unsupported. Leading and trailing whitespace around fields is trimmed, but the comma count is measured before that trim, so wrapping a label in spaces does not hide an extra comma. Labels may contain at most 80 UTF-16 code units, the optional title at most 100, and the raw schedule input at most 20,000 code units.
Because the format is deliberately minimal, one malformed row rejects the entire request; the parser never skips a bad row and never returns a partial chart. A partial timeline would mislead a reader more than an empty error message, so the strict stance is the point. The label budget, the two-comma requirement, and the strict date format work together: drop any one of them and the validator cannot guarantee that the parsed rows describe the schedule you intended.
This is also why a label that "needs a comma" must be rewritten before use. The tool does not try to guess whether a third comma is decoration or a separator, and it does not attempt to repair rows behind your back.
Substitutes That Read Clearly Inside a Label
Any character that does not add to the comma count is fair game, including punctuation marks from outside English typography and simple ASCII stand-ins. The table below shows common replacements and the situations where each looks most natural in a printed timeline.
| Substitute | Example label | Best for |
|---|---|---|
| Semicolon | Design; review | Step clusters inside one task |
| Forward slash | Build / test | Sequential phases |
| Pipe | Plan | scaffold | Parallel streams |
| Em dash | Kickoff — launch | Date-free narratives |
| Parentheses | QA (regression) | Short annotations |
| Middle dot | Draft · edit | Compact stacks |
All of these survive the validator because they do not change the comma count. A few extra rules still apply: keep the label under 80 UTF-16 code units, avoid control characters (which the renderer replaces with U+FFFD), and remember that an ampersand, angle bracket, double quote, or apostrophe will be converted to its XML entity in the exported SVG so it remains visible text rather than markup.
Build the Chart With Safe Labels
- Open the Gantt Chart Maker in your browser tab and, if you want one, type a title of up to 100 UTF-16 code units.
- Rewrite every label that contains a comma so it has none; swap in a semicolon, slash, pipe, em dash, or pair of parentheses, and keep each label under 80 UTF-16 code units.
- Paste between 2 and 30 task rows, one per non-empty line, each formatted as task,start,end with exactly two literal commas per row.
- Type each date in strict YYYY-MM-DD form using a real UTC calendar date, and confirm that every end date falls on or after its start date.
- Click Generate, then read every bar, tick, and label in the preview to confirm that the schedule matches what you intended.
- Click Download SVG to save the standalone file built from the exact preview string; the same markup powers both, so the saved chart is the reviewed chart.
Date Rules That Decide Whether the Chart Generates
Dates are validated as real proleptic Gregorian UTC calendar dates rather than passed through permissive string parsing. Four digits, a hyphen, two month digits, another hyphen, and two day digits are required. The lexical year range runs from 0000 through 9999, and full UTC year setters avoid JavaScript's special numeric Date.UTC treatment of years 0 through 99. The table below shows inputs the validator accepts and inputs it rejects outright.
| Input | Result | Reason |
|---|---|---|
| 2026-03-14 | Accepted | Real Gregorian date |
| 2024-02-29 | Accepted | 2024 is a leap year |
| 2025-02-29 | Rejected | 2025 is not a leap year |
| 2026-04-31 | Rejected | April has 30 days |
| 2026-13-01 | Rejected | Month 13 invalid |
| 2026/03/14 | Rejected | Slashes not allowed |
| 2026-3-14 | Rejected | Missing zero padding |
Every end date is inclusive: a task from January 1 through January 3 occupies three calendar-day cells in the timeline, and a task whose start and end match occupies one. Concretely, with the inclusive start day numbered 1 and the inclusive end day numbered 3, the inclusive day count for that task is 3 − 1 + 1 = 3 days. The horizontal domain begins at the earliest task start and ends after the latest inclusive task day, so even a one-day project still produces a visible bar and the calculation never divides by a zero elapsed span.
How Label Text Stays Safe in the Exported SVG
User strings are safe SVG text, not markup. Ampersands, angle brackets, double quotes, and apostrophes are converted to XML entities, and XML-forbidden controls along with isolated surrogates become U+FFFD. Labels appear in text and title tooltip nodes only after this conversion, and the optional title and accessible aria-label use the same escaping. A script-looking label remains visible characters rather than an SVG element, so a label written with angle brackets renders as escaped entities in the output and never executes.
The exported SVG uses the W3C namespace, a fixed 1,100-pixel logical width, a row-dependent height, a white background, grid lines, labels, rectangle bars, title tooltips, a viewBox, and an accessible role and label, matching the structure defined in the W3C SVG 2 specification. Wide output scrolls in the preview rather than shrinking labels into an unreadable mobile width.
The output is also size-budgeted. The SVG has an explicit 100,000 UTF-16-code-unit ceiling checked against the complete serialized string; the exact boundary is accepted and one unit over fails, with no markup suffix dropped or sampled. Generating successfully creates one Blob URL from the complete SVG, which stays alive long enough for an ordinary same-origin anchor download and is revoked when the title or data changes, a result is replaced, generation fails, or the component unmounts. That sequence avoids immediate-revocation download races and accumulated ObjectURL leaks.
What the Tool Does Not Cover
The chart describes calendar occupancy, not hours, business days, work effort, percentage complete, or resource capacity. It does not parse Microsoft Project files, dependencies, milestones, critical paths, holidays, working calendars, progress, assignees, costs, baselines, or timezone timestamps. It does not infer whether overlapping work is feasible or promise that a schedule is realistic. Use dedicated project-management software for dependency planning, collaboration, permissions, audit history, and operational commitments.
Everything else stays on your device. Parsing, UTC date arithmetic, SVG creation, preview rendering, Blob creation, and download all run in the current browser tab. No schedule, title, SVG, or interaction is uploaded, which keeps the comma-rewriting loop private even when the schedule itself is sensitive.
Related reading: How to Make Labels on Microsoft Word in a Few Minutes.