We are pleased to announce the release of Tornado 1.0, available from http://github.com/downloads/facebook/tornado/tornado-1.0.tar.gz.  There have been many changes since version 0.2; here are some of the highlights:

New features:
* Improved support for running other WSGI applications in a Tornado server (tested with Django and CherryPy)
* Improved performance on Mac OS X and BSD (kqueue-based IOLoop), and experimental support for win32
* Rewritten AsyncHTTPClient available as tornado.httpclient.AsyncHTTPClient2 (this will become the default in a future release)
* Support for standard .mo files in addition to .csv in the locale module
* Pre-forking support for running multiple Tornado processes at once (see HTTPServer.start())
* SSL and gzip support in HTTPServer
* reverse_url() function refers to urls from the Application config by name from templates and RequestHandlers
* RequestHandler.on_connection_close() callback is called when the client has closed the connection (subject to limitations of the underlying network stack, any proxies, etc)
* Static files can now be served somewhere other than /static/ via the static_url_prefix application setting
* URL regexes can now use named groups ("(?P<name>)") to pass arguments to get()/post() via keyword instead of position
* HTTP header dictionary-like objects now support multiple values for the same header via the get_all() and add() methods.
* Several new options in the httpclient module, including prepare_curl_callback and header_callback
* Improved logging configuration in tornado.options.
* UIModule.html_body() can be used to return html to be inserted at the end of the document body.

Backwards-incompatible changes:
* RequestHandler.get_error_html() now receives the exception object as a keyword argument if the error was caused by an uncaught exception.
* Secure cookies are now more secure, but incompatible with cookies set by Tornado 0.2.  To read cookies set by older versions of Tornado, pass include_name=False to RequestHandler.get_secure_cookie()
* Parameters passed to RequestHandler.get/post() by extraction from the path now have %-escapes decoded, for consistency with the processing that was already done with other query parameters.

Many thanks to everyone who contributed patches, bug reports, and feedback that went into this release!

-Ben
