The following is a log of all user-facing changes to Stem, both released and unreleased. For a monthly report on work being done see my development log.
Stem uses semantic versioning, which means that versions consist of three numbers (such as '1.2.4'). These are used to convey the kind of backward compatibility a release has...
- The first value is the major version. This changes infrequently, and indicates that backward incompatible changes have been made (such as the removal of deprecated functions).
- The second value is the minor version. This is the most common kind of release, and denotes that the improvements are backward compatible.
- The third value is the patch version. When a Stem release has a major issue another release is made which fixes just that problem. These do not contain substantial improvements or new features. This value is sometimes left off to indicate all releases with a given major/minor version.
The following are only available within Stem's git repository.
With this next release descriptor validation is now opt-in rather than opt-out, and when unvalidated content is lazy-loaded. This greatly improves our performance.
Stem also now runs directly under both python2 and python3 without a 2to3 conversion (ticket 14075).
- launch_tor_with_config() avoids writing a temporary torrc to disk if able (ticket 13865)
- CircuitEvent support for the new SOCKS_USERNAME and SOCKS_PASSWORD arguments (ticket 14555, spec)
- The 'strict' argument of can_exit_to() didn't behave as documented (ticket 14314)
- Threads spawned for status change listeners were never joined on, potentially causing noise during interpreter shutdown
- Lazy-loading descriptors, improving performance by 25-70% depending on what type it is (ticket 14011)
- Added support for hidden service descriptors (ticket 15004)
- When reading sanitised bridge descriptors (server or extrainfo), parse_file() treated the whole file as a single descriptor
- The DirectoryAuthority 'fingerprint' attribute was actually its 'v3ident'
- Added consensus' new package attribute (spec)
- Added extra info' new hs_stats_end, hs_rend_cells, hs_rend_cells_attr, hs_dir_onions_seen, and hs_dir_onions_seen_attr attributes (spec)
- Updating Faravahar's address (ticket 14487)
Version 1.3 (December 22nd, 2014)¶
With Stem's 1.3 release it's now much easier to work with hidden services, 40% faster to read decriptors, and includes a myriad of other improvements. For a nice description of the changes this brings see Nathan Willis' LWN article.
- Added Controller methods to more easily work with hidden service configurations: get_hidden_service_conf(), set_hidden_service_conf(), create_hidden_service(), and remove_hidden_service() (ticket 12533)
- Added get_accounting_stats() to the Controller
- Added get_effective_rate() to the Controller
- Added connection_time() to the BaseController
- Changed get_microdescriptor(), get_server_descriptor(), and get_network_status() to get our own descriptor if no fingerprint or nickname is provided.
- Added ExitPolicy methods for more easily handling 'private' policies (the default prefix) and the defaultly appended suffix. This includes has_private(), strip_private(), has_default(), and strip_default() ExitPolicy methods in addition to is_private() and is_default() for the ExitPolicyRule. (ticket 10107)
- Added the reason attribute to the HSDescEvent (spec)
- launch_tor_with_config() could cause a "Too many open files" OSError if called too many times (ticket 13141)
- The get_exit_policy() method errored if tor couldn't determine our external address
- The Controller's methods for retrieving descriptors could raise unexpected ValueErrors if tor didn't have any descriptors available
- Throwing a new DescriptorUnavailable exception type when the Controller can't provide the descriptor for a relay (ticket 13879)
- Improved speed for parsing consensus documents by around 40% (ticket 12859 and ticket 13821)
- Don't fail if consensus method 1 is not present, as it is no longer required (spec)
- Include '*.new' files when reading from a Tor data directory (ticket 13756)
- Updated the authorities we list, replacing turtles with longclaw and updating gabelmoo's address
- Noting if authorities are also a bandwidth authority or not
- Microdescriptor validation issues could result in an AttributeError (ticket 13904)
- Added support for directories to stem.util.conf.Config.load()
- Changed stem.util.conf.uses_settings() to only provide a 'config' keyword arument if the decorated function would accept it
- Added stem.util.str_tools.crop()
- Added stem.util.proc.file_descriptors_used()
- Dropped the 'get_*' prefix from most function names. Old names will still work, but are a deprecated alias.
- The /info command errored for relays without contact information
Version 1.2 (June 1st, 2014)¶
- New, better connect() function that deprecates connect_port() and connect_socket_file()
- Added is_newnym_available() and get_newnym_wait() methods to the Controller
- Added get_ports() and get_listeners() methods to the Controller
- Added drop_guards() (ticket 10032, spec)
- Added the id attribute to the ORConnEvent (spec)
- Added support for CONN_BW events (spec)
- Added support for CIRC_BW events (spec)
- Added support for CELL_STATS events (spec)
- Added support for TB_EMPTY events (spec)
- Added support for HS_DESC events (ticket 10807, spec)
- Changed get_network_status() and get_network_statuses() to provide RouterStatusEntryMicroV3 if Tor is using microdescriptors (ticket 7646)
- The connect_port() and connect_socket_file() didn't properly mark the Controller it returned as being authenticated, causing event listening among other things to fail
- The add_event_listener() method couldn't accept event types that Stem didn't already recognize
- The ExitPolicy class couldn't be pickled
- Tor instances spawned with launch_tor() and launch_tor_with_config() could hang due to unread stdout content, we now close stdout and stderr once tor finishes bootstrapping (ticket 9862)
- Initial release of our interactive Tor interpreter!
- Added a section with example scripts.
- Made FAQ and other sections quite a bit more succinct.
Version 1.1 (October 14th, 2013)¶
- get_network_status() and get_network_statuses() now provide v3 rather than v2 directory information (ticket 7953, spec)
- AddrMapEvent support for the new CACHED argument (ticket 8596, spec)
- attach_stream() could encounter an undocumented 555 response (ticket 8701, spec)
- RelayDescriptor digest validation was broken when dealing with non-unicode content with Python 3 (ticket 8755)
- The Controller use of cached content wasn't thread safe (ticket 8607)
- Added get_user() method to the Controller
- Added get_pid() method to the Controller
- StreamEvent didn't recognize IPv6 addresses (ticket 9181)
- get_conf() mistakenly cached hidden service related options (ticket 9792)
- Added support for TRANSPORT_LAUNCHED events (spec)
- Connection resolution via the get_connections() function (ticket 7910)
- set_process_name() inserted spaces between characters (ticket 8631)
- pid_by_name() can now pull for all processes with a given name
- call() ignored the subprocess' exit status
- Added stem.util.system.name_by_pid()
- Added stem.util.system.user()
- Added stem.util.system.start_time()
- Added stem.util.system.bsd_jail_path()
- Added stem.util.system.is_tarfile()
- Added stem.util.connection.is_private_address()
- Overhaul of Stem's download page. This included several improvements, most notably the addition of PyPI, Ubuntu, Fedora, Slackware, and FreeBSD.
- Replaced default sphinx header with a navbar menu.
- Added this change log.
- Added the FAQ page.
- Settled on a logo for Stem.
- Expanded the client usage tutorial to cover SocksiPy and include an example for polling Twitter.
- Subtler buttons for the frontpage (before and after).
- Version 1.1.1 (November 9th, 2013) - fixed an issue where imports of stem.util.system would fail with an ImportError for pwd under Windows (ticket 10072)