This is an overview of the user-visible changes to Catalyst between major
Catalyst releases.
+=head2 VERSION 5.90100
+
+Support for type constraints in Args and CaptureArgs has been improved. You may
+now inherit from a base controller that declares type constraints and use roles
+that declare type constraints. See L<Catalyst::RouteMatching> for more.
+
+You may now. also use a full type constraint namespace instead of inporting type
+constraints into your package namespace.
+
+We changed the way the middleware stash works so that it no longer localizes
+the PSGI env hashref. This was done to fix bugs where people set PSGI ENV hash
+keys and found them to dissappear in certain cases. It also means that now if
+a sub applications sets stash variables, that stash will now bubble up to the
+parent application. This may be a breaking change for you since previous
+versions of this code did not allow that. A workaround is to explicitly delete
+stash keys in your sub application before returning control to the parent
+application.
+
+=head2 VERSION 5.90097
+
+=head3 Defined how $c->uri_for adds a URI fragment.
+
+We now have a specification for creating URIs with fragments (or HTML anchors).
+Previously you could do this as a side effect of how we create URIs but this
+side effect behavior was never documented or tested, and was broken when we
+introduced default UTF-8 encoding. When creating URIs with fragments please
+follow the new, supported specification:
+
+ $c->uri_for($action_or_path, \@captures_or_args, @args, \$query, \$fragment);
+
+This will be a breaking change for some codebases, we recommend testing if
+you are creating URLs with fragments.
+
+B<NOTE> If you are using the alternative:
+
+ $c->uri_for('/foo/bar#baz')
+
+construction, we do not attempt to encode this and it will make a URL with a
+fragment of 'baz'.
+
+=head2 VERSION 5.90094
+
+=head3 Multipart form POST with character set headers
+
+When we did the UTF8 work, we punted on Form POSTs when the POST envelope was
+multipart and each part had complex headers such as content-types, character
+sets and so forth. In those cases instead of returning a possibly incorrect
+value, we returned an object describing the part so that you could figure it
+out manually. This turned out to be a bad workaround as people did not expect
+to find that object. So we changed this to try much harder to get a correct
+value. We still return an object if we fail but we try much harder now. If
+you used to check for the object you might find that code is no longer needed
+(although checking for it should not hurt or break anything either).
+
=head2 VERSION 5.90091
=head3 'case_sensitive' configuration