For a complete list of changes since 0.15, please see the ChangeLog.
See below for a summary of the major new features.

New for 0.9.1:

*	Inline content generation.  i.e. an application can generate content like
	images inline, getting a URL back from Iowa that, when accessed, will
	display the generated content without ever requiring that the temporary
	content (images or whatever) be written to a temporary file on disk and
	without requiring one to explicitly setup a seperate service to generate
	the temporary content.  i.e. an art gallery application may store the
	images within a database.  When a page with art on it is being displayed,
	the code for the page can simply query the image data from the database
	along with the rest of the information on the piece of art.  To insert a
	queried image into the content, on the code side just create a method
	that invokes resource_url() with the image information, and it will return
	to your template a URL that will access the resource.
	
*	Added a simplistic demo of the above to the webrick demo, and fixed
	a couple very minor bugs in the webrick demo.
	
*	Changed the Hash.downcase_keys to a better implementation.

*	Improved WEBrick support.  It is simpler to use, now.

*	Bindings can now be placed in a seperate file from both code and layout.
	To do this, create a file with the same name as the .iwa and .html files,
	but with a .bnd suffix.  When used in this way, the <? ?> blocks need
	not be used, though they can be.  Comment lines in bindings is also
	now supported.  A comment is any line where the first non-whitespace
	character is a #.
	
*	The LRUCache can now support age based expiration in addition to the
	strict size based expiration mode.  If the class variable @@cacheTTL is
	set for either Application or Session, it will be applied to the session
	cache or to the page cache, respectively.  @@cacheTTL is the number of
	seconds to allow something to exist in the cache.  Items older than that
	number of seconds will be expired.  The hard limit on cache sizes
	expressed by the @@cachedSessions and @@cachedPages variables will
	still apply, as well.  That way there is always a hard limit to protect
	against unbounded cache growth.  For example, if one set, for Application,
	@@cacheTTL to 1800 and @@cachedSessions to 100, Iowa would allow up to
	100 sessions that were under a half of an hour in age to exist in the session
	cache.  If anyone has any suggestions for other/different/better cache
	handling, please let me know.

New for 0.9:

*	Yeah, a huge jump in version numbers.  I've been using Iowa heavily
	in a production capacity for over two years, so it seemed appropriate.
	Now that there is working WEBrick support, there isn't a lot more out
	of the ToDo list that I really consider crucial for the 1.0 release.
	So, upcoming emphasis will mainly be on cleaning up code and improving
	the test suites.
	
*	Support for WEBrick + Iowa.  Works very well, and performance is
	surprisingly good.  Thanks to David Naseby for sending me a basic seed
	implementation of this to get me started.
	
*	Support for multipart/form-data forms.  i.e. file uploading.  If the following
	is in a form:
	<input type="file" oid="myfile">
	@myfile will receive an Iowa::FileData object that will contain the file data.
	Iowa::FileData.to_s output the file data.  name() returns the name of the
	file as uploaded.  name=() lets one specify a new path/name for the file.
	content_type() returns the content type of the uploaded file, and store()
	writes the file data to the filename in name().  store() is for convenience.
	Use it carefully.
	
*	Misc minor bugfixes.

*	It works with Windows, now!

New for 0.20:

*	More bug fixes.

*	Checkboxes are supported.

*	FCGI support.

*	Normalized some of the method naming to snake_case.

*	Added a setup() stub to Component; gets called every time the component
	is displayed.
	
*	Supports Iowa files in subdirectories & much more complex, hierarchical
	names for components.

*	More intelligent reloading of changes.

*	Support for a default script file (DefaultScriptFile.iwa).

*	Much more.

-----
New for 0.16:

*	Support for TCP sockets as well as UNIX sockets.

*	Numerous bug fixes.

*	URL mapping support to allow Iowa to be easily used for simple dynamic
	web pages in addition to applications.
	
*	Internal tracking of basic useage stats, and methods to access this
	data.
	
*	Ability to use cookies, manipulate HTTP headers, and have relatively
	complete access to the data available in an Apache::Request object,
	even if one is not using mod_ruby.
	
*	Improved logging and error handling.

-----
Changes from 0.13:

* Subcomponents are now supported - see /examples/subdemo.

* Literal bindings are now evaluated by Ruby, e.g. 
	value = "#{1+2}" is now an acceptable binding... just don't
	abuse it.
	
* Element id encoding in the URL has been made more robust - in particular,
	the "key" property has been added to repeating elements such as <ul>,
	to accomodate volatile lists better when backtracking - this is especially
	useful for database applications.
	This is more or less untested (a very quick test in in examples/test),
	so let me know if you have problems because of it.
	
Changes from 0.12:

* All the html attributes of dynamic tags will now pass through to
	the final output.

* You can subclass Session and Application to store data or logic
	that is used by multiple components (see guestbook.rb for
	an example); components now have "session" and "application"
	accessors.
	
* You can now run multiple iowa applications at once.  To run
	an app, place a ruby file in the directory with your application's
	html files, that contains at least the following:

	require 'iowa'
	Iowa.run('myAppName')

	Or, just change into that directory, and run
	>ruby -riowa -e "Iowa.run('myAppName')"

	It should now be available at http://localhost/iowa/myAppName

* A script is included for those who would rather use a CGI interface
	than an Apache module.  See the iowa.cgi file for more info.
	
*** Upgrading from 0.12: the iowa libs now actually need to be installed
	where ruby can find them, so make sure you run install.rb, as well
	as installing the updated mod_iowa.
