Open-source project
DO-SAY-GO/tdf avatar
DO-SAY-GO/tdf

TDF (Tree Document Format): a paid capture app and a free replay app for offline web archives

🌱 TDF - Tree Document Format - a universal file format for web collections

3,910 stars145 forksJavaScriptNOASSERTION

At a glance

What is it?
TDF replaces DownloadNet's Chrome-only CDP interception with a WebDriver BiDi capture architecture, storing each browsing session as a single SQLite-based .tdf file. This article covers what it does, how it installs, and why the repository is no longer the open source codebase it once was.
Who is it for?
Adopt TDF if you need deterministic, blocking capture of a browsing session into one portable file and you accept a paid, closed-source Grower with a 3-year term and up to 3 devices. Do not adopt it if you need an open source archiver, a headless Linux pipeline, or Safari coverage, since the README puts Safari support behind an Apple WebDriver BiDi network module that has not shipped.
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 22 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

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

Editorial analysis

What TDF solves, and who it is actually for

A live browsing session is hard to keep. Pages pull in scripts, stylesheets, fonts, JSON endpoints and images from many origins, and a normal save or a screenshot throws most of that away. TDF, short for Tree Document Format, captures the resources a session actually fetches into one portable `.tdf` archive and replays that archive locally without a proxy, without a cloud service and without re-fetching anything. The README describes replay as byte-for-byte.

The audience is narrower than the topic list suggests. TDF ships as two native Rust binaries with a GUI: Tree Grower captures, Tree Player replays. Grower is a paid product; Player is free to download and use, so a `.tdf` file can be handed to someone who has not paid. That split is the point of the product. If you are assembling evidence from pages that may change or disappear, or you need to hand a frozen copy of a session to a colleague, the one-file collection is the useful part. If you want a library to call from your own pipeline, this is not that.

From CDP interception to WebDriver BiDi: how capture works now

The mechanism changed between dn and TDF, and the README is explicit about it. DownloadNet intercepted responses inside Chrome's own fetch cycle over the Chrome DevTools Protocol, which made it Chrome-only. TDF's Grower drives an installed browser over WebDriver BiDi or CDP, so Chrome, Firefox and the Chromium family are in scope while the browser stays the source of truth.

The second change is capture timing. The README says each response is paused in the browser, its body read through the automation protocol, stored, then released. That is blocking capture, and it is a different guarantee from a cache that races the page. A cache is best-effort: the page may finish, or the connection may close, before the body is copied. Holding the response until the body is read makes the archive deterministic, at the cost of slowing the browsing session you are capturing.

On disk, a `.tdf` is a compressed SQLite database with indexed, deduplicated bodies, optionally encrypted with AES-256-GCM. Deduplication matters because shared assets repeat across a session, and SQLite gives replay an index to look up bodies instead of scanning. The README does not document the schema, so anyone hoping to read a `.tdf` without Player is working from the file format itself.

Installing TDF and capturing your first archive

The README gives one install path per platform and points to a downloads page with checksums. On macOS or Linux the install script is piped into bash:

bash
curl -fsSL https://trees.dosaygo.com/install.sh | bash

On Windows the equivalent is a PowerShell one-liner:

powershell
irm https://trees.dosaygo.com/install.ps1 | iex

Both fetch from trees.dosaygo.com, which the README also lists as the place to find downloads and checksums. Piping a remote script into a shell means you are trusting the host at that moment; the checksum page exists for people who would rather verify a binary than run a script.

The first real use is a capture, not a command. Launch Grower, let it drive your installed browser, browse the pages you want in the archive, and stop the capture when the session is done. Because capture is blocking, expect the session to feel slower than normal browsing. The output is a single `.tdf` file you can move or share. To read it, open it in Tree Player, which is free and replays from disk. The README does not document a command-line capture mode, a headless mode, or a way to script Grower, so treat this as a GUI workflow.

The licensing turn: this repo is no longer an open source codebase

The most important fact about this repository is in the README, not in the code. It states plainly that the repo is no longer an open source codebase and is now the public home of the TDF product line plus the permanent archive of dn. The TDF apps are closed-source, proprietary software. The GitHub licence field reports NOASSERTION, which is consistent with a repository that contains a product README and a `legacy/` directory rather than a single licensed codebase.

Grower is a paid product: the README quotes $39 one-time at launch with a 3-year licence term and up to 3 devices, activated offline and bound to the device. Player is free. Anyone who found this project through its archive and web-archive topics should recalibrate, because a tool that used to be installable from npm is now a purchase with a term limit. The README directs readers to trees.dosaygo.com/license.html and trees.dosaygo.com/terms.html for full details, and those pages, not the launch price in the README, are what a buyer should read.

The old code has not vanished. DownloadNet is preserved unmodified in `legacy/`, with its own README, its final release v4.5, and a note that `npm i -g downloadnet` still works. The README says dn is no longer developed or supported and remains under its existing PolyForm Strict licence, with a NOTICE file alongside it.

Where TDF is the wrong tool

Safari is not supported. The README lists it on the roadmap and ties it to Apple shipping the WebDriver BiDi `network` module in safaridriver. Until that happens, a capture workflow that depends on Safari is out of scope, and that is a platform decision made outside this project's control.

There is also no server. The README frames the move to native apps partly as removing the need for Node, npm and a server on `localhost:22120`, which was how dn worked. That is a simplification for end users and a loss for anyone who built around dn's local HTTP surface. If your archiving runs in CI, on a headless box, or behind an API you call from another service, TDF's GUI capture model does not fit, and the README documents no replacement interface.

Finally, the paid boundary sits on the wrong side for some teams. Reading is free, so distribution is easy, but every person who needs to create an archive needs a Grower licence with a 3-year term and a 3-device cap. An organisation that captures continuously across many machines should price that out before standardising, because the licence is device-bound and offline-activated rather than seat-based in the usual sense.

Choosing between TDF and the dn code in legacy/

The real alternative here is not another vendor. It is DownloadNet itself, still sitting in `legacy/`. The difference in approach is concrete. dn intercepted responses inside Chrome's fetch cycle over CDP, so it was Chrome-only, and it ran as a Node application with a server on `localhost:22120`. TDF drives multiple browsers over WebDriver BiDi or CDP, pauses each response before releasing it, and ships as native Rust binaries with no Node and no local server.

That trade cuts both ways. dn is the open source path: PolyForm Strict, unmodified, installable with `npm i -g downloadnet`, and unsupported. TDF is the supported path: multi-browser, deterministic capture, a single encrypted archive file, and a paid Grower. If you need to modify the archiver, only one of these is available to you, and the README is clear that dn is no longer developed. If you need replay to be reliable and the capture to be repeatable, the newer architecture is the one being maintained.

One thing neither option offers is a documented path from a `.tdf` archive back into dn, or a documented schema for reading `.tdf` outside Player. Migration between the two formats is not described.

Maintenance, upgrades and what the release history shows

The repository's last push was on 2026-09-09, and it is not archived, so the public home is being touched. That says nothing about the cadence of the closed-source apps, which ship outside this repo. The release list is a better signal: v4.5.2 in May 2025, v4.2.5 in August 2024, and v4.1.1 earlier that same month. The gaps are irregular, and the v4.5.2 tag is labelled the official v4.5 release, which aligns with the README's statement that v4.5 is the final dn release.

Upgrade cost is mostly a licensing question rather than a technical one. The README quotes a 3-year licence term for Grower, so the relevant question is what happens at the end of that term, and the README does not say. It points to the licence and terms pages instead. There is no documented migration path between `.tdf` format versions, and no stated compatibility guarantee for archives written by older Grower builds. If long-term readability of your archives matters, that is the gap to raise with the vendor before you commit a collection to the format.

On licensing implications, the split is simple to state and worth stating: Player is free to download and use, Grower is paid and closed source, and the dn code under `legacy/` stays under PolyForm Strict, which is not an OSI-approved open source licence. Whether that matters to you depends on what you plan to do with the code, and a lawyer is the right person to ask, not this article.

Editorial conclusion

Adopt TDF if you need deterministic, blocking capture of a browsing session into one portable file and you accept a paid, closed-source Grower with a 3-year term and up to 3 devices. Do not adopt it if you need an open source archiver, a headless Linux pipeline, or Safari coverage, since the README puts Safari support behind an Apple WebDriver BiDi network module that has not shipped. Before buying, verify the current price and licence terms at trees.dosaygo.com/license.html and trees.dosaygo.com/terms.html rather than the $39 launch figure, and confirm that your browser is one Grower drives over WebDriver BiDi or CDP.

Frequently asked questions

What does TDF mean?

TDF stands for Tree Document Format, the archive format used by the TDF product line from DOSAYGO. A .tdf file is a compressed SQLite database containing the resources captured from a browsing session, optionally encrypted with AES-256-GCM.

Is TDF open source?

No. The README states that the repository is no longer an open source codebase and that the TDF apps are closed-source, proprietary software. The older DownloadNet code is preserved unmodified in the legacy/ directory under its existing PolyForm Strict licence.

How much does Tree Grower cost, and is Tree Player free?

The README quotes $39 one-time at launch for Tree Grower, with a 3-year licence term covering up to 3 devices and offline, device-bound activation. Tree Player is free to download and use, so anyone can open a .tdf archive.

Which browsers does TDF support?

Tree Grower drives Chrome, Firefox and the Chromium family over WebDriver BiDi or CDP, according to the README. Safari support is listed as a roadmap item, pending Apple shipping the WebDriver BiDi network module in safaridriver.

Can I still install DownloadNet with npm?

Yes. The README says npm i -g downloadnet still works, and dn v4.5 remains available in the legacy/ directory. The README also states that dn is no longer developed or supported.

Official sources

  1. DO-SAY-GO/tdf on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/do-say-go-tdf.svg)](https://hysenlabs.com/projects/do-say-go-tdf)