Trafilatura and Its Forks and Ports
The Trafilatura family spans a Python toolkit, Go and Rust implementations, and an offline TypeScript engine. Compare their inputs, outputs, and runtime boundaries before selecting one. A port reimplements behavior in another language; a fork continues and changes an existing codebase.
Trafilaturacore is a direct port of the Python original rather than a fork of another port. It is also a bounded offline engine, while Markdownee adds the browser, crawler, and format-conversion layers around it.
The family at a glance
Trafilaturacore is ported from Python Trafilatura v2.2.0; go-trafilatura serves only as a DOM translation aid. Markdownee sits beyond the offline engine boundary.1
Status and versions below were checked on July 20, 2026; the Trafilatura and go-trafilatura rows on August 31, 2026.
| Project | Language / runtime | Scope | Fetching / crawling | Main content output | Distinguishing behavior | License | Status |
|---|---|---|---|---|---|---|---|
| Trafilatura | Python 3.10+ | Full toolkit and CLI | Downloads, URL discovery, crawling | TXT, Markdown, CSV, JSON, HTML, XML, TEI | Canonical extraction and metadata behavior | Apache-2.0 from v1.8.0; earlier GPLv3+ | Production/Stable; v2.2.0234 |
| go-trafilatura | Go | Package and network-capable CLI | URL, batch, feed, sitemap | HTML by default; text and JSON options | Compatibility goal with Go-specific fallbacks | Apache-2.0 | Stable enough for use per its README; v1.12.2 installable, v2.0.0 tagged only567 |
| rs-trafilatura | Native Rust | Library and stdin-to-JSON executable | Supplied HTML; optional Spider integration | Plain text first; optional HTML, Markdown, metadata | Seven-type, page-aware extraction with ML classification | MIT OR Apache-2.0 | Crate 0.2.2; latest GitHub tag v0.1.1891011 |
| Trafilaturacore | Pure TypeScript, runs on Node | Offline extraction engine | None | Cleaned HTML plus metadata | Direct port of Python Trafilatura v2.2.0 | Apache-2.0 | Alpha; manifest 0.0.0-alpha.0; no public release tag112 |
Trafilatura: the Python original
Adrien Barbaresi created the canonical Trafilatura project during PhD work in linguistics and natural language processing, initially to build research text databases at the Berlin-Brandenburg Academy of Sciences. The 2021 ACL system-demonstration paper describes the same corpus-building context.1314
The current project is broader than an extraction function. It discovers and crawls URLs, downloads pages, accepts saved HTML, extracts main text, comments, and metadata, preserves document structure, and serializes several text and markup formats.2 Version 2.2.0 was released on July 31, 2026. Current packaging labels the project Production/Stable and requires Python 3.10 or newer.4
Trafilatura's present license is Apache-2.0. Releases before v1.8.0 used GPLv3+; that historical boundary matters when auditing copied or vendored older code.3
go-trafilatura: compatibility with substitutions
go-trafilatura ports Trafilatura into Go and deliberately mirrors much of the Python project's structure. Its goal is compatible extraction, not byte-for-byte identity. The documented departures include Go implementations of Readability and DOM Distiller for fallbacks, JSON decoding for JSON-LD instead of the Python regex path, support for custom fallback candidates, and HTML-oriented formatting.5
The package extracts supplied HTML. Its CLI adds downloading plus file, URL-list, feed, and sitemap modes; HTML is the default output, with text and JSON options.6 The v2.0.0 release tracks Python Trafilatura 2.0.0, so it does not yet claim parity with the current Python 2.2.0 release. That tag is also not installable: its go.mod keeps the unsuffixed module path, which Go's semantic import versioning rejects, so go get resolves to v1.12.2.7
rs-trafilatura: page-aware Rust extraction
rs-trafilatura describes itself as a Rust port of Trafilatura and go-trafilatura; its main extraction logic identifies go-trafilatura as the immediate porting source.8 It adds page-aware profiles for article, forum, product, collection, listing, documentation, and service pages. The active classifier combines URL heuristics, HTML signals, and machine learning, returning a page type and classification confidence.9
That ML role needs a narrow description. In the reviewed 0.2.2 source, the live path calculates extraction quality with a heuristic function. A separate ML-quality function remains defined but has no call site, so an extraction-quality score should not be described as a current ML prediction.15
The primary APIs accept HTML strings or bytes rather than fetching pages. An optional feature accepts already-fetched Spider pages; it is an integration point, not a built-in crawler. Results center on plain text and can also carry HTML, GitHub-flavored Markdown, comments, images, metadata, and classification details.10 The crate registry reports 0.2.2, while GitHub's newest tagged release is still v0.1.1; both facts are needed to describe its current release state accurately.11
Another Rust port
The named projects are not an exhaustive list. nchapman/trafilatura-rs is a separate Apache-2.0 Rust port that follows go-trafilatura, offers library extraction and an optional network-capable CLI, and publishes bindings for several languages. Trafilaturacore's attribution record says this project was consulted but none of its code ships in Trafilaturacore.161
Trafilaturacore: a bounded Node engine
Trafilaturacore is an open-source pure-TypeScript port that runs anywhere Node runs, with no native module to install. Its lineage is single-sourced: the extraction core and the metadata reader are ported from Python Trafilatura v2.2.0, and go-trafilatura is consulted only as a DOM translation aid where Python's lxml idioms need a DOM equivalent.1
Trafilaturacore adds an HTML output stage. It ships no machine-learning model, no page-type taxonomy, and no classification output; the only page type it reports is the one a page declares in its own OpenGraph or JSON-LD metadata.
This alpha engine accepts HTML plus optional URL context and returns one cleaned-HTML string with metadata. It does not fetch or render pages, and it does not itself convert content to Markdown, plain text, or JSON. A JSON CLI envelope does not change that content-output boundary.12
Where Markdownee begins
Markdownee depends on Trafilaturacore, not directly on rs-trafilatura. Its Crawlee and Playwright layer fetches and, when necessary, renders pages. The extraction package sends that HTML through Trafilaturacore once; a separate conversion package turns the cleaned HTML into txt, markdown, readable html, or minified-html.17
This separates code lineage from runtime dependency: Trafilaturacore ports the Python original, and Markdownee consumes Trafilaturacore as its engine.
One benchmark, one dataset
The archived ScrapingHub article-extraction benchmark is the narrow comparison retained here. This vendor-authored test uses 181 stored HTML pages, article-body ground truth, and a four-token-shingle evaluator. Precision and recall are normalized per page before averaging; ± is a bootstrap-estimated standard deviation from resampled pages, not a confidence interval.18
Results below are third-party implementation results retrieved July 20, 2026. They measure only the listed revisions on this article set.18
| Implementation tested | Tested revision | Precision | Recall | F1 |
|---|---|---|---|---|
| Trafilatura | 2.0.0 | 0.938 ± 0.009 | 0.978 ± 0.006 | 0.958 ± 0.006 |
| go-trafilatura | ae7ea06 | 0.940 ± 0.009 | 0.980 ± 0.006 | 0.960 ± 0.007 |
| rs-trafilatura | 9261e08 | 0.951 ± 0.006 | 0.990 ± 0.003 | 0.970 ± 0.004 |
The rs-trafilatura README separately reports F1 0.966 from its project run. The table uses the benchmark archive's committed 0.970 row so all three values share one provenance and method.19 These small differences do not establish general superiority: the set covers article-body extraction, not metadata, crawling, other page types, or current releases.
Trafilatura's ACL and documentation evaluations use different document sets and segment-based labeling; WCXB spans seven page types and uses word-overlap scoring. Figures from those datasets cannot be ranked against the ScrapingHub table.2021 Trafilaturacore is not a row in this benchmark, and no Python, Go, or rs-trafilatura result transfers to Trafilaturacore or Markdownee.
Choosing by boundary
- Python Trafilatura provides discovery, downloading, extraction, metadata, and several serialized formats in one toolkit.
- go-trafilatura provides a Go package and network-capable CLI, with the fallback and formatting differences documented above.
- rs-trafilatura provides native Rust extraction with page-type classification and optional Spider integration.
- Trafilaturacore serves Node applications that supply HTML and need cleaned HTML from an alpha engine.
- Markdownee adds fetching, browser rendering, crawling, storage, and format conversion around that engine.
Citations
-
Trafilaturacore: compact third-party notices and porting notes. Retrieved July 31, 2026. ↩ ↩2 ↩3 ↩4
-
Trafilatura: Python usage and output documentation. Version 2.2.0 documentation. Retrieved August 31, 2026. ↩ ↩2
-
Trafilatura: current and historical license statement and v1.8.0 release. Retrieved July 20, 2026. ↩ ↩2
-
Trafilatura: v2.2.0 release and current package metadata. Retrieved August 31, 2026. ↩ ↩2
-
go-trafilatura: Compatibility goal and documented differences. Retrieved July 20, 2026. ↩ ↩2
-
go-trafilatura: CLI inputs and output formats and library HTML input. Retrieved July 20, 2026. ↩ ↩2
-
go-trafilatura: Current status statement, v2.0.0 release, current manifest, and Apache-2.0 license. Retrieved July 20, 2026. The Go module index reports v1.12.2 as the latest version, and the v2.0.0 manifest still declares the unsuffixed module path, so the proxy rejects that tag under semantic import versioning. Retrieved August 31, 2026. ↩ ↩2
-
rs-trafilatura: README lineage statement and extraction-source attribution. Retrieved July 20, 2026. ↩ ↩2
-
rs-trafilatura: Seven page types and profiles and active classifier. Retrieved July 20, 2026. ↩ ↩2
-
rs-trafilatura: HTML APIs, optional Spider integration, and result fields. Retrieved July 20, 2026. ↩ ↩2
-
rs-trafilatura: Cargo manifest and dual license, published 0.2.2 documentation, and latest tagged GitHub release v0.1.1. Retrieved July 20, 2026. ↩ ↩2
-
Trafilaturacore: README scope and alpha status, package manifest, and public release list. Retrieved July 20, 2026. ↩ ↩2
-
Adrien Barbaresi: Trafilatura repository project history. Retrieved July 20, 2026. ↩
-
Adrien Barbaresi: Trafilatura: A Web Scraping Library and Command-Line Tool for Text Discovery and Extraction. ACL-IJCNLP System Demonstrations, 2021. ↩
-
rs-trafilatura: Active heuristic quality call, uncalled ML-quality function, and heuristic field documentation. Retrieved July 20, 2026. ↩
-
nchapman/trafilatura-rs: Lineage, scope, outputs, and bindings and Apache-2.0 license. Retrieved July 20, 2026. ↩
-
Markdownee: Repository architecture, crawler implementation, extraction wrapper, and separate format conversion. Retrieved July 20, 2026. ↩
-
ScrapingHub: Vendor-authored technical report, archived article-extraction results and data provenance, four-token-shingle scoring, and bootstrap standard deviations. Retrieved July 20, 2026. ↩ ↩2
-
rs-trafilatura: Project-reported ScrapingHub result. Retrieved July 20, 2026. ↩
-
Trafilatura: ACL and later internal evaluation datasets. Retrieved July 20, 2026. ↩
-
Web Content Extraction Benchmark: Dataset composition and word-overlap evaluation. Retrieved July 20, 2026. ↩
Updated: August 31, 2026