#tor #arti #download #async


Bootstrap and update an accurate Tor network directory

23 unstable releases (11 breaking)

0.11.1 Sep 5, 2023
0.10.2 Jun 30, 2023
0.9.3 Mar 31, 2023
0.9.0 Nov 30, 2022
0.0.0 Jun 24, 2021

#13 in #download

Download history 236/week @ 2023-06-11 270/week @ 2023-06-18 281/week @ 2023-06-25 410/week @ 2023-07-02 172/week @ 2023-07-09 182/week @ 2023-07-16 163/week @ 2023-07-23 267/week @ 2023-07-30 214/week @ 2023-08-06 231/week @ 2023-08-13 208/week @ 2023-08-20 191/week @ 2023-08-27 312/week @ 2023-09-03 203/week @ 2023-09-10 217/week @ 2023-09-17 126/week @ 2023-09-24

871 downloads per month
Used in 12 crates (2 directly)


65K SLoC


Code to fetch, store, and update Tor directory information.


This crate is part of Arti, a project to implement Tor in Rust.

In its current design, Tor requires a set of up-to-date authenticated directory documents in order to build multi-hop anonymized circuits through the network.

This directory manager crate is responsible for figuring out which directory information we lack, downloading what we're missing, and keeping a cache of it on disk.

Compile-time features

  • mmap (default) -- Use memory mapping to reduce the memory load for reading large directory objects from disk.

  • routerdesc -- (Incomplete) support for downloading and storing router descriptors.

  • compression (default) -- Build support for downloading compressed documents. Requires a C compiler.

  • bridge-client: Provide APIs used to fetch and use bridge information.

  • full -- Enable all features above.

Non-additive features

  • static -- Try to link with a static copy of sqlite3.

Experimental and unstable features

Note that the APIs enabled by these features are NOT covered by semantic versioning[^1] guarantees: we might break them or remove them between patch versions.

  • experimental-api: Add additional non-stable APIs to our public interfaces.

  • dirfilter: enable an experimental mechanism to modify incoming directory information before it is used.

  • experimental: Enable all the above experimental features.

[^1]: Remember, semantic versioning is what makes various cargo features work reliably. To be explicit: if you want cargo update to only make safe changes, then you cannot enable these features.

License: MIT OR Apache-2.0


~833K SLoC