.. _releases:
Releases
========
There isn't a "release schedule" in any sense. If there is something
in main your project depends upon, let me know and I'll do a
release.
txtorcon follows `calendar versioning `_ with the
major version being the 2-digit year. The second digit will be
"non-trivial" releases and the third will be for bugfix releases. So
the second release in 2019 would be "19.2.0" and a bug-fix release of
that will be "19.2.1".
See also :ref:`api_stability`.
`git main `_ *will likely become v24.9.0*
v24.8.0
-------
August 20, 2024
* `txtorcon-24.8.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Fix (test) issues with Twisted 24.7.0 (`#400 `_)
* Remove usage of "six" (`#395 `_,
from `a-dieste `_
v23.11.0
--------
November 20, 2023
* Fix test-failures on Python 3.12
* Particular GETINFO hanging (`#389 `_)
(ultra-long lines over 16KiB caused problems in the protocol)
* Use built-in `mock` only (from `jelly `_)
* Remove `incremental` (from `gdrosos `_)
v23.5.0
-------
May 18, 2023
* `txtorcon-23.5.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* ``twisted.web.client.Agent`` instances now use the same HTTPS policy by default as ``twisted.web.client.Agent``.
It is possible to override this policy with the ``tls_context_factory`` argument, the equivalent to ``Agent``'s ``contextFactory=``.
* Added support for Python 3.11.
* No more ipaddress dependency
v23.0.0
-------
February 15, 2023
* `txtorcon-23.0.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Drop python2 support
* Fix a bug with `CONTROLLER_WAIT` events
v22.0.0
-------
March 16, 2022
* `txtorcon-22.0.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Use GitHub Action for CI (instead of Travis)
* fix coveralls uploading of coverage
v21.1.0
-------
August 16, 2021
* `txtorcon-21.1.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Fix some incorrect unit-test skipping logic (thanks `@exarkun `, `#354 `_ and `#352 `_)
* Fix broken tests revealed by previous fixes (thanks `@exarkun `, `#356 `_
v21.0.0
-------
August 7, 2021
* `txtorcon-21.0.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Use GitHub Actions instead of Travis for CI
* fix Python 3.x+ bug with `TorInfo` and `__class__` access (`#350 `_)
v20.0.0
-------
April 1, 2020
* Use real GeoIP database or nothing (`#250 `_)
* Change abstract base classes import in preperation for Python 3.8 (thanks `@glowatsk `_
* Python 3.4 is no longer supported
* Python 2 is deprecated; all new code should be Python 3. Support
for Python 2 will be removed in a future release.
v19.1.0
-------
September 10, 2019
* `txtorcon-19.1.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* `TorControlProtocol.on_disconnect` is deprecated in favour of
:func:`TorControlProtocol.when_disconnected`
* introduce `non_anonymous_mode=` kwarg in :func:`txtorcon.launch`
enabling Tor options making Onion Services non-anonymous for the
server (but they use a single hop instead of three to the
Introduction Point so they're slightly faster).
* add an API to listen to individual circuit and stream events
(without subclassing anything). Can be used as decorators too.
See e.g. :func:`TorState.on_circuit_new`
* fixes to the CI setup to properly test Twisted versions
v19.0.0
-------
January 15, 2019
* `txtorcon-19.0.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* add :func:`TorControlProtocol.when_disconnected` (will replace `.on_disconnect`)
* add `detach=` kwarg to :func:`Tor.create_onion_service`
* add `purpose=` kwarg to :func:`TorState.build_circuit`
v18.3.0
-------
* `txtorcon-18.3.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* add `singleHop={true,false}` for endpoint-strings as well
v18.2.0
-------
* `txtorcon-18.2.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* add `privateKeyFile=` option to endpoint parser (ticket 313)
* use `privateKey=` option properly in endpoint parser
* support `NonAnonymous` mode for `ADD_ONION` via `single_hop=` kwarg
v18.1.0
-------
September 26, 2018
* `txtorcon-18.1.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* better error-reporting (include REASON and REMOTE_REASON if
available) when circuit-builds fail (thanks `David Stainton
`_)
* more-robust detection of "do we have Python3" (thanks `Balint
Reczey `_)
* fix parsing of Unix-sockets for SOCKS
* better handling of concurrent Web agent requests before SOCKS ports
are known
* allow fowarding to ip:port pairs for Onion services when using the
"list of 2-tuples" method of specifying the remote vs local
connections.
v18.0.2
-------
July 2, 2018
* `txtorcon-18.0.2.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Python3.4 doesn't support async-def or await
v18.0.1
-------
June 30, 2018
* `txtorcon-18.0.1.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* fix a Python2/3 regression when parsing onion services
v18.0.0
-------
June 21, 2018
* `txtorcon-18.0.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* `await_all_uploads` options when creating Onions
* properly re-map progress percentages (including descriptor uploads)
* properly wait for all event-listeners during startup
* re-work how `TorState.event_map` works, hopefully reducing
reproducible-builds issues
* :meth:`txtorcon.TorControlProtocol.add_event_listener` and
:meth:`txtorcon.TorControlProtocol.remove_event_listener` are now
async methods returning Deferred -- they always should have been; new
code can now be assured that the event-listener change is known to Tor
by awaiting this Deferred.
* :meth:`txtorcon.TorControlProtocol.get_conf_single` method added, which
gets and returns (asynchronously) a single GETCONF key (instead of a dict)
* also :meth:`txtorcon.TorControlProtocol.get_info_single` similar to above
* if Tor disconnects while a command is in-progress or pending, the
`.errback()` for the corresponding Deferred is now correctly fired
(with a :class:`txtorcon.TorDisconnectError`
* tired: `get_global_tor()` (now deprecated)
wired: :meth:`txtorcon.get_global_tor_instance`
* Adds a comprehensive set of Onion Services APIs (for all six
variations). For non-authenticated services, instances of
:class:`txtorcon.IOnionService` represent services; for
authenticated services, instances of
:class:`txtorcon.IAuthenticatedOnionClients` encapsulated named
lists of clients (each client is an instance implementing
`IOnionService`).
* Version 3 ("Proposition 279") Onion service support (same APIs) as
released in latest Tor
* Four new methods to handle creating endpoints for Onion services
(either ephemeral or not and authenticated or not):
** :method:`txtorcon.Tor.create_authenticated_onion_endpoint`
** :method:`txtorcon.Tor.create_authenticated_filesystem_onion_endpoint`
** :method:`txtorcon.Tor.create_onion_endpoint`
** :method:`txtorcon.Tor.create_filesystem_onion_endpoint`
* see :ref:`create_onion` for information on how to choose an
appropriate type of Onion Service.
* :method:`txtorcon.Tor.create_onion_service` to add a new ephemeral
Onion service to Tor. This uses the `ADD_ONION` command under the
hood and can be version 2 or version 3. Note that there is an
endpoint-style API as well so you don't have to worry about mapping
ports yourself (see below).
* :method:`txtorcon.Tor.create_filesystem_onion_service` to add a new
Onion service to Tor with configuration (private keys) stored in a
provided directory. These can be version 2 or version 3
services. Note that there is an endpoint-style API as well so you
don't have to worry about mapping ports yourself (see below).
* Additional APIs to make visiting authenticated Onion services as a
client easier:
* :method:`txtorcon.Tor.add_onion_authentication` will add a
client-side Onion service authentication token. If you add a token
for a service which already has a token, it is an error if they
don't match. This corresponds to `HidServAuth` lines in torrc.
* :method:`txtorcon.Tor.remove_onion_authentication` will remove a
previously added client-side Onion service authentication
token. Fires with True if such a token existed and was removed or
False if no existing token was found.
* :method:`txtorcon.Tor.onion_authentication` (Python3 only) an async
context-manager that adds and removes an Onion authentication token
(i.e. adds in on `__aenter__` and removes it on `__aexit__`).
* onion services support listening on Unix paths.
* make sure README renders on Warehouse/PyPI
v0.20.0
-------
February 22, 2018
* `txtorcon-0.20.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* doc fixes from `hotelzululima `_
* fix endpoints so `.connect` on them works properly more than once
from `Brian Warner `_
* allow a `CertificateOptions` to be passed as `tls=` to endpoints
* add method :func:`txtorcon.Tor.is_ready`
* add method :func:`txtorcon.Tor.become_ready`
* fix handling of certain defaults (`*PortLines` and friends)
* fix last router (usually) missing with (new) `MicroDescriptorParser`
* use OnionOO via Onion service `tgel7v4rpcllsrk2.onion` for :func:`txtorcon.Router.get_onionoo_details`
* fix parsing of Router started-times
* `Issue 255 `_ removed routers now deleted following NEWCONSENSUS
* `Issue 279 `_ remember proxy endpoint
v0.19.3
-------
May 24, 2017
* `txtorcon-0.19.3.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Incorrect parsing of SocksPort options (see `Issue 237 `_)
v0.19.2
-------
May 11, 2017
* `txtorcon-0.19.2.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Work around a bug in `incremental` (see `Issue 233 `_)
* Fix for `Issue 190 `_ from Felipe Dau.
* add :meth:`txtorcon.Circuit.when_built`.
v0.19.1
-------
April 26, 2017
* `txtorcon-0.19.1.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Fix a regression in ``launch_tor``, see `Issue 227 `_
v0.19.0
-------
April 20, 2017
* `txtorcon-0.19.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* Full Python3 support
* Drop `txsocksx` and use a custom implementation (this also
implements the custom Tor SOCKS5 methods RESOLVE and RESOLVE_PTR
* Drop support for older Twisted releases (12, 13 and 14 are no
longer supported).
* Add a top-level API object, :class:`txtorcon.Tor` that abstracts a
running Tor. Instances of this class are created with
:meth:`txtorcon.connect` or :meth:`txtorcon.launch`. These
instances are intended to be "the" high-level API and most users
shouldn't need anything else.
* Integrated support for `twisted.web.client.Agent`, baked into
:class:`txtorcon.Tor`. This allows simple, straightforward use of
treq_ or "raw" `twisted.web.client` for making client-type Web
requests via Tor. Automatically handles configuration of SOCKS
ports. See :meth:`txtorcon.Tor.web_agent`
* new high-level API for putting streams on specific Circuits. This
adds :meth:`txtorcon.Circuit.stream_via` and
:meth:`txtorcon.Circuit.web_agent` methods that work the same as
the "Tor" equivalent methods except they use a specific
circuit. This makes :meth:`txtorcon.TorState.set_attacher` the
"low-level" / "expert" interface. Most users should only need the
new API.
* big revamp / re-write of the documentation, including the new
`Programming Guide
`_
* `Issue 203 `_
* new helper: :meth:`txtorcon.Router.get_onionoo_details`_
* new helper: :func:`txtorcon.util.create_tbb_web_headers`_
* `Issue 72 `_
* `Felipe Dau `_ added specific
`SocksError` subclasses for all the available SOCKS5 errors.
* (more) Python3 fixes from `rodrigc `_
.. _Automat: https://github.com/glyph/automat
.. _treq: https://pypi.python.org/pypi/treq
v0.18.0
-------
January 11, 2017
* `txtorcon-0.18.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* `issue 200 `_: better feedback if the cookie data can't be read
v0.17.0
-------
*October 4, 2016*
* `txtorcon-0.17.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* `issue 187 `_: fix unix-socket control endpoints
* sometimes mapping streams to hostnames wasn't working properly
* backwards-compatibility API for `socks_hostname` was incorrectly named
v0.16.1
-------
*August 31, 2016*
* `txtorcon-0.16.1.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* `issue 172 `_: give `TorProcessProtocol` a `.quit` method
* `issue 181 `_: enable SOCKS5-over-unix-sockets for TorClientEndpoint (thanks to `david415 `_
v0.16.0
-------
* there wasn't one, `because reasons `_.
v0.15.1
-------
* `txtorcon-0.15.1.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* fix `issue 179 `_ with `Circuit.age`.
v0.15.0
-------
*July 26, 2016*
* `txtorcon-0.15.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* added support for NULL control-port-authentication which is often
appropriate when used with a UNIX domain socket
* switched to `ipaddress
`_ instead of
Google's ``ipaddr``; the API should be the same from a user
perspective but **packagers and tutorials** will want to change
their instructions slightly (``pip install ipaddress`` or ``apt-get
install python-ipaddress`` are the new ways).
* support the new ADD_ONION and DEL_ONION "ephemeral hidden services"
commands in TorConfig
* a first stealth-authentication implementation (for "normal" hidden
services, not ephemeral)
* bug-fix from `david415 `_ to raise
ConnectionRefusedError instead of StopIteration when running out of
SOCKS ports.
* new feature from `david415 `_ adding a
``build_timeout_circuit`` method which provides a Deferred that
callbacks only when the circuit is completely built and errbacks if
the provided timeout expires. This is useful because
:meth:`txtorcon.TorState.build_circuit` callbacks as soon as a Circuit
instance can be provided (and then you'd use
:meth:`txtorcon.Circuit.when_built` to find out when it's done building).
* new feature from `coffeemakr `_
falling back to password authentication if cookie authentication
isn't available (or fails, e.g. because the file isn't readable).
* both TorState and TorConfig now have a ``.from_protocol`` class-method.
* spec-compliant string-un-escaping from `coffeemakr `_
* a proposed new API: :meth:`txtorcon.connect`
* fix `issue 176 `_
v0.14.2
-------
*December 2, 2015*
* `txtorcon-0.14.2.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* compatibility for Twisted 15.5.0 (released on 0.14.x for `OONI `_)
v0.14.1
-------
*October 25, 2015*
* subtle bug with ``.is_built`` on Circuit; changing the API (but
with backwards-compatibility until 0.15.0 at least)
v0.14.0
-------
*September 26, 2015*
* `txtorcon-0.14.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* :class:`txtorcon.interface.IStreamAttacher` handling was missing ``None`` and ``DO_NOT_ATTACH`` cases if a Deferred was returned.
* add ``.is_built`` Deferred to :class:`txtorcon.Circuit` that gets `callback()`d when the circuit becomes BUILT
* `david415 `_ ported his ``tor:``
endpoint parser so now both client and server endpoints are
supported. This means **any** Twisted program using endpoints can
use Tor as a client. For example, to connect to txtorcon's Web site:
``ep = clientFromString("tor:fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:80")``.
(In the future, I'd like to automatically launch Tor if required, too).
* Python3 fixes from `isis `_ (note: needs Twisted 15.4.0+)
v0.13.0
-------
*May 10, 2015*
* `txtorcon-0.13.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* support ``basic`` and ``stealth`` hidden service authorization, and parse ``client_keys`` files.
* 2x speedup for TorState parsing (mostly by lazy-parsing timestamps)
* can now parse ~75000 microdescriptors/second per core of 3.4GHz Xeon E3
* ``launch_tor`` now doesn't use a temporary ``torrc`` (command-line options instead)
* tons of pep8 cleanups
* several improvements to hidden-service configuration from `sambuddhabasu1`_.
* populated valid signals from ``GETINFO signals/names`` from `sambuddhabasu1`_.
.. _sambuddhabasu1: https://github.com/sammyshj
v0.12.0
-------
*February 3, 2015*
* `txtorcon-0.12.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* doc, code and import cleanups from `Kali Kaneko `_
* HiddenServiceDirGroupReadable support
* Issue #80: honour ``ControlPort 0`` in incoming TorConfig
instance. The caller owns both pieces: you have to figure out when
it's bootstraped, and are responsible for killing it off.
* Issue #88: clarify documentation and fix appending to some config lists
* If GeoIP data isn't loaded in Tor, it sends protocol errors; if
txtorcon also hasn't got GeoIP data, the queries for country-code
fail; this error is now ignored.
* **100% unit-test coverage!** (line coverage)
* PyPy support (well, at least all tests pass)
* TCP4HiddenServiceEndpoint now waits for descriptor upload before
the ``listen()`` call does its callback (this means when using
``onion:`` endpoint strings, or any of the :doc:`endpoints APIs
` your hidden service is 100% ready for action
when you receive the callback)
* ``TimeIntervalCommaList`` from Tor config supported
* :class:`TorControlProtocol ` now has a ``.all_routers`` member (a ``set()`` of all Routers)
* documentation fix from `sammyshj `_
v0.11.0
-------
*August 16, 2014*
* September 6, 2015. bugfix release: `txtorcon-0.11.1.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* fixed Debian bug `797261 `_ causing 3 tests to fail
* `txtorcon-0.11.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* More control for ``launch_tor``: access stdout, stderr in real-time
and control whether we kill Tor on and stderr output. See issue #79.
* Warning about ``build_circuit`` being called without a guard first
is now optional (default is still warn) (from arlolra_)
* ``available_tcp_port()`` now in util (from arlolra_)
* ``TorState`` now has a ``.routers_by_hash`` member (from arlolra_)
.. _arlolra: https://github.com/arlolra
v0.10.1
-------
*July 20, 2014*
* `txtorcon-0.10.1.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* fix bug incorrectly issuing RuntimeError in brief window of time on event-listeners
* issue #78: Add tox tests and fix for Twisted 12.0.0 (and prior), as this is what Debian squeeze ships
* issue #77: properly expand relative and tilde paths for ``hiddenServiceDir`` via endpoints
v0.10.0
-------
*June 15, 2014*
* `txtorcon-0.10.0.tar.gz `_ (`PyPI `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* In collaboration with `David Stainton `_ after a pull-request, we
have endpoint parser plugins for Twisted! This means code like
``serverFromString("onion:80").listen(...)`` is enough to start a
service.
* The above **also** means that **any** endpoint-using Twisted program can immediately offer its TCP services via Hidden Service with **no code changes**. For example, using Twisted Web to serve a WSGI web application would be simply: ``twistd web --port onion:80 --wsgi web.app``
* switch to a slightly-modified `Alabaster Sphinx theme `_
* added howtos to documentation
v0.9.2
------
*April 23, 2014*
* `txtorcon-0.9.2.tar.gz `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* add ``on_disconnect`` callback for TorControlProtocol (no more monkey-patching Protocol API)
* add ``age()`` method to Circuit
* add ``time_created`` property to Circuit
* don't incorrectly listen for NEWDESC events in TorState
* add ``.flags`` dict to track flags in Circuit, Stream
* ``build_circuit()`` can now take hex IDs (as well as Router instances)
* add ``unique_name`` property to Router (returns the hex id, unless ``Named`` then return name)
* add ``location`` property to Router
* ``TorState.close_circuit`` now takes either a Circuit ID or Circuit instance
* ``TorState.close_stream`` now takes either a Stream ID or Stream instance
* support both GeoIP API versions
* more test-coverage
* small patch from `enriquefynn `_ improving ``tor`` binary locating
* strip OK lines in TorControlProtocol (see `issue #8 `_)
* use TERM not KILL when Tor launch times out (see `issue #68 `_) from ``hellais``
v0.9.1
------
*January 20, 2014*
* `txtorcon-0.9.1.tar.gz `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* put test/ directory at the top level
* using "`coverage `_" tool instead of custom script
* using `coveralls.io `_ and `travis-ci `_ for test coverage and continuous integration
* `issue #56 `_: added Circuit.close() and Stream.close() starting from aagbsn's patch
* parsing issues with multi-line keyword discovered and resolved
* preserve router nicks from long-names if consensus lacks an entry (e.g. bridges)
* using `Twine `_ for releases
* `Wheel `_ release now also available
* `issue #57 `_: "python setup.py develop" now supported
* `issue #59 `_: if tor_launch() times out, Tor is properly killed (starting with pull-request from Ryman)
* experimental docker.io-based tests (for HS listening, and tor_launch() timeouts)
* `issue #55 `_: pubkey link on readthedocs
* `issue #63 `_
* clean up GeoIP handling, and support pygeoip both pre and post 0.3
* slightly improve unit-test coverage (now at 97%, 61 lines of 2031 missing)
* added a `Walkthrough `_ to the documentation
v0.8.2
------
*November 22, 2013*
* `txtorcon-0.8.2.tar.gz `_ (:download:`local-sig ` or `github-sig `_) (`source `_)
* ensure hidden service server-side endpoints listen only on 127.0.0.1
v0.8.1
------
*May 13, 2013*
* `txtorcon-0.8.1.tar.gz `_ (:download:`local-sign ` or `github-sig `_) (`source `_)
* fixed improper import in setup.py preventing 0.8.0 from installing
* signatures with proper subkey this time
* Proper file-flushing in tests and PyPy fixes from Lukas Lueg
* docs build issue from isis
v0.8.0
------
*April 11, 2013* (actually uploaded May 11)
* **Please use 0.8.1; this won't install due to import problem in setup.py (unless you have pypissh).**
* following `semantic versioning `_;
* slight **API change** :meth:`.ICircuitListener.circuit_failed`, :meth:`~.ICircuitListener.circuit_closed` and :meth:`.IStreamListener.stream_failed`, :meth:`~.IStreamListener.stream_closed` and :meth:`~.IStreamListener.stream_detach` all now include any keywords in the notification method (some of these lacked flags, or only included some) (`issue #18 `_);
* launch_tor() can take a timeout (starting with a patch from hellais);
* cleanup from aagbsn;
* more test coverage;
* run tests cleanly without graphviz (from lukaslueg);
* `issue #26 `_ fix from lukaslueg;
* pep8 and whitespace targets plus massive cleanup (now pep8 clean, from lukaslueg);
* `issue #30 `_ fix reported by webmeister making ipaddr actually-optional;
* example using synchronous web server (built-in SimpleHTTPServer) with txtorcon (from lukaslueg);
* TorState can now create circuits without an explicit path;
* passwords for non-cookie authenticated sessions use a password callback (that may return a Deferred) instead of a string (`issue #44 `_);
* fixes for AddrMap in case `#8596 `_ is implemented;
v0.7
----
*November 21, 2012*
* `txtorcon-0.7.tar.gz `_ (:download:`local-sig <../signatues/txtorcon-0.7.tar.gz.sig>` or `github-sig `_) (`source `_)
* `issue #20 `_ config object now hooked up correctly after launch_tor();
* `patch `_ from hellais for properly handling data_dir given to TCPHiddenServiceEndpoint;
* `.tac example `_ from mmaker;
* allow TorConfig().hiddenservices.append(hs) to work properly with no attached protocol
v0.6
----
*October 10, 2012*
* `txtorcon-0.6.tar.gz `_ (:download:`local-sig <../signatues/txtorcon-0.6.tar.gz.sig>` or `github-sig `_) (`source `_)
* debian packaging (mmaker);
* psutil fully gone;
* *changed API* for launch_tor() to use TorConfig instead of args;
* TorConfig.save() works properly with no connected Tor;
* fix incorrect handling of 650 immediately after connect;
* `pep8 compliance `_;
* use assertEqual in tests;
* messages with embdedded keywords work properly;
* fix bug with setup.py + pip;
* `issue #15 `_ reported along with patch by `Isis Lovecruft `_;
* consolidate requirements (from `aagbsn `_);
* increased test coverage and various minor fixes;
* https URIs for ReadTheDocs;
v0.5
----
June 20, 2012
* `txtorcon-0.5.tar.gz `_ (`txtorcon-0.5.tar.gz.sig `_) (`source `_)
* remove psutil as a dependency, including from `util.process_from_address`
v0.4
----
June 6, 2012
* `txtorcon-0.4.tar.gz `_ (`txtorcon-0.4.tar.gz.sig `_)
* remove built documentation from distribution;
* fix PyPI problems ("pip install txtorcon" now works)
v0.3
----
* 0.3 was broken when released (docs couldn't build).
v0.2
----
June 1, 2012
* `txtorcon-0.2.tar.gz `_ (`txtorcon-0.2.tar.gz.sig `_)
* incremental parsing;
* faster TorState startup;
* SAFECOOKIE support;
* several bug fixes;
* options to `circuit_failure_rates.py` example to make it actually-useful;
* include built documentation + sources in tarball;
* include tests in tarball;
* improved logging;
* patches from `mmaker `_ and `kneufeld `_;
v0.1
----
march, 2012
* `txtorcon-0.1.tar.gz `_ (`txtorcon-0.1.tar.gz.sig `_)