Skip to main content

Twisted-based Tor controller client, with state-tracking and configuration abstractions.

Project description

github-actions coveralls codecov ReadTheDocs ReadTheDocs Code Health


Ten Thousand Feet

txtorcon is an implementation of the control-spec for Tor using the Twisted networking library for Python.

This is useful for writing utilities to control or make use of Tor in event-based Python programs. If your Twisted program supports endpoints (like twistd does) your server or client can make use of Tor immediately, with no code changes. Start your own Tor or connect to one and get live stream, circuit, relay updates; read and change config; monitor events; build circuits; create onion services; etcetera (ReadTheDocs).

Some Possibly Motivational Example Code

download (also python2 style)

from twisted.internet.task import react
from twisted.internet.defer import inlineCallbacks, ensureDeferred
from twisted.internet.endpoints import UNIXClientEndpoint

import treq
import txtorcon

async def main(reactor):
    tor = await txtorcon.connect(
        UNIXClientEndpoint(reactor, "/var/run/tor/control")

    print("Connected to Tor version {}".format(tor.version))

    url = u''
    print(u"Downloading {}".format(repr(url)))
    resp = await treq.get(url, agent=tor.web_agent())

    print(u"   {} bytes".format(resp.length))
    data = await resp.text()
    print(u"Got {} bytes:\n{}\n[...]{}".format(

    print(u"Creating a circuit")
    state = await tor.create_state()
    circ = await state.build_circuit()
    await circ.when_built()
    print(u"  path: {}".format(" -> ".join([r.ip for r in circ.path])))

    print(u"Downloading meejah's public key via above circuit...")
    config = await tor.get_config()
    resp = await treq.get(
        agent=circ.web_agent(reactor, config.socks_endpoint(reactor)),
    data = await resp.text()

def _main(reactor):
    return ensureDeferred(main(reactor))

Try It Now On Debian/Ubuntu

For example, serve some files via an onion service (aka hidden service):

$ sudo apt-get install --install-suggests python3-txtorcon
$ twistd -n web --port "onion:80" --path ~/public_html

Read More

All the documentation starts in docs/index.rst. Also hosted at

You’ll want to start with the introductions (hosted at RTD).

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for txtorcon, version 21.1.0
Filename, size File type Python version Upload date Hashes
Filename, size txtorcon-21.1.0.tar.gz (310.8 kB) File type Source Python version None Upload date Hashes View
Filename, size txtorcon-21.1.0-py2.py3-none-any.whl (260.6 kB) File type Wheel Python version py2.py3 Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page