#tor #daemon

sys libtor-sys

Rust crate that internally compiles Tor and its dependencies

11 releases (stable)

Uses old Rust 2015

44.6.0+ Nov 16, 2020
44.5.2+ Nov 1, 2020
44.5.1+ Oct 22, 2020
43.6.0+ Jul 20, 2020
4.2.6-5+ Mar 8, 2020

#21 in macOS APIs

Download history 13/week @ 2020-08-07 24/week @ 2020-08-14 20/week @ 2020-08-21 25/week @ 2020-08-28 34/week @ 2020-09-04 10/week @ 2020-09-11 19/week @ 2020-09-18 27/week @ 2020-09-25 51/week @ 2020-10-02 12/week @ 2020-10-09 30/week @ 2020-10-16 18/week @ 2020-10-23 39/week @ 2020-10-30 35/week @ 2020-11-06 37/week @ 2020-11-13 14/week @ 2020-11-20

111 downloads per month
Used in libtor

MIT license

348K SLoC

C 325K SLoC // 0.2% comments Shell 12K SLoC // 0.2% comments Python 6K SLoC // 0.3% comments Automake 3.5K SLoC // 0.1% comments Rust 468 SLoC // 0.1% comments Perl 409 SLoC // 0.1% comments Q 304 SLoC PHP 114 SLoC Lua 77 SLoC // 0.1% comments

libtor-sys Continuous integration

This library compiles Tor and a few dependencies (zlib, libevent and openssl) into a single Rust library that can be imported like any other Rust crate into existing projects. This provides a way to use Tor without having to ship/download extra binaries - on platforms that allows running them - while for some other platforms like iOS and newer Android versions this is the only way to run Tor since the OS straight up doesn't allow exec'ing binaries.

Keep in mind that the interface exposed here is very very "low-level" (literally just what's in tor_api.h). Another crate wrapping all of these parts with a nice Rust interface will be released separately.

By default this library only compiles with the minimal set of libraries needed to run Tor, namely OpenSSL, Libevent and Zlib. The with-lzma and with-zstd features can be used to enable the respective compression algorithms, and the vendored-lzma and vendored-zstd features can be used to compile and like those libraries statically instead of using the one provided by your system.

Supported platforms

The currently supported platforms are:

  • Linux (tested on Fedora 30 and Ubuntu Xenial)
  • Android through the NDK
  • MacOS
  • iOS
  • Windows cross-compiled from Linux with mingw

Coming Soon ™️:

  • Windows (natively built)

Build gotchas

Command examples to cross-compile for multiple platforms are available in CROSS_COMPILING.md.


Building on a UNIX-like os shouldn't be too hard, a cargo build should normally work. Keep in mind that you will need all the "usual" build tools, like a compiler, automake, autoconf, make, in your PATH. On macOS you can install those tools using brew.

If you get an aclocal-1.15 not found or something similar, try to cd into libevent-src and run autoreconf --force --install. Repeat in tor-src if you get the same issue there, and then re-cargo build.


Cross-compiling for Android is fairly straightforward, just make sure that you have the NDK toolchain in your PATH. If you do so, cargo build will use the right compiler targeting the minimum supported sdk version of the NDK you are using (generally 16 for armv7 and 21 for everything else).


Cross-compiling for iOS on a Mac that has the Xcode Command Line Tools installed should work out of the box.

Windows (MingW)

Cross-compiling for Windows using MingW should also work out of the box, as long as you have the right compiler and the required libraries installed. To link the library into binaries it's generally required to also install the static version of libwinpthreads.


~97K SLoC