NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A collection of useful utility classes for building HTTP server.
Last release today
23 Oct 2026
Release timing varies
gaps range from 2 weeks to 1.2 years
Nearly every release is documented
notes for 15 of 15 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
16 releases · first in 2021
One column per quarter.
Breaking: Requires Dart 3.13 or later.
HttpBodyHandler always decodes an application/json body as UTF-8, as RFC 8259 requires, and ignores any charset parameter. A leading byte order mark is ignored. A body that is not valid UTF-8 fails. This applies to processResponse too, so a response from a server that sends JSON in another charset, such as application/json; charset=iso-8859-1, now fails with a FormatException.HttpBodyHandler requires an application/x-www-form-urlencoded body to be ASCII, with any other character percent-encoded as UTF-8, as the URL Standard does. The request's charset and the default encoding are ignored for such a body. A body with raw non-ASCII bytes, or with a percent-escape that is not valid UTF-8, such as %E9 for a Latin-1 é, is rejected with 400 Bad Request.//other.host/dir could previously redirect the client to other.host./%FF, gets a 400 Bad Request instead of an unhandled error and no response. If a custom errorPageHandler throws, or its future completes with an error, the response is still closed. errorPageHandler now accepts a FutureOr<void> Function(HttpRequest), so an async handler can be typed as such; existing handlers are unaffected.If-Modified-Since compares modification times to the second, as HTTP dates do, so unchanged files and listings get a 304 Not Modified.serveRequest completes normally instead of with the connection error.HEAD request for a directory listing gets the headers without the listing.Range value too large for an integer is handled like any other out-of-range value, instead of making an existing file a 404 Not Found.Range that starts at or past the end of the file, such as bytes=10- for a 10-byte file, gets a 416 Range Not Satisfiable instead of the whole file. So does a suffix range of no bytes, bytes=-0. A 416 response has a Content-Range: bytes */<length> header. The Range header is ignored for an empty file, which is served with 200 OK.multipart/form-data body with no boundary, or a part with no name, fails with an HttpException, instead of a TypeError that escaped as an uncaught error.Updated dependencies to the latest release
lints to 6.0.0* Require Dart >= 3.5 * Updated lints to 5.0.0 * Updated mime to 2.0.0
lints to 5.0.0mime to 2.0.0* Updated lints to 4.0.0
lints to 4.0.0* Require Dart >= 3.3
* Upgraded lints to 3.0.0
lints to 3.0.0Fixed _VirtualDirectoryFileStream class due to change in Dart 3.0.3
_VirtualDirectoryFileStream class due to change in Dart 3.0.3* Updated README
* Upgraded test_api to 0.6.0
test_api to 0.6.0* Require Dart >= 3.0
* Require Dart >= 3.0 * Fixed linter warnings
* Require Dart >= 2.17 * Fixed analyzer warnings
Updated linter to package:lints
package:lintsTransfered repository to dart-backend
dart-backend* Added example
Migrated to belatuk_http_server
belatuk_http_serverYour coding agent can read these notes before it upgrades. Set up the MCP server →