----------------------------
`Stem's 1.4 release <https://blog.torproject.org/blog/stem-release-14>`_ brings
with it new hidden service capabilities. Most notably, `ephemeral hidden
services <tutorials/over_the_river.htmlephemeral-hidden-services>`_ and the
ability to `read hidden service descriptors
<tutorials/over_the_river.htmlhidden-service-descriptors>`_. This release also
changes descriptor validation to now be opt-in rather than opt-out. When
unvalidated content is lazy-loaded, `greatly improving our performance
<https://lists.torproject.org/pipermail/tor-dev/2015-January/008211.html>`_.
And last, Stem also now runs directly under both python2 and python3 without a
2to3 conversion (:ticket:`archive-14075`)!
* **Controller**
* Added :class:`~stem.control.Controller` methods for a new style of hidden services that don't touch disk: :func:`~stem.control.Controller.list_ephemeral_hidden_services`, :func:`~stem.control.Controller.create_ephemeral_hidden_service`, and :func:`~stem.control.Controller.remove_ephemeral_hidden_service` (:spec:`f5ff369`)
* Added :func:`~stem.control.Controller.get_hidden_service_descriptor` and `support for HS_DESC_CONTENT events <api/response.htmlstem.response.events.HSDescContentEvent>`_ (:ticket:`archive-14847`, :spec:`aaf2434`)
* :func:`~stem.process.launch_tor_with_config` avoids writing a temporary torrc to disk if able (:ticket:`archive-13865`)
* :class:`~stem.response.events.CircuitEvent` support for the new SOCKS_USERNAME and SOCKS_PASSWORD arguments (:ticket:`archive-14555`, :spec:`2975974`)
* The 'strict' argument of :func:`~stem.exit_policy.ExitPolicy.can_exit_to` didn't behave as documented (:ticket:`archive-14314`)
* Threads spawned for status change listeners were never joined on, potentially causing noise during interpreter shutdown
* Added support for specifying the authentication type and client names in :func:`~stem.control.Controller.create_hidden_service` (:ticket:`archive-14320`)
* **Descriptors**
* Lazy-loading descriptors, improving performance by 25-70% depending on what type it is (:ticket:`archive-14011`)
* Added `support for hidden service descriptors <api/descriptor/hidden_service.html>`_ (:ticket:`archive-15004`)
* When reading sanitised bridge descriptors (server or extrainfo), :func:`~stem.descriptor.__init__.parse_file` treated the whole file as a single descriptor
* The :class:`~stem.descriptor.networkstatus.DirectoryAuthority` 'fingerprint' attribute was actually its 'v3ident'
* Added consensus' new package attribute (:spec:`ab64534`)
* 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:`ddb630d`)
* Updating Faravahar's address (:ticket:`archive-14487`)
* **Utilities**
* Windows support for connection resolution (:ticket:`archive-14844`)
* :func:`stem.util.connection.port_usage` always returned None (:ticket:`archive-14046`)
* :func:`~stem.util.test_tools.stylistic_issues` and :func:`~stem.util.test_tools.pyflakes_issues` now provide namedtuples that also includes the line
* Added :func:`stem.util.system.tail`
* Proc connection resolution could fail on especially busy systems (:ticket:`archive-14048`)
* **Website**
* Added support and `instructions for tox <faq.htmlhow-do-i-test-compatibility-with-multiple-python-versions>`_ (:ticket:`archive-14091`)
* Added OSX to our `download page <download.html>`_ (:ticket:`archive-8588`)
* Updated our twitter example to work with the service's 1.1 API (:ticket:`archive-9003`)
* **Version 1.4.1** (May 18th, 2015) - fixed issue where descriptors couldn't
be unpickled (:ticket:`archive-16054`) and a parsing issue for router status entry
bandwidth lines (:ticket:`archive-16048`)
.. _version_1.3: