Jason's handling of the releases allows us to maintain a higher quality of releases, including timing, announcements, and double checking the important Pull Requests and issues are resolved prior to the release.

Jason Crome started by fixing up the documentation and moved on to help with the releases themselves. If you looked up Dancer2 recently on CPAN, you probably recognize his picture by now. :)

If you have raised an issue, you have likely interacted with Peter. He takes care of the queue, co-organizes the conferences, and managed the entire transition to the new plugin architecture, helping authors by testing their code and transitioning the syntax.

You now have a shim for eval behavior. If you need such an option, you already understand what it means.

The template keyword can now be used outside a request. The relevant request-specific variables will not be available (since it's outside a request), but everything else will be available.

We have added a configuration option for improved security in cookies. We will feature an article on them as well.

You can now provide additional local configuration files that will be loaded, but can be kept out of a version control repository.

You will notice you cannot push a request header. This is on purpose, since request headers should not change, they only represent the request you received.

Noticing we only have headers to handle the response headers, we have introduced several keywords to help you handle the request headers.

They will also appear in their own advent article. Stay tuned!

We have introduced new keywords to retrieve information from the route, query, or body parameters. They help handle common incorrect and risky patterns.

The send_file keyword will now also stream the response asynchronously if it's available. You don't need to think about it. You don't even know it does it, but it does, automatically, or you. :)

The prefix syntax allowed you to reduce the repeated parts of strings, and it now supports the full spec in order to allow you to reduce the pattern strings:

This topic has its own article in this year's advent calendar. Stay tuned!

We have finally introduced the ability to provide asynchronous and streaming responses. This allows you to do various interesting things, but it can be quite complex.

We have revamped our documentation.

The original documentation had irrelevant parts from Dancer 1 which no longer apply to Dancer 2, outdated components, unclear and confusing descriptions, and quite honestly, were hard to navigate.

The rewritten documentation focus on clarifying how a Dancer 2 program is constructed, the definitions we use and what they mean, the important keywords, and how to use the syntax.

It does not delve into deprecated patterns, nor does it explain it. The reasoning is that you could find it if you search, but we don't want to teach you what you shouldn't be doing.

Documentation is a live project at any given time and our documentation is no different. This means we always need additional help with it. If you find something to improve, please let us know. We would appreciate your help.