# Linguistic Annotation and Language Documentation Tools Compared

Source: https://www.potatoannotator.com/docs/guides/linguistic-annotation-tools-compared

**FieldWorks Language Explorer (FLEx), ELAN, Praat, and Toolbox are the standard programs for language documentation and phonetic labeling, and all four cost nothing to use. FLEx keeps a lexicon, interlinear texts, and a morphological parser in one project, ELAN aligns tiers of annotation to audio and video, and Praat measures and labels speech. Potato is a free, self-hosted alternative to FLEx and ELAN for the step where several people check the same glosses or tiers in a browser, on a Mac as well as on Windows or Linux, with agreement reported on time-aligned tiers.**

[Interlinear glossed text](https://en.wikipedia.org/wiki/Interlinear_gloss) (IGT) sets each sentence above a line that splits every word into morphemes and a line that glosses every morpheme, followed by a free translation. The [Leipzig Glossing Rules](https://www.eva.mpg.de/lingua/resources/glossing-rules.php) fix the conventions, with `-` between affixes, `=` before clitics, and grammatical categories in capitals such as `ACC` and `3SG`. In ELAN and Praat, a tier is one layer of annotation over a recording's timeline, such as words, phones, or tones. A Praat TextGrid has interval tiers, whose labels cover a stretch of time, and point tiers, whose labels mark a single instant. [Language documentation](https://en.wikipedia.org/wiki/Language_documentation) records a language and annotates the recordings and texts, usually for deposit in a language archive. [Inter-annotator agreement](https://en.wikipedia.org/wiki/Inter-rater_reliability) measures how often two or more annotators make the same decision about the same material.

This page covers glossing, morphology, tiered and phonetic labeling, and corpus annotation. [Audio Annotation Tools Compared](/docs/guides/audio-annotation-tools-compared) covers transcription, speaker diarization, and listening studies, and [Linguistics in Potato](/use-cases/linguistics) lists Potato's linguistics tasks in one place.

## Which linguistic annotation tools are worth comparing?

Every tool in the table is free to use. The tools differ in where each tool runs, in the kind of data each tool is built around, and in how several people share the work.

| Tool | Runs as | License | Suits |
|---|---|---|---|
| **[FLEx](https://software.sil.org/fieldworks/)** | Desktop app, with current releases for Windows | LGPL | A lexicon, interlinear texts, and a morphological parser in one project |
| **[Toolbox](https://software.sil.org/toolbox/)** | Desktop app | Free to use | SIL's older text-oriented database for field linguists, for projects that have not moved to FLEx |
| **[ELAN](https://archive.mpi.nl/tla/elan)** | Desktop app for Windows, macOS, and Linux | GPL-3.0 | Hierarchical, time-aligned tiers over audio and up to four videos, with an interlinearization mode |
| **[Praat](https://www.fon.hum.uva.nl/praat/)** | Desktop app for macOS, Windows, Linux, Raspberry Pi, and Chromebook | GPL-3.0-or-later | Acoustic measurement and TextGrid labeling |
| **[LaBB-CAT](https://github.com/nzilbb/labbcat-server)** | Web server you install | AGPL-3.0 | A store of recordings and time-aligned transcripts, with forced alignment through HTK |
| **[EMU-SDMS](https://ips-lmu.github.io/EMU.html)** | R packages, with a labeling app that runs in the browser | GPL-2.0-or-later (emuR) | Speech databases with hierarchical annotation and the EMU Query Language |
| **[INCEpTION](https://inception-project.github.io/)** | Web app you host | Apache-2.0 | Corpus annotation with part-of-speech, lemma, and dependency layers, and curation |
| **[Potato](/)** | Python web server configured in YAML, on your own computer or server | GPL-3.0-or-later | Several reviewers checking imported glosses or tiers, with assignment and agreement |

SIL's FieldWorks download page lists current releases under Windows and says that FieldWorks for Linux is no longer supported, apart from an older FieldWorks 9.0 package for Flatpak. SIL recommends FieldWorks over Toolbox and keeps Toolbox available for projects that do not want to switch.

## Which tool for which task

The table pairs each kind of linguistic work with the tools built for that work.

| Task | Good fits |
|---|---|
| Building a lexicon and parsing words into morphemes | FLEx |
| Glossing texts, one linguist at a time | FLEx, Toolbox, and ELAN's interlinearization mode |
| Glossing time-aligned recordings | ELAN, or FLEx with texts moved from and to ELAN |
| Pitch, formants, and other acoustic measurements | Praat and EMU-SDMS |
| Segmenting and labeling phones by one annotator | Praat, ELAN, and EMU-SDMS |
| Forced alignment of a speech corpus | LaBB-CAT |
| Searching a speech database by annotation | EMU-SDMS |
| Part-of-speech, lemma, and dependency annotation exported as CoNLL-U | INCEpTION |
| Several reviewers checking glosses imported from FLEx or Toolbox | Potato |
| Several annotators correcting the same tiers, with agreement between the annotators | Potato, and ELAN for pairs of tiers |
| Reviewing glosses on a Mac or in a phone's browser | Potato |

FLEx, ELAN, and Praat appear in most rows about analysis, because each program does the analysis itself. Potato appears where the analysis already exists and a team divides the checking among several people.

## Free FLEx and ELAN alternatives

FLEx and ELAN cost nothing. A reason to look elsewhere is the computer a team uses, the wish for a browser interface, or work shared among several people. SIL's beta companion app FieldWorks Lite edits a FieldWorks lexicon on Windows, Linux (as an alpha), and Android, with macOS and iOS listed as in progress. SIL's page for FieldWorks Lite lists entries, senses, and example sentences, and no interlinear texts. SIL's web dictionary tool Language Forge syncs with FLEx and is in maintenance mode, and SIL points Language Forge users to FieldWorks Lite. Toolbox is SIL's older text-oriented database for field linguists.

For time-aligned work, Praat and ELAN both run on macOS, Windows, and Linux. LaBB-CAT and EMU-SDMS run in a browser and suit a lab building a speech corpus, with forced alignment in LaBB-CAT and a query language in EMU-SDMS. INCEpTION runs in a browser and is built for text corpora.

A 2026 survey of 98 annotation tools for language documentation found 44 tools that are free and accessible, of which 15 support morpheme segmentation and glossing and 6 combine morphological annotation with remote collaboration at no cost ([Yang et al., 2026](https://aclanthology.org/2026.computel-1.9/)). Potato is built for a team reviewing glosses. Potato imports FLExText, Toolbox, ELAN, and TextGrid files as a project, assigns each sentence or recording to as many reviewers as the config sets, and exports the corrected work back to the same formats. Reviewers use a browser, and the glossing scheme also works in a phone's browser. Potato has no lexicon, no parser, and no agreement coefficient for glosses, and [what Potato does not do](#what-potato-does-not-do-for-linguistics) lists the other gaps.

## Several annotators and agreement by tool

The tools share work among several people in different ways. ELAN, INCEpTION, and Potato compute agreement between annotators.

| Tool | How several people share the work | Agreement |
|---|---|---|
| FLEx | A shared project through Send/Receive, built for several people adding to one lexicon | — |
| Toolbox | — | — |
| ELAN | No multi-user editing is described; the comparison reads tiers from one file or from several files | Modified Cohen's kappa, modified Fleiss' kappa, the Staccato algorithm, and a ratio of overlap to total extent, always on pairs of tiers |
| Praat | — | — |
| LaBB-CAT | One server with view-only, edit, and admin users | — |
| EMU-SDMS | Git and GitLab, with bundles of recordings assigned to annotators | — |
| INCEpTION | One server with annotator, curator, and manager roles, and a curation view for settling differences | Cohen's kappa, Fleiss' kappa, Krippendorff's alpha (nominal and unitizing), and gamma |
| Potato | One server; the config assigns each item to a set number of annotators, who work in a browser | Tiers: mean pairwise agreement on segments matched at a temporal IoU of 0.5, without chance correction. Spans: token-level kappa, span F1, character-level Krippendorff's alpha, and Mathet's gamma. Glosses: none |

A dash means we found nothing for the row in the tool's own documentation, checked on 2026-10-28. If a cell is wrong, [tell us](https://github.com/davidjurgens/potato/issues/new).

Potato's agreement on tiers compares every pair of annotators on each recording. A segment counts as matched when two annotators' segments overlap by at least half of the two segments' combined length, and a matched pair with different labels gets half credit. The figure appears on the admin dashboard at `/admin/iaa`, and [Agreement over Time](/docs/measurement/temporal-agreement) describes the measures for time segments. The `flextext` export writes one file per reviewer, and two reviewers' glosses can be compared from those files. Potato computes no coefficient for glosses itself. For student or crowd annotators, Potato recruits through Prolific or a SONA subject pool and runs a [training phase](/docs/features/training-phase) before the real items. [Running a Crowdsourced Study](/docs/guides/crowdsourcing-prolific-mturk) covers the setup.

## File formats and round trips

The table lists the formats a linguistics project usually moves between and what Potato 2.13.1 reads and writes for each format.

| Format | Written by | Potato import | Potato export |
|---|---|---|---|
| FLExText (`.flextext`) | FLEx; ELAN imports and exports FLEx files | Yes | Yes, one file per annotator |
| Toolbox standard format | Toolbox; ELAN imports and exports Toolbox files | Yes | Yes, one file per annotator |
| ELAN `.eaf` | ELAN | Yes, with the recording beside each file | Yes, one file per recording and annotator |
| Praat TextGrid | Praat; ELAN imports and exports TextGrids; EMU-SDMS converts TextGrid collections | Yes, interval and point tiers, with the recording beside each file | Interval and point tiers, one file per recording and annotator |
| CoNLL-U | INCEpTION imports and exports CoNLL-U with part of speech, lemma, morphological features, and dependencies | Named-entity spans only | Spans in the MISC column, with the other annotation columns left empty |
| Aligned IGT text and gb4e LaTeX | — | No | Yes, as `igt.txt` and `igt.tex` |

Re-importing a FLExText or Toolbox file that Potato exported gives the same words, segmentations, glosses, translations, and parts of speech. FLEx GUIDs and lexicon links do not come back, because Potato has no lexicon to link to. FLEx punctuation words and the morph types of some morphemes also change, and [Linguistic Fieldwork](/docs/guides/linguistic-fieldwork) lists each difference.

TextGrid and ELAN files come back with their tiers, point tiers, ELAN parent links, and participants. With several annotators, the `textgrid` and `eaf` exports write one file for each recording and annotator, so an adjudicated version is a separate step.

## Formats for language archives

Each language archive publishes the formats the archive accepts. [PARADISEC's file format page](https://www.paradisec.org.au/deposit/file-formats/) says an ELAN `.eaf` file can be deposited unchanged, ideally under the same name as the recording the file transcribes, and that FLEx data is exported to XML, one file for the lexicon and one for the texts. Potato's `flextext` export is the XML file for the texts, and the lexicon file still comes from FLEx. The `.eaf` export records the recording as `/media/<file>` on the Potato server. Link the recording again in ELAN before deposit.

## Checking forced-aligned phone boundaries in Potato

A forced aligner places word and phone boundaries automatically, and a phonetician then checks each boundary against the waveform. Two annotators on every recording give an agreement figure for the corrected boundaries. Potato imports a folder of TextGrids from the aligner as one project when each TextGrid sits beside a recording of the same name:

```bash
potato import -i aligned/ -o phones-project/
```

The config below has the shape that `potato import` writes for such a folder. `num_annotators_per_item` is added by hand, and the phone tier's labels list the phone inventory. When a tier has 30 or fewer distinct values, the importer makes those values the tier's labels. A tier of words with more distinct values gets one label named after the tier, and each word stays as the text of the word's segment.

```yaml
annotation_task_name: Phone boundary check
task_dir: .
output_annotation_dir: annotation_output/
data_files:
  - data/recordings.jsonl
item_properties:
  id_key: id
  text_key: text
user_config:
  allow_all_users: true
  users: []

# Two phoneticians check every recording for an agreement figure
num_annotators_per_item: 2

# The aligner's segments open as each annotator's starting point
pre_annotation:
  enabled: true
  field: predictions
  allow_modification: true

annotation_schemes:
  - annotation_type: tiered_annotation
    name: tiers
    description: Move each word and phone boundary onto the waveform, and fix wrong phone labels.
    source_field: audio_url
    media_type: audio
    tiers:
      - name: words
        tier_type: independent
        labels: [words]
      - name: phones
        tier_type: independent
        labels: [m, n, l, r, d, i, ɪ, e, ɛ, æ, ɑ, o, u, ʌ, ə]
```

Both tiers are independent because a TextGrid has no hierarchy between tiers. Annotators drag boundaries, relabel phones, and add or delete segments, and the admin dashboard reports agreement once two annotators have saved a recording. After any differences are settled, the export writes a TextGrid per recording for Praat:

```bash
python -m potato.export --config phones-project/config.yaml --format textgrid --output out/
```

For glossing instead of phones, `potato import -i stories.flextext -o glossing-project/` builds the project, and [Linguistics in Potato](/use-cases/linguistics#a-glossing-review-project) shows the glossing config.

## What Potato does not do for linguistics

- **No lexicon or morphological parser.** FLEx keeps the lexicon and parses words against the lexicon. Potato checks that each segmentation lines up with each gloss under the Leipzig rules, and Potato's exports contain no lexicon links.
- **No automatic glossing or forced alignment.** Potato's AI support has no prompt for the glossing or tiered schemes. Potato reads the TextGrid or CTM output of a forced aligner, and LaBB-CAT runs forced alignment itself through HTK.
- **Fixed words in the glossing scheme.** Reviewers correct the morpheme segmentation and the glosses of each word, and the words of the sentence come from the import.
- **No retyping of segment text on tiers.** The tiered scheme moves boundaries and assigns labels from each tier's list, with no box for typing a segment's text.
- **No agreement coefficient on glosses.** Agreement on glosses needs a separate comparison of the per-reviewer FLExText files.
- **No syntax in the CoNLL-U export.** Dependency arcs drawn with [span links](/docs/annotation-types/span-linking) stay in Potato's own output, and INCEpTION writes dependencies to CoNLL-U.
- **No acoustic analysis.** Acoustic measurements belong in Praat or EMU-SDMS.
- **Needs a server.** Someone installs Potato with `pip` and runs the server, on a laptop for one reviewer or on a shared machine for a team. A [Hugging Face Space](/docs/deployment/deploy-huggingface) is a hosted option.

Checked against each project's own documentation in October 2026.

## Frequently asked questions

### What is the best software for linguistic annotation?

FLEx is built for a lexicon and glossed texts, ELAN for time-aligned tiers over audio and video, Praat for phonetic analysis, and INCEpTION for part-of-speech and dependency annotation of a text corpus. All four are free. LaBB-CAT and EMU-SDMS suit a lab building a speech corpus. Potato suits the step after analysis, when several people review the same glosses or tiers in a browser and the project needs assignment of material to reviewers and agreement on tiers.

### Is there a Mac version of FLEx?

No. SIL's FieldWorks download page lists current releases for Windows, says FieldWorks for Linux is no longer supported, and offers no macOS release. SIL's beta lexicon editor FieldWorks Lite lists macOS as in progress and edits lexicons only. On a Mac, ELAN's interlinearization mode handles glossing, and Potato runs a glossing review in the browser from texts exported from FLEx.

### Can several people gloss the same texts and compare the glosses?

Yes, in Potato, where `num_annotators_per_item` sends each sentence to as many reviewers as the config sets and the `flextext` export writes one file per reviewer. Potato computes no agreement coefficient for glosses, and the reviewers' files are compared outside Potato. FLEx's Send/Receive lets several people add to one shared lexicon, and we found no comparison between people in FLEx's documentation.

### Can I move interlinear texts between ELAN and FLEx?

Yes. ELAN imports a `.flextext` file exported from FLEx and exports FLEx files. Potato reads and writes both FLExText and ELAN `.eaf`, but Potato does not convert glossed texts into time-aligned tiers or tiers into glossed texts.

## Further reading

- [Linguistics in Potato](/use-cases/linguistics), for the linguistics tasks in one place
- [Linguistic Fieldwork](/docs/guides/linguistic-fieldwork), for the FLEx, Toolbox, Praat, and ELAN workflow
- [Interlinear Glossed Text](/docs/annotation-types/interlinear-gloss)
- [Importing Projects](/docs/tools/importing-projects#praat-and-elan) and [Export Formats](/docs/features/export-formats#linguistics-and-speech)
- [Transcript Formats](/docs/annotation-types/transcript-formats)
- [Inter-Annotator Agreement](/docs/guides/inter-annotator-agreement)
- [Audio Annotation Tools Compared](/docs/guides/audio-annotation-tools-compared) and [Text Annotation Tools Compared](/docs/guides/text-annotation-tools-compared)
- Showcase designs for [SIGMORPHON interlinear glossing](/showcase/sigmorphon-interlinear-glossing), [DoReCo language documentation](/showcase/doreco-language-documentation), and [Universal Dependencies parsing](/showcase/ud-dependency-parsing)

## References

1. Yang et al. (2026). Annotation Tools for Language Documentation: A Survey of Capabilities, Gaps, and Morphological Support. *Proceedings of the Ninth Workshop on the Use of Computational Methods in the Study of Endangered Languages (ComputEL-9)*. https://aclanthology.org/2026.computel-1.9/
2. Comrie, Haspelmath, and Bickel. The Leipzig Glossing Rules. Max Planck Institute for Evolutionary Anthropology. https://www.eva.mpg.de/lingua/resources/glossing-rules.php
