Add myself to uploaders
[pkg-ocaml-ocsigen.git] / CHANGES
blob7d3fe4cee7ed6c7aaea62b897ab8989578e9117b
1 ===== 1.3.4 (2011-01-04) =====
3   * Port to Lwt 2.2.0
5 ===== 1.3.3 (2010-06-13) =====
7   * Eliom: Fix some typos in Eliom's tutorial stylesheet
8   * Server: Fix usage of {{{accept_n}}} to avoid file descriptor leakage
9   * XHTML: Adding missing elements and attributes in XHTML.M
10   * Cleaning Ocsigen_cache
11   * Eliom: Fixing actions with uploads
14 ===== 1.3.2 (2010-04-30) =====
16   * Add dummy findlib packages ocsigen.xhtml*, that depend on
17     ocsigen_xhtml*, for compatibility with previous versions. These
18     packages might be removed in a future (major) release.
19   * Port to Lwt 2.1.0
21 ===== 1.3.1 (2010-04-23) =====
23   * Split out ocsigen_xhtml findlib package
24   * Configuration file: when no protocol is specified in {{{<port>}}}, listen
25     on IPv6 (if possible) and IPv4 (always)
27 ===== 1.3.0 (2010-01-22) =====
29   * Server: Each request now has a polymorphic data table
30     (called //request cache//), where you can
31     store the data you want to keep during the whole page generation.
32   * Eliom: actions now return {{{()}}}.
33     Use the request cache to send information to fallbacks.
34   * Eliom: CSRF-safe coservices
35   * Eliom: the number of sessions without group by IP address is now limited
36   * Eliom: efficient implementation of limitation of sessions by groups
37     (or now IP) for large limits
38   * Eliom: the number of anonymous coservices by session is now limited
39   * Eliom: the number of anonymous coservices without session
40   by IP address is now limited
41   * Eliom: now possible to unregister services
42   * Eliom: New (very) experimental module {{{Eliom_obrowser}}}
43     to use Eliom with Obrowser
44   * Eliom: Now possible to have constant parts in suffixes to allow
45     URLS like {{{/param1/something/param2}}}
46   * Eliom: services with optional suffixes
47   * Eliom: form towards a service with suffix: it is now possible to choose
48     whether you want the redirection towards the suffix form or not
49   * Eliom: lists and sets in suffixes
50   * Eliom: Now possible to create services sending custom HTTP header values
51     or customizing the content-type
52   * Eliom: New notion: "Non localized parameters". Can be sent to any service.
53   * Eliom: changing the order of parameters for user type form widgets
54   * Eliom: changing the order of parameters for user type form widgets
55   * Eliom: Eliom_tools.menu and hierarchical_menu now compare the URL strings
56     (was: compare the service)
57   * Eliom: textarea now take a string (was pcdata)
58   * Eliom: The type of the iterator for lists in parameters has changed
59   * Eliom: New options in configuration file to set session timeouts
60   * Server: now possible to give the config file name to reload server command
61   * Server: now possible to do a "graceful shutdown" of the server
62     using the "shutdown" server command
63   * Server: now possible to add custom commands for the command pipe
64   * Server: EXPERIMENTAL now possible to observe HTTP headers before sending
65   the result
66   * Xhtmlpp: the parsing now fails if a quotation for an Xhtml element
67     contains superfluous elements. (This can cause the parsing of previously
68     incorrect code to fail)
69   * Staticmod/Eliom: attempting to access a file whose name contains a NULL
70     character will result in a 403.
71   * Server: HTTP headers containing newlines are now properly escaped.
72   * Server: correct missing xmlns in Xhtml DTD
73   * Server: now send last-modified and etag headers when returning a 403
74   * Server: Now accepting several requests at a time
75     (as explained in "Accept()able strategies" by Tim Brecht & all)
76   * Rewritemod: more rewriting possibilities (still very basic)
77   * Eliom menus are now more robust when finding which item is active
78   * Fixed handling of incorrectly-sized multipart requests. Thanks to
79     Mauricio Fernandez for noticing the bug
80   * Upload directory and maximum file size can now be configured on a
81     per-site basis
82   * Renamed the field of Ocsigen_http_frame.t
83   * Javascript events support in Xhtml.M ; Thanks to john @ 5070.info
84     for the patch
86 ===== 1.2.2 (2009-10-17) =====
88   * Add react and lwt.unix to the list of built-in findlib packages
90 ===== 1.2.1 (2009-09-26) =====
92   * Lwt 2.0 compatibility:
93     ** Adapt to Lwt.t/Lwt.u splitting
94     ** fix Makefile to deal with lwt.unix findlib package
95   * Fix ocsipersist-dbm Makefile
96   * Fix for pcre-ocaml 6.0.0
97   * Fix typo regarding --stubdir in configure script
99 ===== 1.2.0 (2009-03-25) =====
101   * Native code version now compiled by default
102   * Now possible to link extensions and Eliom modules statically, for
103     example to use a native code server on platforms where native
104     dynlink is not supported
105   * Server: Partial requests implemented (Range HTTP header)
106   * Build C stubs into a shared library so that bytecode executables
107     may be not linked in custom mode; new {{{--stubdir}}} option in
108     {{{configure}}} script
109   * Eliom: non-attached services now called "named non-attached
110     coservices" and created using {{{Eliom_services.new_coservice'}}}
111     with the optional {{{name}}} parameter
112   * Eliom: now possible to create named attached coservices using the
113     optional {{{name}}} parameter
114   * Eliom: now possible to write libraries for Eliom sites, loaded
115     inside {{{<host>}}}, but not generating any page
116   * Eliom and server: EXPERIMENTAL now possible to make extensions
117     that can use Eliom's data
118   * XHTML.M's pretty printer: now possible to set the DOCTYPE manually
119   * Eliom: now possible to set manually the DOCTYPE when registering
120     an XHTML.M service
121   * Redirectmod and Revproxy: now possible to do more complex
122     rewriting
123   * Accesscontrol: add support for {{{<port>}}} and {{{<ssl>}}}
124     conditions
125   * Config file: {{{aliases}}} attribute now called {{{hostfilter}}}
126   * Revproxy and Redirectmod: now possible to filter on server, port
127     and protocol
128   * New extension extendconfiguration to allow dynamic changes in the
129     configuration (mimetypes, charsets, followsymnlink, directory
130     listing, ...)
131   * Server: new module {{{LocalFiles}}} factoring the common parts
132     for sending static files (with Eliom and staticmod for example),
133     while checking that the files can safely be sent.
134   * Now possible to use XHTML pretty printers without Ocsigen, using
135     the {{{xhtmlpretty.cma}}} library
136   * Add {{{Ocsigen_lib.register_exn_printer}}}, better error messages
137   * Now possible to use the same configuration file in native code and
138     in bytecode (.cmo/.cma filenames are internally translated to
139     .cmxs)
140   * Signature of Ocsigen_extensions.register_extension is now more
141     complete and more lightweight
142   * Userconf: the options set in the local .userconf file are kept
143     in the enclosing {{{<site>}}} tag
144   * Server: possibility to ignore or to supply an alternative
145     command-line
146   * Ocsigen_http_client: timeout when the distant server does not
147     exists
148   * OCaml versions < 3.10 are not supported anymore
149   * Extensions are now much more strict w.r.t. the syntax of
150     configuration files
151   * Staticmod: accessing a directory for which indexing is disallowed
152     returns an error 404 (instead of a 403 previously)
154 ===== 1.1.0 (2008-07-15) =====
156   * Lwt removed (now distributed separately)
157   * {{{XHTML.M}}} pretty printer: fixing pretty printing of empty tags
158     (for browser compatibility)
159   * Eliom_duce: New pretty printer for XHTML fixing pretty printing of
160     empty tags
161   * Eliom: secure sessions, secure services, (absolute) https
162     links/forms, and using secure cookies
163   * Eliom: Adding special "void action", without any parameters
164   * Eliom: {{{Eliom_predefmod.Redirections}}} now called
165     {{{Eliom_predefmod.String_redirection}}}, and adding new module
166     {{{Eliom_predefmod.Redirection}}} that use GET services without
167     parameters as data type.
168   * Eliom and XHTML.M: Small changes of types in interfaces
169   * Eliom: New session ID generator
170   * Eliom: Adding types {{{int32}}} and {{{int64}}} for parameters and
171     forms
172   * Eliom: Adding functions {{{lwt_get_form}}} and {{{lwt_post_form}}}
173     for creating forms using cooperative functions
174   * Eliom and Staticmod: now possible to give GET parameters to static
175     pages
176   * Eliom: Bugfix in Makefiles for native code version
177   * Eliom forms: Adding missing types in interfaces
178   * Eliom_tools: current page is now optional in menus
179   * Userconf and Eliom: there was a bug when loading both Eliom and
180     Userconf together
181   * Reverse Proxy: Now sending content length when available
182   * Web server: The default content-type is now
183     {{{application/octet-stream}}}
184   * Creating and installing a cma file for all Ocsigen libraries not
185     installed elsewhere
186   * Ocsipersist-dbm: fixing bug when removing data
187   * Deflatemod: fixing memory leak
188   * And small bugfixes in XHTML.M, Eliom, ...
190 ===== 1.0.0 (2008-04-01) =====
192   * Config file: findlib integration
193   * Eliom and Ocsigen: changing namespace convention for modules
194   * Access control: simplification of config file syntax
195   * Eliom: Allowing (module dependent) parameters for registration
196     functions
197   * New xhtml output without pretty printing
198   * Web server: Bugfix in HTTP/1.0 with keep-alive
199   * Reverse proxy: Bugfix GET parameters were wrong
200   * Reverse proxy: Bugfix memory consumption when the connection was
201     closed by client
203 ===== 0.99.5 (2008-01-11) =====
205   * Revproxy: pipelining of requests
206   * Access control: simplification, generalization of filters and
207     syntax changes in config file
208   * Eliom: EXPERIMENTAL session groups
209   * Eliom: non-attached services
210   * Eliomduce: new functor {{{SubXhtml}}} for creating registration
211     modules
212   * Eliomduce: new module Eliomducetools with same features as
213     Eliomtools, but for Eliomduce
214   * Web server: now possible to split the configuration file into
215     several files using the {{{<extconf/>}}} option.
216   * Web server: now possible to have {{{<site>}}} option inside
217     another {{{<site>}}} in configuration files, and the the first one
218     is optional
219   * Web server: EXPERIMENTAL user configuration files, with restricted
220     possibilities (for security reasons)
221   * Web server: IPv6 support
222   * Deflatemod: now possible to filter on file extensions
223   * Eliom: new option to keep GET non-attached parameters or not when
224     doing a POST form towards a non-attached coservice.
225   * Eliom: bugfix path of session cookies
226   * Eliom: bugfix POST non-attached coservices called from a page with
227     non-attached GET parameters were not found.
228   * Lwt: now catching exceptions raised after timeouts
229   * Cgimod: bufixes in path handling
230   * Web server: bugfix - some files were not closed
232 ===== 0.99.4 (2007-11-21) =====
234   * Ocsigen: Changes in the extension mechanism. The extensions are
235     not tried in the order in which they are loaded any more, but in
236     the order in which the options are specified for each site in the
237     configuration file.
238   * New experimental extension: access control
239   * A few small enhancements
240     ** Eliom: internal cookie management rewritten (+ bugfix)
241     ** Eliom: Small changes in function names
242     ** Eliom: now retry all extensions after actions (not only Eliom)
243     ** Eliom: cleaning {{{Eliommod}}} interface
244     ** Ocsigen server: Internal changes in server (removing "send"
245        functions, debug messages lazier)
246     ** Lwt: Adding a few functions in {{{Lwt_chan}}} interface
247     ** Staticmod: Allowing to personalize default error pages for HTTP
248        errors
249     ** Ocsipersist (dbm and sqlite): better handling of database
250        errors
251     ** XHTML: New pretty printer for xhtml using streams (up to 15%
252        speedup on requests)
253     ** XHTML: Allowing any value for {{{<link>}}} rel attribute (for
254        example {{{shortcut icon}}}).
256 ===== 0.99.3 (2007-11-07) =====
258   * Ocsigen: New module Deflatemod to compress data before sending to
259     the browser.
260   * Ocsigen: EXPERIMENTAL - New module Revproxy (reverse proxy).
261   * Eliom: New session mechanism, with the ability to name the
262     sessions and thus have several sessions for the same site.
263   * Eliom: Now possible to have one site with session inside a
264     subdirectory of another one.
265   * Lwt: New module {{{Lwt_timeout}}} to implement timeouts, new
266     module {{{Lwt_chan}}}, new module {{{Lwt_mutex}}}, new function
267     {{{Lwt_unix.abort}}} to make all threads waiting on a file
268     descriptor abort with an exception.
269   * Ocsigen: New implementation of lots of Web server
270     internals. Better management of Ocsigen's streams, file
271     descriptors, exceptions, timeouts ...
272   * A lot of enhancements and bug fixes:
273     ** Eliom: Single {{{<select>}}} now always return one parameter
274        ({{{`Opt}}} replaced by {{{`One}}}, and the first item is
275        selected by default to prevent selecting nothing with some
276        browsers).
277     ** Eliom: More secure cookies.
278     ** Eliom: new version of the tutorial.
279     ** Eliom splitted in several modules.
280     ** Eliom: Nurpawiki example now called Miniwiki.
281     ** Eliom: {{{any_...}}} form widgets now called {{{raw_...}}}
282     ** Eliom: {{{~url}}} parameter (for {{{new_service}}}, etc.) now
283        called {{{~path}}}.
284     ** Eliom: Bugfix escaping characters in URL was wrong
285     ** Eliom: Adding a new parameter {{{~prefix}}} to
286        {{{new_external_service}}} for the scheme and server name. Not
287        encoded.
288     ** Eliom: Eliomboxes now called Eliomtools, with new widget
289        "hierarchical menu" for sites with sections and subsections.
290     ** Eliom: Adding {{{Eliompredefmod.Streamlist}}}.
291     ** Ocsigen: EXPERIMENTAL - now possible to do HTTP requests.
292     ** Ocsigen: New module Redirectmod to define HTTP redirections in
293        the config file.
294     ** Ocsigen: Make possible to create new kind of extensions to
295        filter the output (for ex compression)
296     ** Ocsigen: Bugfix - HEAD requests were broken in 0.99.2
297     ** Ocsigen: Bugfix - HTTP errors were sometimes sending a body in
298        respond to a HEAD request.
299     ** Ocsigen: Now sending 403 when upload is forbidden
300     ** Ocsigen: HTTP headers {{{If-Match}}}, {{{If-None-Match}}},
301        {{{If-Unmodified-Since}}} implemented
302     ** Cgimod: Bugfix - HEAD requests were sending an error 500.
303     ** Cgimod: Bugfix - Some file descriptors were not closed.
304     ** Cgimod: Implementing a timeout on CGI scripts.
306 ===== 0.99.2 (2007-08-21) =====
308   * Eliom: New implementation of forms. All missing cases implemented,
309     and more possibilities, such as untyped forms.
310   * Ocsipersist: New implementation of Ocsipersist using SQLite
311     instead of DBM. (You can still use the old one).
312   * Cgimod: EXPERIMENTAL - New extension for using CGI scripts with
313     Ocsigen (including PHP through CGI).
314   * Staticmod: Allowing to have several static directories for one
315     site.
316   * Staticmod: Allowing to list the content of directories.
317   * Ocsigen: HTTP Header "Transfer-Encoding: chunked" implemented for
318     sending or receiving data without knowing the Content-Length
319   * Ocsigen: Bugfix in preemptive.ml when lots of simultaneous
320     connections
321   * Ocsigen: Improvements in the extension mechanism
322   * Ocsigen: New file extensiontemplate.ml: an example explaining how
323     to write your own extensions
324   * Ocsigen: Bugfix - fixing limitation of simultaneous connections
325   * Eliom: Bugfix - type of {{{all_suffix_string}}} was wrong in
326     {{{eliom.mli}}}.
327   * Eliom: GET Services do not answer any more to POST requests
328     without parameters.
330 ===== 0.99.1 (2007-05-15) =====
332   * Eliom: Now possible to set an exception handler for the whole site
333     to personalize error pages (404, 500, etc.)
334   * Eliom: Now possible to register main services after initialization
335   * Eliom: Unifying {{{register}}} and {{{register_public}}}. Use the
336     optional {{{~sp}}} parameter to register during session.
337   * Eliom: Idem for all functions {{{..._during_init}}} and
338     {{{..._during_session}}}
339   * Eliom: Functions to remove data from tables
340   * Ocsigen: Debug mode: the exception is printed on the error page
341   * Ocsigen: Bugfix in {{{Preemptive.detach}}} when used with
342     {{{Lwt_unix.run}}}
343   * Ocsigen: Bugfix - launching ocsidbm for MacOS
344   * Eliom: Bugfix - GC of sessions and session data
345   * Eliom: Bugfix - GET actions were not working properly
347 ===== 0.99.0 (2007-05-05) =====
349   * EXPERIMENTAL: Native code support. It is now possible to use
350     Ocsigen in native code. BUT: to use that, you need a modified
351     version of OCaml, that allows dynlinking of native code modules
352     (natdynlink branch in OCaml's CVS, by Alain Frisch).
353   * OCaml 3.10 support (syntax extension with new Camlp4)
354   * The functor Ocsigen.Make (add new types of pages for Ocsigenmod)
355     is now divided into two functors, one for "register" functions,
356     and one for forms and links (if needed).
357   * New module for dynamic page creation called Eliom. Ocsigenmod is
358     now deprecated but is still in the distribution. Eliom is based on
359     Ocsigenmod.
360   * Eliom: replacing auxiliary services by coservices. Coservices may
361     have GET or (and) POST state parameter.
362   * Eliom: adding notion of non-attached coservices. They can take GET
363     or POST parameters.
364   * Eliom: Creation of a new module {{{Actions}}}. It is possible to
365     register actions on main services, coservices (attached or not).
366   * Eliom: Removing the old actions (use new actions towards
367     non-attached coservices instead)
368   * Eliom: New module {{{Unit}}} for actions without reload
369   * Eliom: New module {{{Redirections}}} to register redirection
370     pages.
371   * Eliom: New module {{{Files}}} to register services that send
372     files.
373   * Eliom: New module {{{Any}}} to register services that choose what
374     they send.
375   * Eliom: New module {{{Blocks to register services that send a box
376     of type body content.
377   * Eliom: Module {{{Text}}} replaced by {{{HtmlText}}}, and adding
378     {{{CssText}}} and {{{Text}}} (for any content type).
379   * Eliom: Bugfix - Typing errors of parameters are now catched only
380     if the names of parameters fit exactly.
381   * Eliom: {{{register_service}}} now called {{{register}}}.
382   * Eliom: EXPERIMENTAL Fallbacks can now get a "Session expired" from
383     previous pages and actions may send informations to the page
384     generated (using exception).
385   * Eliom: Now possible to pre-apply services (to make links or to be
386     used as fallbacks for coservices)
387   * Eliom: services can now set their own cookies
388   * Eliom: Disposable coservices (coservices that you can use only n
389     times)
390   * Eliom: Nurpawiki: example of Wiki written by Janne Hellsten
391   * Eliom: New handling of URLs with suffixes
392   * Ocsigen: New module Ocsipersist for persistent data, using its own
393     DBM server (ocsidbm)
394   * Eliom: Persistent sessions using Ocsipersist
395   * Eliom: Timeouts for sessions
396   * Eliom: Timeouts for coservices
397   * Ocsigen: It is now possible to give parameters to extensions in
398     configuration file.
399   * Ocsigen: Simplifying parsing of configuration file (could be
400     improved).
401   * Ocsigen: EXPERIMENTAL It is now possible to reload the modules
402     without stoping the server.
403   * Staticmod: Rewriting of URLs using regular expressions.
405 ===== 0.6.0 (2007-03-14) =====
407   * {{{configure}}} script
408   * {{{<select>}}} in forms, by Stéphane Dalmas
409   * EXPERIMENTAL: The Web server is now extensible. It means that you
410     can add modules (like Apache modules) for generating pages,
411     filters of requests, extensions of config files. For now there are
412     two modules, one for static pages, and one for dynamic pages. The
413     only changes for users is that they need to dynlink staticmod.cmo
414     and ocsigenmod.cma from the configuration file. The syntax of
415     config file for modules and staticdir also changed.
416   * It is now possible to specify the encoding of characters for each
417     sub-site.
418   * Now usable with Ocamlnet 2.2 or 1.1.2.
419   * EXPERIMENTAL: If OCamlDuce is installed on your system, you can
420     now use it to do the type-checking of your pages (see the
421     documentation). Warning: This is broken with OCamlDuce 3.09.2
422     patch level 2. You need at least OCamlDuce 3.09.3 patch level 1.
423   * Removing Ocsimore from the default distribution. That version of
424     Ocsimore is not supported anymore. Ocsimore has been rewritten
425     from scratch by Piero Furiesi.
427 ===== 0.5.1 (2006-12-14) =====
429   * Bugfix Konqueror: Multipart forms with now work correctly with
430     Konqueror
431   * Bugfix Internet Explorer: getting around a bug of Internet
432     Explorer while displaying page
433   * Bugfix NetBSD: Makefile
434   * Bugfix Debian for HPPA, Mips, Alpha: Makefile
435   * Bugfix: preemptive.cmi was missing in the installation directory
436   * Adding manpage (S. Mimram)
437   * Adding logrotate configuration
438   * Daemon mode: adding setsid and redirect stdout/stderr to
439     /dev/null. Closing stdin.
441 ===== 0.5.0 (2006-11-23) =====
443   * HTTP 1.1 improved (HEAD, ETag, keep-alive implemented,
444     If-Modified-Since, ...)
445   * HTTPS support
446   * Pipelining of requests
447   * Server can listen on several ports
448   * Multiple servers: you can now define several servers in the config
449     file.
450   * Virtual hosts: filtering on hostnames/ports (with wildcards)
451   * Asynchronous file upload with multipart support
452   * Large file transfer improved.
453   * MIME types are now parsed from a file
454   * Changes in the syntax of config file
455   * Accessors for server parameters. Use ({{{get_user_agent sp}}})
456     instead of {{{sp.user_agent}}}.
457   * Page generation is now using {{{Lwt}}} cooperative threads, to
458     make it possible the generation of several pages at the same
459     time. Practically, add {{{Lwt.return}}} before the page you want
460     to send, and use cooperative input/output functions.
461   * Typing errors of parameters are now catchable.
462   * {{{static_dir}}} is now a function
463   * Most of global references have been removed. You now need to give
464     sp as parameter to {{{register_for_session}}}, {{{static_dir}}},
465     {{{close_session}}}, etc.
466   * Links and forms now take {{{server_params}}} instead of
467     {{{current_url}}} ({{{sp}}} is shorter than {{{sp.current_url}}})
468   * EXPERIMENTAL: Use of preemptive threads for non cooperative
469     libraries ({{{detach}}} function).
470   * EXPERIMENTAL: The {{{Ocsigen}}} module now contains a functor
471     {{{Make}}} to allows the use of several ways of generating
472     XHTML. The default way (using {{{XHTML.M}}} or the syntax
473     extension) can be used by doing {{{open Ocsigen.Xhtml}}}. There is
474     also an untyped xhtml generation module called {{{Ocsigen.Text}}}.
475   * EXPERIMENTAL: extension of forms.
476   * Reorganisation of the code
477   * Bugfixes in makefiles
478   * Bugfix: escaping of strings in xhtml with syntax extension (thanks
479     to David Mentre)
481 ===== 0.4.0 (2006-06-06) =====
483   * Full reimplementation of the core using Generalized Algebraic Data
484     Types,
485   * {{{_int}}}, {{{_string}}}, etc. are now called {{{int}}},
486     {{{string}}}, etc.
487   * The type {{{_http_params}}} is now called {{{server_params}}},
488   * Services functions now all take 3 parameters, one for server
489     parameters, one for GET parameters, and one for POST
490     parameters. Note that {{{**}}} is used to create **pairs** and not
491     tuples.
492   * The {{{a}}} and {{{post_form}}} functions now take a fix number of
493     parameters, correponding to GET parameters.
494   * //URLs// are now called //services//,
495   * //state URLs// are now called //auxiliary services//,
496   * {{{register_post_url}}} does not exist anymore. use
497     {{{register_service}}} instead (idem for all other
498     {{{register_post_*}}} functions).
499   * Changes for prefix URLs
500   * Small changes for actions
501   * EXPERIMENTAL: sums, bool and list types for services and forms
502   * small bugfixes
504 ===== 0.3.27 (2006-04-27) =====
506   * Change the way to get server parameters
508 ===== 0.3.26 =====
510   * Load unsafe modules
511   * Other small changes
513 ===== 0.3.25-2 (2006-02-24) =====
515   * Small bugfix for 64 bits processors
516   * bugfix for static files
517   * {{{action_link}}} is now called {{{action_a}}}
519 ===== 0.3.24 (2006-02-07) =====
521   * More documentation
522   * Change types {{{internal_url}}} and {{{external_service}}} to use
523     polymorphic variants
525 ===== 0.3.23 (2006-02-07) =====
527   * Better handling of static files and "403 Forbidden" message