0.3

 * Removes minified files from Bloodhound
 * Upgrades to trac 1.0
 * Various bug fixes

 * Not fixed for this release:
   * No major outstanding bugs


0.2

 * Fixes incubator release issues from 0.1.0
 * Various bug fixes relating to the new UI
 * Upgraded to Bootstrap 2.1

 * Not fixed for this release:
   * Some issues with the installer remain
   * Custom text area fields break layout in ticket view



0.1.0

 * added multi-product
 * added dashboard and theme
 * added simplified installation

 * Not fixed for this release:
   * Widget error for product page with no versions defined (#136)

Project Initiation (Tue, 10 Jan 2012)
 
 * Trunk created in Apache svn repositories as an incubator project

