General Information¶
What is Nyx?¶
Nyx is a command-line application for monitoring real time Tor status information. This includes bandwidth usage, logs, connections, configuration, and more.

As a curses interface Nyx is particularly well suited for ssh connections, tty terminals, and command-line aficionados.
Why is it called Nyx?¶
Simple - because it's short and memorable. Terminal applications are handiest when they're easy to remember and type, such as top, ssh, etc. Anything longer is just asking to be aliased down.
Besides, Nyx is the Greek goddess of night.
Does Nyx have any dependencies?¶
Yes, Nyx requires Stem 1.4.5 or later.
What Python versions is Nyx compatible with?¶
Nyx works with Python 2.6 and greater, including the Python 3.x series.
Are there any other user interfaces for Tor?¶

Yes, though sadly this isn't a space that gets much attention.
For years Vidalia was the default interface of Tor until it was replaced in 2013 by Tor Browser. Vidalia includes a launcher, settings editor, map, and more. TorK is similar, providing connection information as well but never reached the same level of prominence. Both interfaces are now unmaintained.
Smaller widgets include...
- Syboa - General interface
- OnionLauncher - Tor launcher
- TorNova - Tor launcher
- OnionView - Circuit information
- OnionCircuits - Circuit information
- or-applet - Circuit information
If I missed any then please let me know!
Usage¶
When running an exit will I see people's traffic?¶
No. Potential client and exit connections are scrubbed of sensitive information. Be aware that it's highly discouraged (and possibly illegal) for relay operators to view this data, so please don't.
Is there any chance that nyx will leak data?¶
No. Nyx is a completely passive listener, fetching all information from either Tor or the local system.
Why don't I see the bandwidth graph?¶
On some terminals such as Gentoo screen sessions appear to have a bug where highlighted spaces aren't shown. Try running...
export TERM="rxvt-unicode"
Why are there borders like 'mwqqqqqqqqj'?¶
If you're getting something that looks like...

... you are encountering a terminal bug where alternate character support (ACS) is unavailable.
Unfortunately there doesn't seem to be a way for Nyx to automatically detect or correct this. To work around this you can set the following in your nyxrc to not use ACS borders...
features.acsSupport false
Why are relay details for connections missing?¶
Relays publish information about themselves in documents called descriptors. These documents are downloaded by Tor. New documents available on an hourly basis but Tor will only download them if it needs them, so the descriptors you have may be older.
Nyx's connections page use these descriptors to enrich connection information with data about the relay you're connected with. If Tor doesn't have this information the data may be stale or missing.
This is fine. Descriptor information we use changes infrequently so even if they're a few hours old it won't matter. However, if you really need up-to-date information you can add the following to your torrc...
# download new descriptors even if our cache is still valid
FetchDirInfoEarly 1
FetchDirInfoExtraEarly 1
FetchUselessDescriptors 1
Development¶
How do I get started?¶
The best way of getting involved with any project is to jump right in! Our bug tracker lists several development tasks. In particular look for the 'easy' keyword when getting started. If you have any questions then I'm always more than happy to help! I'm atagar on oftc and also available via email.
To start hacking on Nyx please do the following and don't hesitate to let me know if you get stuck or would like to discuss anything!
- Clone our git repository: git clone https://git.torproject.org/nyx.git
- Install the development version of Stem: git clone https://git.torproject.org/stem.git; cd stem; sudo python setup.py install.
- Get our test dependencies: sudo pip install mock pep8 pyflakes.
- Find a bug or feature that sounds interesting.
- When you have something that you would like to contribute back do the following...
- If you don't already have a publicly accessible Nyx repository then set one up. GitHub in particular is great for this.
- File a trac ticket, the only fields you'll need are...
- Summary: short description of your change
- Description: longer description and a link to your repository with either the git commits or branch that has your change
- Type: 'defect' if this is a bug fix and 'enhancement' otherwise
- Priority: rough guess at the priority of your change
- Component: Core Tor / Nyx
- I'll review the change and give suggestions. When we're both happy with it I'll push your change to the official repository.
How do I run the tests?¶
Nyx has unit tests, including tests that exercise our curses functionality. When you run the tests you may notice your console flicker as these are exercised.
If you have them installed we run pyflakes to do static error checking and pycodestyle for style checking as part of our tests.
Tests are run with...
% run_tests.py
How do I build the site?¶
If you have Sphinx version 1.1 or later installed then building our site is as easy as...
~$ cd nyx/docs
~/nyx/docs$ make html
When it's finished you can direct your browser to the _build directory with a URI similar to...
file:///home/atagar/nyx/docs/_build/html/index.html
What is the copyright for patches?¶
Nyx is under the GPLv3 which is a fine license, but poses a bit of a problem for sharing code with our other projects (which are mostly BSD). To share code without needing to hunt down prior contributors we need Tor to have the copyright for the whole Nyx codebase. Presently the copyright of Nyx is jointly held by its main author (Damian) and the Tor Project.
If you submit a substantial patch I'll ask if you're fine with it being in the public domain. This would mean that there are no legal restrictions for using your contribution, and hence won't pose a problem if we reuse Nyx code in other projects.