Kemal is a Fast, Effective, Simple web framework for Crystal.
Hello everyone,
Kemal 1.12.0 is out
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
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
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
- Headers already sent: Avoid an unhandled exception when an error path tries to write headers that were already flushed to the client (#760).
-
before_allfilters: 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 ![]()
Happy Crystalling ![]()
