stem
Stem is a Python controller library that allows applications to interact with Tor (https://www.torproject.org/).
Decision gist · record as of 2026-08-14
Yes, if you need to control Tor from Python and can tolerate no upstream maintenance. The library is stable and has no known vulnerabilities, but it is abandoned as of 2023. Verify compatibility with your Tor version before deploying. The copyleft LGPLv3 license requires careful review if you plan to distribute derivative work.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires a running Tor daemon with control port enabled and authentication configured.
- Installation requires no runtime dependencies, but the package is abandoned—last release was 2023-06-06 and no commits have been recorded since.
- High install friction suggests build or environment complexity.
License · maintenance · safety
LGPLv3 (copyleft) — Licensed under LGPLv3 (copyleft). Any derivative work or modification must be released under the same license; linking in a proprietary application requires careful legal review.
last release 2023-06-06 (1165 days)
0 known vulnerabilities (OSV.dev, 2026-08-14) · 252,598 downloads/mo, #8,541 on PyPI
Alternatives
Verify before relying
pip install stem
import stem.control
with stem.control.Controller.from_port() as controller:
controller.authenticate()
print(controller.get_version())- Whether the package works with current Tor versions and control protocol changes since 2023.
- Python version compatibility beyond the unspecified declaration in the fact sheet.
- Whether the high install friction is due to compiled dependencies or packaging issues.
- Specific control port and authentication requirements for typical Stem usage.
What it is and what it does
Stem is a Python library that lets you programmatically control and query a running Tor instance via its control protocol. It abstracts the low-level socket communication, allowing you to issue commands, parse responses, and monitor Tor's state from Python code. The library has no runtime dependencies, making it lightweight to install, but it does require a Tor daemon to be running separately on your system.
The package is marked as production-stable and has been in use since its first release in 2013, but it is now abandoned—the last release was in June 2023 with no subsequent maintenance. If you need to automate Tor operations or build tools that interact with Tor, Stem can do that, but you should be aware that you will not receive updates for new Tor protocol features or bug fixes.
Use it for
- Automate Tor relay configuration and monitoring by scripting control protocol commands.
- Build testing frameworks that need to spawn and control Tor instances programmatically.
- Query Tor's internal state for network analysis or debugging purposes.
- Develop privacy-focused applications that need to manage Tor connections and routing.
- Monitor Tor daemon health and performance metrics from a Python application.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, if you need to control Tor from Python and can tolerate no upstream maintenance.
The library is stable and has no known vulnerabilities, but it is abandoned as of 2023. Verify compatibility with your Tor version before deploying. The copyleft LGPLv3 license requires careful review if you plan to distribute derivative work.
Install
stem on PyPI
Before you install
Installation requires no runtime dependencies, but the package is abandoned—last release was 2023-06-06 and no commits have been recorded since. High install friction suggests build or environment complexity. Use only if you can accept no upstream maintenance.
Requires a running Tor daemon with control port enabled and authentication configured.
License in practice
Licensed under LGPLv3 (copyleft). Any derivative work or modification must be released under the same license; linking in a proprietary application requires careful legal review.
Quickstart
pip install stem
import stem.control
with stem.control.Controller.from_port() as controller:
controller.authenticate()
print(controller.get_version())
Verify before relying
- Whether the package works with current Tor versions and control protocol changes since 2023.
- Python version compatibility beyond the unspecified declaration in the fact sheet.
- Whether the high install friction is due to compiled dependencies or packaging issues.
- Specific control port and authentication requirements for typical Stem usage.
Package facts
| License | LGPLv3 copyleft |
| Python support | Not specified |
| Install friction | High. Source build required |
| Runtime dependencies | None |
| Maintenance | Abandoned 1,165 days since the last release |
| First released | |
| Downloads | 252,598 / month, #8,541 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableIntended Audience :: DevelopersLicense :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)Topic :: SecurityTopic :: Software Development :: Libraries :: Python Modules |
Evidence: stem-1.8.2.tar.gz
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “tor controller library”
- stemStem is a Python controller library for interacting with Tor,…
- txtorcontxtorcon is a client library for controlling and monitoring Tor…
- aiounifiAsynchronous Python library for communicating with UniFi Network…
Give your agent the search over MCP, or paste the wish link into any chat.
More Python Modules packages
Converts domain names between Unicode and ASCII-compatible encoding (Punycode) according to IDNA 2008 and Unicode Technical Standard 46, with security validation and broader script coverage than the standard library.
Install it if you work with internationalized domain names, need to validate domains, or use HTTP clients that depend on it transitively.
Setuptools is a Python build backend and package management tool that handles building, distributing, and installing Python packages, including support for C/C++ extension modules.
PyYAML parses and emits YAML 1.1 data format, enabling serialization and deserialization of configuration files and Python objects to and from human-readable YAML text.
Pydantic validates Python data structures against type hints, coercing and checking input at runtime to ensure it matches a declared schema.
Provides reusable metadata objects for use with PEP-593 `typing.Annotated` to express common constraints like bounds, collection sizes, and predicates on types.
Install it if you use or build libraries that need to express type constraints in a standardized, inspectable way—or if you want to annotate your own types with…
Provides runtime tools to inspect and introspect Python type annotations, enabling programmatic examination of type hints at execution time.
See also txtorcon · brainstem · snowballstemmer · py-rust-stemmers · simple-equ · Sastrawi · boschshcpy · python-matter-server · flux-led · qutebrowser