Dancer 2.1.0 Released

We're thrilled to announce the release of Dancer2 2.1.0! This release represents a major investment in the health and quality of the project. We've gone deep into the issue tracker and PR backlog, closing out some of our oldest open issues — some dating back years — and significantly grooming both the issue and pull request queues. A big thank you to everyone who contributed.

Bug Fixes

This release addresses a number of long-standing issues:

  • UTF-8 handling improvements: to_json no longer double-encodes UTF-8 (#686), the charset config option is now properly respected (#1124), and UTF-8 in URLs is handled correctly (#1143). To the best of our knowledge, this release fixes all known UTF-8 issues. The default charset for Dancer2 apps is now UTF-8 rather than undefined. You can set an empty charset for your app if needed.
  • Case-insensitive system confusion has been resolved (#863).
  • Plugin DSL keywords are now app-specific (#1449, #1630), preventing cross-application bleed in multi-app setups.
  • Test suite fixes: Resolved content_type errors in t/dsl/send_file.t (#1772), JSON warnings in t/dsl/send_as.t (#1773), and void warnings in t/hooks.t (#1774).
  • Windows compatibility: File uploads are now properly unlinked on Windows (#1777).

Enhancements

  • Strict config mode (#763): Dancer2 can now warn on unknown config keys, with an opt-out available. New apps scaffolded with dancer2 gen will have strict config enabled by default.
  • Path::Tiny migration (#1264): Internal path handling has moved to Path::Tiny for cleaner, more reliable file operations.
  • Unicode::UTF8 support (#1594): When Unicode::UTF8 is available, Dancer2 will use it for faster encoding/decoding.
  • Batch session cookie access (#1073): Retrieve multiple session cookie values at once with the clear method.
  • Fully qualified engine namespaces (#1323): All engines now accept fully qualified package names.
  • Double server header fix (#1664): Dancer2 no longer sends duplicate Server headers.
  • Improved send_as (#1709): send_as now uses the full serializer pipeline, including hooks.
  • Dispatching improvements (PR #1757): Removed the deprecated api_version and improved the dispatching loop.
  • MIME ownership (PR #1758): MIME type handling has been moved to the app level.
  • Package name in logger output (PR #1780): Logger output can now include the calling package name, making multi-module debugging easier.

Documentation

  • Better documentation for the views setting behavior (#1431).
  • Fixed broken links in the manual and tutorial (PR #1749, #1750).
  • Improved config documentation structure (PR #1753).
  • Removed the stale logger keyword from the DSL docs (PR #1762).

Security

  • The "Powered by..." text has been removed from the default error page (PR #1776). Security researchers flagged this as an information disclosure concern — advertising the framework and version in error responses gives potential attackers a head start. The default error page is now clean of framework identifiers.

Thank You

Thanks to all who contributed to this release: Sawyer X, Russell Jenkins, Mikko Koivunalho, Gil Magno, and Sorin Pop.

You can install or upgrade via CPAN:

cpanm Dancer2

Happy Dancing!

Jason/CromeDome

Dancer2 2.0.1 Released

Dancer2 2.0.1 has been released. It's a small maintenance release that fixes a few broken documentation links.

Enjoy, and keep Dancing!

Jason / CromeDome

Announcing Dancer2 2.0.0

At long last - Dancer2 2.0.0!

I apologize it took longer than expected - open source doesn't always move as fast as we'd like it to - but there's a lot of great things in this release that make it worth the wait.

Head on over to Perl.com to check out the details. Here's a quick summary of what's new:

  • New documentation, courtesy of a grant from the Perl and Raku Foundation
  • Extendable config system, thanks to Mikko Koivunalho
  • Removed Dancer2::Template::Simple from core Dancer2
  • Retired our fork of Template::Tiny, and integrated our changes into the core distribution (thanks, @ether!)
  • Configurable data/secrets censoring with Data::Censor
  • Logging of hooks as they are executed
  • New hook: on_hook_exception
  • CLI improvements:
    • Changes that allow for scaffolding of other things (plugins, etc.) in future Dancer2 releases
    • Scaffolding of tutorial app

We're really excited for this release, and we hope you are too!

Keep Dancing!

Jason/CromeDome

A Quick Update on Dancer2 2.0.0

Hi all,

Hope you are all having a great summer!

Work continues on Dancer2 2.0.0, albeit a bit slower than planned. It's summer; trips happen, things come up, etc. etc. Progress is still happening though - we took in a few extra PRs (with one more incoming still), and a few more approvals for some items are needed.

I'll keep dropping updates as the release approaches. Hoping you are all as excited for this as I am :-)

Keep on Dancing! Jason

Upcoming Dancer2 2.0.0 release

The Dancer Core Team is excitedly preparing a major release of Dancer2, 2.0.0. In advance of this, I'd like to give you all a preview of what to expect:

  • A handful of bug fixes

  • Customizable scrubber/censor engine (when dumping errors, etc. - a long requested feature)

  • Remove Template::Tiny fork from core (Template::Tiny support remains, but ether graciously merged our customizations into Template::Tiny)

  • Remove Dancer2::Template::Simple from the core of Dancer2

  • New documentation, courtesy of a TPRF grant

  • Removal of deprecated code (according to our deprecation policy)

  • Official support for Perl 5.22 and newer

The following features are possible, but not likely for 2.0.0 (but maybe soon thereafter):

  • Bring your own config engine (TOML, JSON, etc.)

  • Using Throwable to produce errors

I'm estimating a release in the next 2-4 weeks. There are still a few bikesheds to paint, cats to herd, and yaks to shave.

If you have questions or feedback, we'd love to hear from you! Until then, keep Dancing, then Dance a little happier! :)

Jason/CromeDome