Direct comparison
GTF vs GFF3: Annotation Format Compared
GTF vs GFF3 compared: attribute syntax, gene/transcript hierarchy, which tools expect which format, and why conversion is not always lossless.
Written and maintained by CASRAI Editorial Board
Last updated
Ask CASRAI · included with Regulatory Radar
Ask about GTF vs GFF3: Annotation Format Compared
Ask CASRAI answers research-administration questions and cites the passages behind every claim — and says so when the corpus does not cover something, instead of guessing. It comes with a Regulatory Radar subscription at $29 a month, alongside the daily digest of regulatory changes and the dashboard of what changed.
150 questions a day, on this site, over the API, or inside your own tools through the CASRAI MCP server.
Everything CASRAI publishes — this page, the dictionary, the guides and the news — stays free to read, with no account and no card.
How do GTF (GFF2-derived), GFF3 compare side by side?
The table below compares GTF (GFF2-derived), GFF3 across 10 procurement-relevant dimensions, from full name / lineage through conversion tools.
Side-by-side comparison
| Dimension | GTF (GFF2-derived) | GFF3 |
|---|---|---|
| Full name / lineage | Gene Transfer Format (GTF2.2) — an extension of GFF2 | Generic Feature Format version 3 — a ground-up redesign published by the Sequence Ontology project |
| Column 9 attribute syntax | key “value”; pairs, space-separated, each ending in a semicolon (gene_id “ENSG00000139618”; transcript_id “ENST00000380152”;) | key=value pairs separated by semicolons, e.g. ID=gene:ENSG00000139618;Name=BRCA2 |
| Required attributes | gene_id and transcript_id must be the first two attributes on every line | ID is required on any feature with children or that spans multiple lines; Parent is required on every child feature |
| How hierarchy is represented | Implicit — lines are grouped by sharing the same transcript_id/gene_id; no field explicitly declares exon-of-transcript or transcript-of-gene | Explicit — every child carries Parent=<ID of its parent>, forming a directed graph (gene → mRNA → exon/CDS) |
| Multi-parent features (shared exons) | Each exon line is tied to one transcript_id; an exon shared across transcripts must be repeated once per transcript | Parent accepts a comma-separated list, so one exon line can declare membership in several transcripts at once |
| Reading frame / phase (CDS) | Column 8 is called “frame” — 0, 1, 2, or “.” | Column 8 is called “phase” — required on every CDS feature, same 0/1/2 values with a spec-defined meaning |
| Feature-type vocabulary | Informal, fixed set (exon, CDS, 5UTR, 3UTR, start_codon, stop_codon, etc.) | Controlled, versioned Sequence Ontology (SO) terms |
| Typical primary source | UCSC downloads/Table Browser, Ensembl GTF track, Cufflinks/StringTie output | NCBI RefSeq/GenBank annotation releases, Ensembl GFF3 track, most genome browsers' native ingest |
| Common aligners/counters | STAR --sjdbGTFfile, featureCounts, htseq-count and Cufflinks/StringTie all default to GTF-style gene_id/transcript_id | The same tools generally accept GFF3 too, but need to be told which attribute (e.g. Parent) carries the gene/transcript ID — check the flag rather than assuming the default works |
| Conversion tools | gffread, AGAT and UCSC's genePred utilities convert GTF → GFF3 | gffread and AGAT convert GFF3 → GTF, but multi-parent exons, non-coding subtypes and custom attributes are not guaranteed to round-trip losslessly |
Common questions
Common questions about GTF (GFF2-derived) vs GFF3
Is GFF3 better than GTF?
+
For representing complex, multi-isoform gene models, GFF3's explicit ID/Parent hierarchy removes an ambiguity GTF only resolves implicitly through shared gene_id/transcript_id values. GTF remains the practical default for many RNA-seq quantification pipelines simply because more established tools were built around it first.
Can I just rename a .gtf file to .gff3?
+
No. Renaming the extension does not change the attribute syntax in column 9 — the file still contains key “value”; pairs, which a parser expecting GFF3's key=value syntax will fail to read correctly.
Which format does Ensembl provide?
+
Both. Ensembl publishes GTF and GFF3 downloads generated from the same underlying annotation release, so choosing one is a question of tool compatibility, not data completeness.
Does converting between GTF and GFF3 lose information?
+
It can. Converters like gffread and AGAT handle the standard gene/transcript/exon/CDS case well, but multi-parent exons, non-coding RNA subtypes, and custom attributes outside the standard set are the places a round-trip conversion most often drops or flattens data — verify a converted file against its source rather than assuming a clean conversion.








