Trac 1.0.1 (February 1, 2013)
http://svn.edgewall.org/repos/trac/tags/trac-1.0.1

 - Fix zip source download for large directories in Subversion repositories
 - Performance improvement for the Roadmap, by caching milestone properties 
 - Added a ''select all'' checkbox to table of components for each plugin on
   the Plugins admin panel
 - Restore the ''Modify'' link at the top of the ticket page, as it was in
   Trac 0.12
 - `ListOption` keeps values other than empty string and None in raw list
   as default
 - Prevent possibility of multiple identical info or warning messages being
   presented to the user
 - The BatchModify select-all checkboxes are toggled with tri-state behavior
   when the ticket checkboxes are toggled
 - Update the ticket changetime to the current time when deleting a ticket
   comment
 - ... and quite more! In particular, see also the changes for 0.12.5
   which are also integrated and new since 1.0

Trac 1.0 'Cell' (September 7, 2012)
http://svn.edgewall.org/repos/trac/tags/trac-1.0

Trac 1.0 is a major release adding refreshed user interface and
improved DVCS repository support as the most visible changes.

The following list contains only a few highlights:

 - The default theme looks more modern, especially on recent browsers
   (no effort has been made to make it look better on older browsers
   like IE6 or 7)
 - The TracHacks GitPlugin has been donated by Herbert Valerio Riedel
   to the Trac project (many thanks!) and is now maintained here as an
   optional component
 - As a consequence, the Subversion support has been moved below
   `tracopt.versioncontrol` as well
 - The Git and Mercurial log view feature a visualization of the
   branching structure
 - Usability improvements for the tickets, with a better support for
   conflict detection and resolution
 - Integration of the TracHacks BatchModifyPlugin, contributed by
   Brian Meeker (many thanks!) and is now maintained there as a
   default component
 - jQuery/UI integration, featuring a date picker for date fields
 - Improved integration with Pygments syntax highlighting
 - ... and numerous smaller features added and bugs fixed since 0.12!

Trac 1.0-rc1 'Cell' (September 1, 2012)
http://svn.edgewall.org/repos/trac/tags/trac-1.0rc1

 See 1.0

Trac 1.0-beta1 'Cell' (August 6, 2012)
http://svn.edgewall.org/repos/trac/tags/trac-1.0b1

 See 1.0-rc1

-----------------------------------------------------------------------------

Trac 0.12.5 (January 15, 2013)
http://svn.edgewall.org/repos/trac/tags/trac-0.12.5

Trac 0.12.5 is a maintenance release and contains
a few interesting fixes:
 - upload of .mht files (MHTML web page archive files) now works
   (#9880)
 - more robust parsing of attachment URLs (#10280) and uploaded
   file names (#10850)
 - lots of improvement to the date formatting code, which is now
   much more robust when timezone and daylight saving time
   computations are involved (#10768, #10863, #10864, #10912, #10920)
 - no longer generate invalid JSON encoded data with Python 2.4 and
   2.5 (#10877)
 - ... and a few more!

Trac 0.12.4 (September 7, 2012)
http://svn.edgewall.org/repos/trac/tags/trac-0.12.4

Trac 0.12.4 is a regular maintenance release and contains
a few minor fixes.

Trac 0.12.3 (February 6, 2012)
http://svn.edgewall.org/repos/trac/tags/trac-0.12.3

Trac 0.12.3 contains a few minor fixes and a few minor features:
 - added compatibility with Subversion 1.7 (#10414)
 - make it easier to troubleshoot common startup errors (#10024)
 - jQuery upgraded to 1.4.4 (#10001)
 - improved fine-grained permission handling in the source browser
   (#9976, #10208, #10110)
 - added compatibility with MySQL 5.5.3 utf8mb4 databases (#9766)
 - ... and dozens more fixes!

Trac 0.12.2 (January 31, 2011)
http://svn.edgewall.org/repos/trac/tags/trac-0.12.2

This list contains only a few highlights:
 - install: improved robustness of Trac installation if Babel is
   installed after the fact (#9439, #9595, #9961)
 - notifications: support for Asian character width (#4717)
 - roadmap: fix display of progress bar in some corner cases (#9718)
   and respect the overall_completion milestone group setting (#9721)
 - reports: reports and queries look much better, as the columns now
   keep the same width across groups; the absence of word wrapping in
   reports has been fixed (#9825)
 - web admin: improved layout (#8866, #9963)
 - web: it's now possible to log in different Trac instances sharing
   the same URL prefix (e.g. /project and /project-test) (#9951)

Trac 0.12.1 (October 9, 2010)
http://svn.edgewall.org/repos/trac/tags/trac-0.12.1

This list contains only a few highlights:
 - db: improve concurrency behavior (#9111)
 - fcgi: add an environment variable `TRAC_USE_FLUP` to control the
   usage of flup vs. bundled _fcgi.py (defaults to 0, i.e. use bundled
   as before)
 - svn authz: improve compatibility with svn 1.5 format (#8289)
 - milestone: allow to set the time for the due date (#6369, #9582)
 - ticket: fixes for the CC: property (#8597, #9522)
 - notification: improved the formatting of ticket fields in
   notification e-mails (#9484, #9494)
 - i18n: added a configuration option to set the default language (#8117)
 - several fixes for upgrade (#9400, #9416, #9483, #9556)

Trac 0.12 'Babel' (June 13, 2010)
http://svn.edgewall.org/repos/trac/tags/trac-0.12

Trac 0.12 is a major release introducing i18n and multiple repository
support as the most visible changes.

The following list contains only a few highlights:
 - The user interface is translated in a dozen of languages, provided the
   [Babel:] package is installed
 - Multiple repositories can be associated to a single Trac
   environment; the repositories can be of heterogeneous types (svn,
   hg, git, darcs...)
 - Usability improvements for the Wiki, with a nice side-by-side edit
   mode with automatic preview
 - Richer Wiki syntax, with much improved support for tables, partial
   WikiCreole compatibility and numerous smaller improvements
 - Usability improvements for the Ticket module, with automatic
   preview of comments while you type and possibility to edit or
   remove them later
 - Improved Custom Queries (time fields, multiple disjoint conditions,
   a.k.a. OR queries)
 - Timeline filtering by user
 - ... and numerous smaller features added and bugs fixed since 0.11!

Trac 0.12rc1 'Babel' (June 03, 2010)
http://svn.edgewall.org/repos/trac/tags/trac-0.12rc1

  See 0.12.

-----------------------------------------------------------------------------

Trac 0.11.7 (March 10, 2010)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.7

 Trac 0.11.7 is nearly identical to 0.11.7rc1 except for a few more fixes:
  - avoid an infinite loop when using an AtomicFile in a read-only
    directory (#9081)
  - don't report client disconnects during writes as internal errors (#9103)
  - don't reuse a closed cursor, which could happen in one specific case
    for the pysqlite backend (#9104)

Trac 0.11.7rc1 (February 23, 2010)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.7rc1

Security fixes:
 - Fixed a ticket validation issue that would allow unauthorized users
   to modify the status and resolution of a ticket (#8884)

Performance improvements:
 - Trac wiki had some trouble handling very long unicode words (#9025)
   [[comment(intentionally kept vague, we don't want to advertize a
   DOS, do we?)]]
 - Full text search was very slow if lots of custom fields were used (#8935)

Bug fixes:
 - Fixed a race condition that could lead to the destruction of the
   trac.ini file (#8623)
 - Fixed creation of new milestone which could have been a rename if
   performed after a name clash has been detected (#8816)
 - Fixed display of value 0 in report cells (#7512)

Trac 0.11.6 (November 28, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.6

 Trac 0.11.6 contains two security fixes and a number of bug fixes,
 performance improvements and minor enhancements. The following list
 contains only a few highlights:

Security fixes:
 * Fixed the policy checks in report results when using alternate formats.
 * Added a check for the "raw" role that is missing in docutils < 0.6.

Performance improvements:
 * Re-enabled connection pooling with SQLite (#3446).
 * Added caching of configuration options (#8510).

Bug fixes:
 * Fixed the "database is locked" issue with SQLite (#3446, #8468).
 * Deprecated SQLite 2.x support (#8625).
 * Fixed hanlding of times in timezones with DST (#8240).
 * Avoid corruption of trac.ini during write (#8623).
 * Improved support for revision ranges in revision log view (#8349)

Trac 0.11.5 (July 17, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.5

 Trac 0.11.5 is identical to 0.11.5rc2 except for fixing a minor
 incompatibility issue when using IIS via AJP as frontend (#8475).

Trac 0.11.5rc2 (July 11, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.5rc2

 Trac 0.11.5rc2 fixes two regressions found in rc1 and one minor enhancement:

 * Fixed workaround for zipped Genshi eggs, [8354], #7823
 * Fixed internal error when removing a wiki page version [8343].
 * Fixed display of merge properties for scoped repositories #7715.

Trac 0.11.5rc1 (June 30, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.5rc1

 Trac 0.11.5rc1 contains a number of bug fixes and minor enhancements.
 The following list contains only a few highlights:

Bug fixes:
 * Implemented pre-upgrade backup support for PostgreSQL and MySQL (#2304)
 * Fixed PostgreSQL upgrade issue (#8378)
 * More robust diff parsing (#2672)
 * Avoid intermittent hangs by not calling apr_terminate explicitly (#7785)

Trac 0.11.4 (March 30, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.4

 Trac 0.11.4 is identical to the second release candidate.

 Trac 0.11.4 contains a number of bug fixes and minor enhancements.
 The following list contains only a few highlights:

 * Custom mainnav links regression (#8153)
 * Fixed Python 2.3 incompatibility (#8061)
 * Fixed Python 2.6 notification issue (#8083)
 * Fixed PostgreSQL multi column index issue (#7600)

Trac 0.11.4rc2 (March 25, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.4rc2

 * Custom mainnav links regression (#8153)

Trac 0.11.4rc1 (March 18, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.4rc1

 Trac 0.11.4rc1 contains a number of bug fixes and minor enhancements.
 The following list contains only a few highlights:

Bug fixes:
 * Fixed Python 2.3 incompatibility (#8061)
 * Fixed Python 2.6 notification issue (#8083)
 * Fixed PostgreSQL multi column index issue (#7600)

Trac 0.11.3 (February 15, 2009)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.3

 Trac 0.11.3 contains a number of bug fixes and minor enhancements.
 The following list contains only a few highlights:

Bug fixes:

 * Compatibility with Python 2.6 (#7876, #7458)
 * PostgreSQL db backend improvement (#4987, #7600)
 * Highlighting of search results is more robust (#7324, #7830)
 * Unicode related fixes (#7672, #7959, #7845, #7935, #8024)
 * Fixed Trac link rendering in ReST (#7712)

Minor improvements:

 * Custom fields can now contain wiki text (#1791)
 * A few usability and documentation improvements (#8000, #8004, #8016)

Trac 0.11.2.1 (November 17, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.2.1

 Trac 0.11.2.1 fixes a Python 2.3 incompatibility introduced in Trac 0.11.2.
 Python 2.4+ users already running Trac 0.11.2 do not need to upgrade.

Trac 0.11.2 (November 8, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.2

 Trac 0.11.2 contains two security fixes and a couple of bug fixes.
 The following list contains only a few highlights:

Bug fixes:

 * Fixes potential DOS vulnerability with certain wiki markup. Reported by
   Matt Murphy.
 * Improved HTML sanitizer filter to detect possible phishing attempts.
   Reported by Simon Willison.
 * MySQL db backend improvement (reconnect after idle timeout #4465)
 * TicketQuery speed improvements (#6436)
 * Fixes for RSS feeds (timeline entries no longer truncated #7316, no longer
   download some feeds under Firefox #3899)
 * Search now works for custom fields (#2530)
 * Same order for ticket fields for new and existing tickets (#7018)
 * Enforce fine-grained permission for "quickjump" search results (#7655)
 * E-mail obfuscation was not done in a few remaining places (#7688, #6532)
 * Uninstall of plugins from WebAdmin was not working - feature disabled
   for now
 * More robust pagination of results for reports and custom queries (#7424,
   #7544)
 * Support for newer version of pygments (#7622)
 * Documentation updated (#7603, #7205, #7318)

Minor improvements:

 * Better support for Wiki page hierarchy (show path #2780, link to
   parent #2150)
 * Custom query allow to search in description and other text fields (#4824)

Trac 0.11.1 (August 6, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.11.1

 Trac 0.11.1 contains a number of bug fixes and minor enhancements.
 The following list contains only a few highlights:

 * Improved DB connection handling (new connection pool)
 * Better MySQL backend unicode support. "utf8" and "utf8_bin" is the
   recommended database charset and collation settings.
 * Fixes intermittent "constraint violation" and "invalid form token"
   error messages.
 * Fixes roadmap layout glitch in Firefox 3.
 * Safer default umask value for tracd (can be set using --umask option)
 * Better default PYTHON_EGG_CACHE value.

 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.11.1

Trac 0.11 'Genshi' (June 22, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.11

 Trac 0.11 contains a great number of new features, improvements and
 bug fixes. The following list contains only a few highlights:

 * New template engine for generating content (Genshi)
 * New configurable workflow in the ticket subsystem
 * Finer-grained control of permissions
 * Support for Pygments as the default syntax highlighter
 * Improved repository browser ("blame" support, dynamic in-place
   expansion of folders)
 * Improved user preferences subsystem, among which the possibility for
 * any user to select their time zone and disable access keys
 * The WebAdmin plugin is now an integral part of Trac
 * Paging of timeline and query results.

 A more complete list of new features can be found in the RELEASE file.
 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.11

Trac 0.11rc2 'Genshi' (June 9, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.11rc2

  See 0.11

Trac 0.11rc1 'Genshi' (April 30, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.11rc1

  See 0.11rc2

Trac 0.11b2 'Genshi' (March 12, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.11b2

  See 0.11rc1

Trac 0.11b1 'Genshi' (December 18, 2007)
http://svn.edgewall.org/repos/trac/tags/trac-0.11b1

 See 0.11b2.

-----------------------------------------------------------------------------

Trac 0.10.5 (Jun 23, 2008)
http://svn.edgewall.org/repos/trac/tags/trac-0.10.5

 Trac 0.10.5 contains two security fixes and a couple of bug fixes.
 The following list contains only a few highlights:

 * Fixes a cross-site redirection vulnerability in the quickjump function
   reported by Russ McRee.
 * Fixes a wiki engine XSS vulnerability found by Nathan Collins.
 * Added PostgreSQL 8.3 support.
 * Fixes FineGrainedPermissions for scoped repositories.
 * Fixes problem with repository syncing raising exceptions.

 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.10.5

Trac 0.10.4 (April 20, 2007)
http://svn.edgewall.org/repos/trac/tags/trac-0.10.4

 Trac 0.10.4 is a bug fix release. The following list contains only a
 few highlights:

 * Repository cache improvements. The new syncing scheme is
   incompatible with the previous one and requires a database schema
   upgrade in order to prevent the old and the new codebase to be
   mixed. A repository resync is not needed, though. The 0.10.4 scheme
   is compatible with the 0.11 one.  (#3837, #4043 and #4586)
 * Fix a possible freeze under heavy load (#4465)

 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.10.4

Trac 0.10.3.1 (Mar 8, 2007)
http://svn.edgewall.org/repos/trac/tags/trac-0.10.3.1

 Trac 0.10.3.1 is a security fix release.

 * Always send "Content-Disposition: attachment" headers where potentially
   unsafe (user provided) content is available for download. This behaviour
   can be altered using the "render_unsafe_content" option in the
   "attachment" and "browser" sections of trac.ini.
 * Fixed XSS vulnerability in "download wiki page as text" in
   combination with Microsoft IE. Reported by Yoshinori Oota, Business
   Architects Inc.

Trac 0.10.3 (Dec 12, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.10.3

 Trac 0.10.3 is a bug fix release. The following list contains only a
 few highlights:

 * Timeline fail to load with a "!NoSuchChangeset" error message (#4132).
 * Timed out MySQL connections not handled properly (#3645).
 * Subversion repository resync broken. (#4204).

 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.10.3

Trac 0.10.3rc1 (Dec 7, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.10.3rc1

 See 0.10.3

Trac 0.10.2 (Nov 13, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.10.2

 Trac 0.10.2 is a bug fix release. The following list contains only a
 few highlights:

 * Fixes deadlock when using authz_file config option (#3996).
 * Makes the CSRF code play nice with the XmlRpcPlugin (#4122).
 * Fixes Timeline breakage after svn commit when using sqlite (#4120).

 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.10.2

Trac 0.10.1 (Nov 8, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.10.1

 Trac 0.10.1 contains a security fix and a number of bug fixes.
 The following list contains only a few highlights:

 * Fixed CSRF vulnerability (#4049), reported by Daniel Kahn Gillmor.
 * Improved DB connection handling (#3503)
 * Tracd no longer tries to resolve client's IP address (#3481).

 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.10.1

Trac 0.10 'Zengia' (Sep 28, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.10

 Trac 0.10 contains a great number of new features, improvements and
 bug fixes. The following list contains only a few highlights:

 * Support for spam protection.
 * Advanced diff support.
 * InterWiki and InterTrac support.
 * Improved notification system.
 * WSGI Used as web server protocol.

 A more complete list of new features can be found in the RELEASE file.
 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.10

Trac 0.10-rc1  (Sep 22, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.10rc1

 See 0.10

Trac 0.10-beta1  (Aug 28, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.10b1

 See 0.10

-----------------------------------------------------------------------------

Trac 0.9.6  (Jul 6, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.9.6

 * Fixed reStructuredText breach of privacy and denial of service
   vulnerability found by Felix Wiemann.
 * trac-post-commit-hook fixes.
 * Fixed bugs: #2894, #3058, #3209 #3325.

Trac 0.9.5  (Apr 18, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.9.5

 * Fixed wiki macro XSS vulnerability found by Mr. Kazuhiro Nishiyama:
   http://jvn.jp/jp/JVN%2384091359/index.html
 * Smaller memory usage when accessing subversion history.
 * Fixed issue with incorrectly generated urls when installed behind a web
   proxy (#2531).
 * Fixed bugs: #2531, #2777, #3020.

Trac 0.9.4  (Feb 15, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.9.4

 * Deletion of reports has been fixed.
 * Various encoding issues with the timeline RSS feed have been fixed.
 * Fixed a memory leak when syncing with the repository.
 * Milestones in the roadmap are now ordered more intelligently.
 * Fixed bugs: #1064, #1150, #2006, #2253, #2324, #2330, #2408, #2430,
   #2431, #2459, #2544, #2459, #2481, #2485, #2536, #2544, #2553,
   #2580, #2583, #2606, #2613, #2621, #2664, #2666, #2680, #2706,
   #2707, #2735

Trac 0.9.3  (Jan 8, 2006)
http://svn.edgewall.org/repos/trac/tags/trac-0.9.3

 * Fixed XSS vulnerabilities.
 * Timeline RSS feed validity issue resolved.
 * "trac-admin initenv" now handles empty repositories.
 * Textile unicode support.
 * Fixed bugs: #1158, #2290, #2337, #2416, #2440, #2468, #2473, #2484,
   #2490, #2493, #2512, #2517, #2519, #2527, #2548, #2558, #2558

Trac 0.9.2  (Dec 5, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.9.2

 * Fixed SQL injection vulnerability in ticket search module.
 * Fixed broken ticket email notifications.

Trac 0.9.1  (Dec 1, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.9.1

 * Fixed SQL injection vulnerability in ticket query module.
 * Fixed bugs: #1633, #2167, #2283, #2284, #2285, #2291, #2292, #2300,
   #2318, #2329, #2366, #2369, #2373, #2383, #2416, #2457


Trac 0.9 'Vodun' (Oct 31, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.9

 * Support for a global trac.ini configuration file.
 * Changed logic for enabling plugins/components.
 * Improved support for handling repository subsets.
 * Fixes problems with Trac links when using multiple environments in the
   same Python interpreter.
 * Improvements to email notification layout and encoding.
 * Fixes for database locking with SQLite, in particular in a multi-threaded
   environment.
 * PostgreSQL compatibility fixes.
 * Fixed bugs: #804, #861, #927, #1044, #1051, #1123, #1153, #1169,
   #1239, #1344, #1463, #1562, #1881, #1886, #1895, #1909, #1921, #1930,
   #1983, #1988, #2019, #2051, #2061, #2229, #2106, #2107, #2116, #2120,
   #2124, #2129, #2135, #2136, #2138, #2140, #2144, #2164, #2166, #2170,
   #2172, #2191, #2192, #2196, #2201, #2202, #2203, #2208, #2215, #2218,
   #2223, #2230, #2232, #2239, #2240, #2241, #2243, #2251,


Trac 0.9-beta2  (Sept 25, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.9b2

 * Support for setuptools 0.6.
 * Allow insertion of a custom HTML snippet above the new ticket form
   to explain site-specific policies and/or guidelines.
 * Much improved Bugzilla import script.
 * Fixed a bug where deleting a wiki page version would sometimes delete
   the entire page.
 * Fixes for the rendering of diffs and patches.
 * Fixes for the Subversion authz support.
 * Fixed bugs: #2008, #2032, #2034, #1801, #1893, #1040, #2040,
   #1036, #1944, #1081, #1863, #2052, #2066, #2016, #2090, #1985,
   #2012, #2089, #2079, #1999, #2029, #2079, #1960, #2080, #2021,
   #2042, #2088, #1345, #2011, #2100, #2103, #2113, #2116, #2109


Trac 0.9-beta1  (Sept 5, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.9b1

 Trac 0.9 contains a great number of new features, improvements and
 bug fixes. The following list contains only a few highlights:

 * License changed from GPL to modified BSD (See the file COPYING).
 * Improved modularity and extendibility (plugin support).
 * Support for both pysqlite 1.x and pysqlite 2.x.
 * Postgresql database support (with psycopg or pyPgSQL).
 * Repository subsets. Multiple Trac environments can share a single
   repository.
 * Version control abstraction layer making it possible to support
   other version control systems besides subversion in the future.
 * FastCGI frontend support.
 * Python version >= 2.3 is now required.

 The complete list of closed tickets can be found here:
   http://trac.edgewall.org/query?status=closed&milestone=0.9

-----------------------------------------------------------------------------

Trac 0.8.3  (Jun 15, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.8.3

 * Fix compatibility of 'trac-admin resync' with Subversion >= 1.2.
 * Settings page now works correctly when Trac is deployed at the
   root of a host.
 * Windows packaging issues resolved.
 * Fixed bugs: #1282, #1500, #1648


Trac 0.8.2  (Jun 1, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.8.2

 * Compatibility with Subversion >= 1.2 fixed.
 * Compatibility with Docutils >= 0.3.7 fixed.
 * Fixed bugs: #1020, #1302, #1500, #1182, #1339, #1518
   #1525, #1618


Trac 0.8.1  (Feb 28, 2005)
http://svn.edgewall.org/repos/trac/tags/trac-0.8.1

 * Improved Python 2.1 compatibility.
 * Layout of navigation bar in Opera fixed.
 * Execution of Javascript through event handler attributes
   in HTML code is now forbidden.
 * Fixed bugs: #157, #371, #556, #683, #970, #971, #972,
   #974, #979, #983, #1001, #1003, #1007, #1008, #1011,
   #1020, #1026, #1030, #1045, #1054, #1070, #1072, #1074,
   #1076, #1087, #1090, #1103, #1108, #1111, #1136, #1159,
   #1164, #1190, #1195, #1220


Trac 0.8 'Qualia'  (Nov 15, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.8

 * Roadmap module.
 * Support for custom ticket properties.
 * Wiki administration features.
 * Advanced ticket queries.
 * Improved diff display.
 * User preferences.
 * Wiki editing (near-wysiwyg) aids a la wikipedia.
 * Improved email notification.
 * Fixed bugs: #13, #63, #99, #100, #158, #164, #203, #210,
   #225, #264, #304, #306, #326, #346, #347, #351,
   #352, #364, #373, #375, #405, #411, #416, #431,
   #433, #434, #436, #438, #443, #445, #446, #447,
   #450, #452, #453, #455, #458, #460, #465, #468,
   #471, #472, #473, #474, #477, #478, #479, #480,
   #482, #483, #486, #487, #489, #491, #492, #494,
   #496, #501, #503, #506, #510, #512, #513, #514,
   #516, #522, #524, #526, #527, #528, #530, #532,
   #536, #537, #538, #539, #542, #543, #545, #546,
   #550, #551, #552, #553, #555, #556, #557, #558,
   #559, #560, #565, #567, #568, #570, #572, #574,
   #577, #578, #580, #581, #583, #587, #589, #591,
   #593, #594, #597, #598, #599, #600, #601, #602,
   #606, #609, #610, #612, #613, #616, #618, #619,
   #620, #622, #623, #626, #627, #628, #630, #631,
   #634, #644, #647, #648, #651, #652, #657, #658,
   #660, #664, #668, #669, #670, #671, #674, #675,
   #676, #677, #678, #680, #690, #692, #696, #698,
   #699, #703, #705, #706, #708, #709, #713, #714,
   #715, #716, #718, #720, #721, #722, #726, #727,
   #730, #732, #734, #735, #736, #737, #738, #741,
   #742, #743, #744, #745, #748, #749, #750, #751,
   #752, #759, #762, #764, #768, #769, #770, #771,
   #774, #775, #776, #778, #779, #780, #785, #789,
   #793, #798, #800, #806, #807, #815, #816, #817,
   #818, #829, #830, #831, #833, #836, #844, #846,
   #848, #850, #851, #852, #872, #873, #877, #878,
   #885, #888, #889, #892, #901, #903, #907, #912,
   #916, #923, #929, #931, #932, #935

-----------------------------------------------------------------------------

Trac 0.7.1 'Argento'  (Jun, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.7.1

 * Bugfixes for 0.7
 * Fixes security hole in auth.py
 * Experimental support for mod_python
 * Improved MIME-types
 * Fixed bugs: #93, #202, #307, #312, #342, #345, #350, #353, #355, #391,
   #393, #401, #404, #406, #415, #417, #419, #420, #421, #422, #424,
   #425, #428, #429, #432, #435, #437, #441, #442, #448, #451, #452,
   #456, #457, #461, #463, #466, #467, #470, #497, #498, #502, #504


Trac 0.7 'Fulci'  (May 18, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.7

 * Revised database format (requires manual upgrade).
 * Trac standalone daemon, tracd (Experimental).
 * Greatly improved browser.
 * Many usability improvements.
 * Clean-up of CSS and templates.
 * UTF-8 character encoding support.
 * Wiki page attachments.
 * Syntax coloring supporting >35 languages, using SilverCity or GNU Enscript.
 * Better support for ReStructuredText.
 * Logging support, including syslog and windows eventlog.
 * Ticket attachments.
 * Import tickets from Bugzilla (contributed by Mark Rowe).
 * Import tickets from SourceForge (contributed by Dmitry Yusupov).
 * New ticket field: keywords
 * Ticket email notification.
 * Localized date and time display.
 * Viewable SQL for reports.
 * Improved search facilities.
 * Windows installer package.
 * More documentation.
 * Fixed bugs: #14, #19, #27, #62, #87, #96, #106, #111, #115, #127, #146,
   #161, #166, #171, #180, #182, #183, #188, #190, #191, #192, #193,
   #195, #196, #197, #201, #205, #207, #211, #212, #213, #220, #224,
   #227, #228, #231, #233, #235, #236, #240, #241, #243, #244, #246,
   #247, #248, #249, #251, #252, #253, #254, #255, #258, #259, #261,
   #262, #263, #265, #270, #271, #273, #275, #277, #278, #281, #284,
   #285,  #88, #289, #292, #293, #294, #296, #300, #302, #310, #313,
   #314, #315, #316, #320, #322, #328, #332, #333, #337, #338, #339,
   #340, #341, #344, #348, #349, #358, #361, #362, #363, #368, #370,
   #371, #372, #376, #377, #378, #381, #384, #385, #386, #387, #388,
   #392, #394, #396, #397, #398, #399, #402, #403, #410

-----------------------------------------------------------------------------

Trac 0.6.1 '245 Trioxin' (April 12, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.6.1

 * RSS now escapes entities in summary.
 * Search results won't highlight dates anymore.
 * RPM for SuSE Linux.
 * Preliminary Windows Installer.
 * More documentation.
 * Fixed bugs: #163, #165, #189, #198, #200, #206, #209, #214, #223


Trac 0.6 'Solanum' (March 23, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.6

 * View diffs between wiki page edits.
 * Improved Search module.
 * Support for tables in the wiki. (Thanks to Stephen Hansen)
 * Colored reports. Use colors to show priority, etc.
 * Support for custom wiki processor macros.
 * ReStructuredText markup support (through a processor macro)
 * HTML markup support (through a processor macro)
 * Report groups. Group results by a column.
 * Multi-line report rows.
 * Download report in CSV (Comma Separated Value) and tab-separated format
 * RSS 2.0 content syndication support in Timeline, Reports and Log/Browser
 * Better, locale-based date and time formatting.
 * Wiki RecentChanges support.
 * Overall usability, consistency and cosmetic improvements.
 * More documentation.
 * Fixed bugs: #16, #68, #81, #88, #98, #101, #102, #103, #104, #105,
   #110, #112, #113, #114, #117, #119, #120, #131, #132, #134,
   #135, #136, #138, #142, #145, #147, #151, #155, #170, #173,
   #174, #175, #177, #179

-----------------------------------------------------------------------------

Trac 0.5.2 'Nameless' (March 2, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.5.2

 * Performance improvements.
 * Better unicode support in commit-messages.
 * TRAC_ADMIN is now a real "meta-permission" containing all other
   permissions.
 * Wiki-links of the svn:/path format can now also link to directories.
 * Handle subversion changesets without any "author" specified.
 * "view" checkboxes in the timeline view now reflect the current state.
 * The subversion repository is now indexed by "svnadmin initdb" instead of
   trac.cgi at first execution.
 * trac-admin now has a 'wiki dump' and 'wiki load' commands to
    export/import all pages to/from a directory.
 * Most of the inline css is removed.
 * IE6 navbar problem fixed.
 * Fixed bugs: #69, #73, #77, #78, #79, #80, #84, #85, #86, #89, #90,
   #91, #93, #97


Trac 0.5.1 'Unnamed' (February 25, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.5.1

 * Navbar now works properly on error pages.
 * Cleaned up source code. Removed ugly tabs.
 * Added missing COPYING, AUTHORS etc. Cleaned up package.
 * trac-admin now works with python 2.1.
 * Fixed bugs: #74, #75, #76, #77


Trac 0.5 'Incognito' (February 23, 2004)
http://svn.edgewall.org/repos/trac/tags/trac-0.5

 * First release.
