The MEMS Exchange released version 1.3 of the QP package today. http://www.mems-exchange.org/software/qp/ For the record, QP is a web application framework designed specifically for applications that use Durus for persistent storage and the QPY for formatting pages. Here is a summary of the changes in this release: Add form demo to proto site. Add add_javascript_code() and get_javascript_code() utilities to the form module. Simplify basic form css. Change form widget rendering to conform to xhtml-strict. Remove render_br keyword option. Add DOCTYPE to the default header. Add style and doctype keyword options to header(). Add HTTPRequest.get_content_type(). Use "User Name" instead of "Email" as the widget title on the default login form. Use / instead of "" for the path, when there is no script name. Change secure() so that it does not raise an exception when there is no https_address. Set site in Publisher.__init__() before calling ensure_database_initialized(), (formerly named ensure_initialized()). In redirect(), use the existing response instead of making a new one. This allows cookie headers to be part of a redirect response. In DurusDirectory._q_lookup, call self.__class__ instead of DurusDirectory.