Library / SDK
stanfordnlp/stanza avatar
stanfordnlp/stanza

Stanza: A Python Pipeline for 60+ Language Neural NLP

Stanford NLP Python library for tokenization, sentence segmentation, NER, and parsing of many human languages

7,877 stars960 forksPythonNOASSERTION

At a glance

What is it?
Stanza is Stanford NLP's Python library for tokenization, sentence segmentation, NER, and dependency parsing across many human languages, with a Java CoreNLP bridge. It is a good fit for multilingual annotation work where you want pretrained models without training your own, but model downloads and PyTorch weights make it heavier than a rule-based tokenizer.
Who is it for?
Adopt Stanza if you need pretrained tokenization, sentence segmentation, NER, or dependency parsing for a language you cannot train yourself, and you can accept multi-hundred-megabyte model downloads and a PyTorch dependency. Do not adopt it if you only need English tokenization and part-of-speech tagging at low latency, or if you cannot ship model weights in your deployment artifact.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Stanza Is For, and Who Should Reach for It

Stanza's stated purpose is running natural language processing tools on 60+ languages and accessing the Java Stanford CoreNLP software from Python. That framing matters. The library is not a general text-cleaning toolkit. It is a wrapper around pretrained neural models for a fixed set of annotation tasks: tokenization, sentence segmentation, named entity recognition, and parsing, with lemmatization appearing in the release notes. The README also mentions support for part-of-speech tagging through the CoreNLP client and the neural pipeline.

The audience is researchers and engineers who need annotation for languages where they cannot train a model themselves. A team building an English-only search index has plenty of lighter options. A team processing Swahili, Tamil, or Ukrainian dependency structure has far fewer, and that gap is where Stanza earns its place. The README's own reference section is telling: the primary citation is an ACL 2020 system demonstration paper, and the project asks users to cite the biomedical and clinical model paper if they use those packages. This is academic infrastructure first, production library second.

The Neural Pipeline and the CoreNLP Client Are Two Different Things

Stanza ships two distinct paths, and conflating them leads to wrong expectations. The first is the PyTorch neural pipeline, implemented in the repository and attributed in the README to Peng Qi, Yuhao Zhang, and Yuhui Zhang. The second is a client that talks to the Java Stanford CoreNLP software. The README notes that the CoreNLP client is mostly written by Arun Chaganty and that Jason Bolton led merging the two projects.

The practical consequence is that the Python pipeline runs in-process with PyTorch, while the CoreNLP path requires a Java backend reachable from your Python code. If you see a Stanza feature documented on the CoreNLP site, do not assume it exists in the pure-Python pipeline. The README explicitly separates the two, and the citation instructions differ depending on which one you use.

The release notes reinforce how much of the project is the Python side. Version 1.13.0 mentions using huggingface_hub for downloads and efficiency gains in the constituency parser. Version 1.14.0 mentions lemmatizer efficiency updates and security fixes. Version 1.12.2 was a weights_only security fix. That last one is worth reading twice: it concerns how PyTorch loads serialized model weights, which is a supply-chain concern rather than an accuracy concern.

Installing Stanza and Running Your First Pipeline

The README gives three installation routes. The pip route is a single command:

pip install stanza

That pulls in PyTorch 1.3.0 or above as a dependency, so budget for a large install. To upgrade an existing install:

pip install stanza -U

The Anaconda route is:

conda install -c stanfordnlp stanza

The README adds a caveat here: installing via Anaconda does not work for Python 3.10, and pip is the recommended path for that version. For development work, the source route is:

git clone https://github.com/stanfordnlp/stanza.git cd stanza pip install -e .

The first pipeline run is short. The README shows:

import stanza stanza.download('en') nlp = stanza.Pipeline('en') doc = nlp("Barack Obama was born in Hawaii. He was elected president in 2008.")

The comment on the download line describes it as optional because the pipeline can auto-download models if they are missing. Treat that as a convenience, not a deployment strategy. If your environment has no outbound network access at runtime, call stanza.download explicitly during image build for every language code you need, and pin the library version so the model URLs do not shift underneath you. The move to huggingface_hub for downloads in 1.13.0 is exactly the kind of change that can alter where artifacts come from.

Model Downloads, Memory, and the Cost of Multilingual Coverage

The 60+ language claim is real in the sense that the models exist, but each language package is a separate download. A pipeline for one language is a modest memory footprint. A pipeline that loads a dozen languages is not, because each one brings its own PyTorch modules. The README does not publish per-language model sizes, so you should measure the download and resident memory for your own language set rather than assuming a fixed number.

The biomedical and clinical English packages are a separate axis. The README describes them as a new collection of model packages for syntactic analysis and named entity recognition over biomedical literature and clinical notes, documented on a dedicated biomedical page. These are domain-specific English models, not additional languages. If your text is clinical notes, the general English package is the wrong choice, and the biomedical page is the place to check what is actually released.

One thing the README does not address is throughput. There is no statement about batch sizes, GPU versus CPU expectations, or tokens per second. For a neural pipeline that runs several models in sequence, that silence is the biggest unknown for anyone sizing an ingestion job.

Where Stanza Is the Wrong Tool

The clearest failure mode is scope mismatch. If you need coreference resolution, relation extraction, or sentiment, the README's task list does not include them, and you would be pushing Stanza into work it was not built for. The CoreNLP client may expose more, but that reintroduces a Java service.

A second case is latency-sensitive serving. Every annotation task runs a neural model. For a request path where you only need to split text into sentences, a rule-based splitter will be orders of magnitude cheaper, and the README offers no argument otherwise.

A third case is constrained deployment. Stanza is a Python library with a PyTorch dependency and downloaded weights. If your target is a small container, a mobile binary, or an environment where you cannot fetch artifacts at install time, Stanza adds friction that a pure-Python tokenizer does not. The security fixes in 1.12.2 and 1.14.0 also mean that old pinned versions carry known issues, so freezing a version indefinitely is not free either.

Finally, licence status deserves attention. The repository metadata reports NOASSERTION, meaning GitHub could not classify the licence automatically. The README does not restate the licence terms. Read the actual licence file before shipping, and note that the models and the code may not be covered by the same terms.

How Stanza Differs From spaCy

spaCy is the natural comparison for a Python NLP pipeline, and the difference is in what each project optimizes. spaCy centers on a small set of high-quality pipelines with a strong emphasis on speed and a stable production API, and its model lineup is concentrated on a smaller number of languages. Stanza centers on breadth: 60+ languages, a shared annotation scheme tied to Universal Dependencies, and a direct bridge to Stanford CoreNLP for users who need the Java toolchain's extra components.

The practical split is this. If your languages are well covered by spaCy and you care about inference speed and a compact dependency tree, spaCy is the lower-friction choice. If your language is not in spaCy's set, or you specifically want CoreNLP's Semgrex and Ssurgeon graph query tools (the README cites a 2023 GURT paper on those), Stanza is the path that gets you there from Python. The two are not mutually exclusive, but running both in one service doubles your model footprint for overlapping tasks.

Maintenance, Upgrades, and What to Verify First

The release cadence visible in the supplied material is steady: 1.12.2 in June 2026, 1.13.0 in June 2026, and 1.14.0 in July 2026, with the last push to the repository in September 2026. The project is not archived, and the README states that maintenance is currently led by John Bauer. That is a single-maintainer signal on a library that many research groups depend on, and it is worth weighing if you plan to build on it for years.

Upgrade cost is mostly in the models, not the API. The download mechanism changed in 1.13.0 to use huggingface_hub, and two recent releases contain security fixes. That combination means upgrades are not purely cosmetic. A reasonable practice is to pin the Stanza version and the downloaded model artifacts together, then re-run your own evaluation set when you move versions, because the release notes mention parser and lemmatizer efficiency changes that can alter outputs.

Before adopting, verify three things: that a released package exists for each language you need, that the biomedical or clinical documentation covers your domain if you are working with medical text, and what the licence file actually says given the NOASSERTION metadata. If all three check out and you can absorb the model download and PyTorch footprint, Stanza is one of the few Python options that gives you dependency parsing across that many languages without training anything yourself.

Editorial conclusion

Adopt Stanza if you need pretrained tokenization, sentence segmentation, NER, or dependency parsing for a language you cannot train yourself, and you can accept multi-hundred-megabyte model downloads and a PyTorch dependency. Do not adopt it if you only need English tokenization and part-of-speech tagging at low latency, or if you cannot ship model weights in your deployment artifact. Before committing, verify that your target languages are actually covered by a released package, check the licence file in the repository since the GitHub metadata reports NOASSERTION rather than a named licence, and confirm which Stanza version your biomedical or clinical models were validated against, because the README points to a separate documentation page for those packages.

Official sources

  1. Issues
  2. Project website
  3. README
  4. Releases
  5. stanfordnlp/stanza on GitHub
Community notes

Community notes