Kemal is a Fast, Effective, Simple web framework for Crystal.

Hello everyone,

Kemal 1.12.0 is out :tada: This release brings Crystal 1.21.0 support and a first-class sse helper for Server-Sent Events, plus a handful of reliability and DX fixes.

Server-Sent Events with sse :zap:

You can now stream events to the client with a dedicated sse route helper—no manual header juggling required (#755):

sse "/events" do |stream, env|
  stream.send("tick", event: "tick", id: 1)
end

Ideal for live dashboards, notifications, and any one-way push where WebSockets would be overkill. Keep the connection open, send named events with optional ids, and let Kemal handle the SSE framing.

Crystal 1.21.0 support :crystal_ball:

Kemal 1.12.0 is tested and ready for Crystal 1.21.0. The minimum Crystal version is now >= 1.12.0—please upgrade your toolchain if you are still on an older release.

Fixes and polish :wrench:

  • Headers already sent: Avoid an unhandled exception when an error path tries to write headers that were already flushed to the client (#760).
  • before_all filters: Fixed filters running twice (#758).
  • CLI --help: Show the actual host/port defaults when they have been overridden (#751).

Full change history and PR links are in the CHANGELOG. Release tag: v1.12.0.

For end-to-end sample apps (blog, JSON API, WebSockets, OAuth, and more), see Kemal by Example on GitHub.

Thanks for using and supporting Kemal. You can help sustain development via GitHub Sponsors :pray:

Happy Crystalling :heart: