NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A high-powered HTTP server with dependency injection, routing and much more.
Last release 7 years ago
no release in 18 months
Ships fairly regularly
a new release about every 5 weeks
Rarely documented
notes for 9 of 56 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
194 releases · first in 2016
AngelHttp.uri now returns an empty Uri if the server is not listening.
AngelHttp.uri now returns an empty Uri if the server is not listening.This release was originally planned to be 2.0.5, but it adds several features, and has therefore been bumped to 2.1.0.
2.0.5, but it adds several features, and has
therefore been bumped to 2.1.0.One column per quarter.
Make @Expose() in Controller optional. https://github.com/angel-dart/angel/issues/107
@Expose() in Controller optional. https://github.com/angel-dart/angel/issues/107allowHttp1 to AngelHttp2 constructors. https://github.com/angel-dart/angel/issues/108deserializeBody and decodeBody to RequestContext. https://github.com/angel-dart/angel/issues/109HostnameRouter, which allows for routing based on hostname. https://github.com/angel-dart/angel/issues/110ThrowingReflector, instead of EmptyReflector. This will give a more descriptive
error when trying to use controllers, etc. without reflection enabled.mountController returns the mounted controller.Prepare for Dart SDK change to Stream > that are now Stream .
Stream<List<int>> that are now
Stream<Uint8List>.Run Controller.configureRoutes before mounting @Expose routes.
Controller.configureRoutes before mounting @Expose routes.Controller.configureServer always return a Future.Patch up a bug caused by an upstream change to Dart's stream semantics. See more: https://github.com/angel-dart/angel/issues/106#issuecomment-49956448
Make ResponseContext *explicitly* implement StreamConsumer (though technically it already did???)
ResponseContext explicitly implement StreamConsumer (though technically it already did???)Controller.configureServer to create Controller.applyRoutes.Fix a bug in the implementation of Controller.applyRoutes.
Controller.applyRoutes.Tracked down a bug in Driver.runPipeline that allowed fallback handlers to run, even after the response was closed.
Driver.runPipeline that allowed fallback
handlers to run, even after the response was closed.RequestContext.shutdownHooks.RequestContext.close in Driver.sendResponse.FutureOr<void>, instead of just FutureOr.Container.has<Stopwatch> check in Driver.sendResponse.new and const.* Angel 2! :angel: :rocket:
Fix an error that prevented AngelHttp2.custom from working properly.
AngelHttp2.custom from working properly.startSharedHttp2.Fix some bugs in the HookedService implementation that skipped the outputs of before events.
HookedService implementation that skipped
the outputs of before events.Fix MapService flaw where clients could remove all records, even if allowRemoveAll were false.
MapService flaw where clients could remove all records, even if allowRemoveAll were false.AnonymousService can override readData.
AnonymousService can override readData.Service.map now overrides readData.HookedService.readData forwards to inner.Make redirect and download methods asynchronous.
redirect and download methods asynchronous.Make serializer FutureOr Function(Object).
serializer FutureOr<String> Function(Object).ResponseContext.serialize return Future<bool>.Support resolution of asynchronous injections in controllers and ioc.
ioc.RequestContext and ResponseContext into requests.MapService.modify was not actually modifying items.
MapService.modify was not actually modifying items.Fixes Pub analyzer lints (see angel_route@3.0.6)
angel_route@3.0.6)Fix logic error that allowed content to be written to streaming responses after close was closed.
close was closed.Deprecated app.isProduction in favor of app.environment.isProduction.
reflector is provided.AngelEnvironment class.
Angel.environment.app.isProduction in favor of app.environment.isProduction.bodyAsObject, bodyAsMap, or bodyAsList exactly once.resolveInjection.Service.parseId<double> would attempt to parse an int.ResponseContext.render sets charset to utf8 in contentType.
ResponseContext.render sets charset to utf8 in contentType.Update pipeline handling mechanism, and inject a MiddlewarePipelineIterator.
MiddlewarePipelineIterator.
Update for angel_route@3.0.4 compatibility.
angel_route@3.0.4 compatibility.readAsBytes and readAsString to UploadedFile.Inject the MiddlewarePipeline into requests.
MiddlewarePipeline into requests.parseBody checks for null content type, and throws a 400 if none was given.
parseBody checks for null content type, and throws a 400 if none was given.ResponseContext.contentLength.streamFile to set content length, and also to work on HEAD requests.Fixed a bug that prevented body parsing from ever completing with http2.
http2 dependency.uuid dependency.http2.Providers.hashCode.Revert the migration to lumberjack for now. In the future, when it's more stable, there'll be a conversion, perhaps.
lumberjack for now. In the future, when it's more
stable, there'll be a conversion, perhaps.Use package:lumberjack for logging.
package:lumberjack for logging.Remove dependency on body_parser.
body_parser.RequestContext now exposes a Stream<List<int>> get body getter.
RequestContext.parseBody() parses its contents.bodyAsMap, bodyAsList, bodyAsObject, and uploadedFiles to RequestContext.Angel.keepRawRequestBuffers and anything that had to do with buffering request bodies.Patch HttpResponseContext._openStream to send content-length.
HttpResponseContext._openStream to send content-length.Fixed a logic error in HttpResponseContext that prevented status codes from being sent.
HttpResponseContext that prevented status codes from being sent.Remove ResponseContext.sendFile.
ResponseContext.sendFile.Angel.mimeTypeResolver.streamFile would return a 500.Allow ResponseContext.redirect to take a Uri.
readMany to Service.ResponseContext.redirect to take a Uri.Angel.mountController.Angel.findServiceOf.pkg:angel_framework/http2.dart.All calls to Service.parseId are now affixed with the argument.
Service.parseId are now affixed with the <Id> argument.uri getter to AngelHttp.parseQuery now wraps query parameters in Map<String, dynamic>.from.
This resolves a bug in package:angel_validate.- Add Service.map.
Service.map.No longer export HTTP-specific code from angel_framework.dart. An import of import 'package:angel_framework/http.dart'; will be necessary in most case
angel_framework.dart.
An import of import 'package:angel_framework/http.dart'; will be necessary in most cases now.Force a tigher contract on services. They now must return Data on all methods except for index, which returns a List .
Data on all
methods except for index, which returns a List<Data>.Allow passing a custom Container to handleContained and co.
Container to handleContained and co.MapService methods now explicitly return Map .
MapService methods now explicitly return Map<String, dynamic>.Renamed Routable.service to Routable.findService.
waterfall to chain.Routable.service to Routable.findService.
Routable.findHookedService.Added type parameters to Service.
<Id, Data> type parameters to Service.HookedService now follows suit, and takes a third parameter, pointing to the inner service.Routable.use now uses the generic parameters added to Service.HookedServiceListener, etc.Map<String, dynamic> as params now.- Added ResponseContext.detach.
ResponseContext.detach.Moved Providers.graphql to Providers.graphQL.
Angel.injectEncoders.Providers.toJson.Providers.graphql to Providers.graphQL.Angel.optimizeForProduction no longer calls preInject,
as it does not need to.ResponseContext.enableBuffer to ResponseContext.useBuffer.Removed all @deprecated symbols.
random_string dependency.package:angel_container.package:file to 5.0.0.ResponseContext.sendFile now uses package:file.ContentType in favor of MediaType.Map<String, dynamic>.package:json_god by default.package:dart2_constant.lib/hooks.dart into package:angel_hooks.TypedService into package:angel_typed_service.AngelBase class.@deprecated symbols.Service.toId was renamed to Service.parseId; it also now uses its
single type argument to determine how to parse a value. * In addition, this method was also made static.RequestContext and ResponseContext are now generic, and take a
single type argument pointing to the underlying request/response type,
respectively.RequestContext.io and ResponseContext.io are now permanently
gone.HttpRequestContextImpl and HttpResponseContextImpl were renamed to
HttpRequestContext and HttpResponseContext.Angel.lazyParseBodies was replaced
with Angel.eagerParseRequestBodies.Angel.storeOriginalBuffer -> Angel.storeRawRequestBuffers.lazyBody, lazyFiles, and lazyOriginalBuffer on ResponseContext were all
replaced with parseBody, parseUploadedFiles, and parseRawRequestBuffer, respectively.body, files, and originalBuffer),
as well as query.Angel.injections and RequestContext.injections.Angel.inject and RequestContext.inject.package:pool, which also meant removing AngelHttp.throttle.RequestMiddleware typedef; from now on, one should use ResponseContext.end
exclusively to close responses.waterfall will now only accept RequestHandler.Routable, and all of its subclasses, now extend Router<RequestHandler>, and therefore only
take routes in the form of FutureOr myFunc(RequestContext, ResponseContext res).@Middleware now takes an Iterable of RequestHandlers.@Expose.path now must be a String, not just any Pattern.@Expose.middleware now takes Iterable<RequestHandler>, instead of just List.createDynamicHandler was renamed to ioc, and is now used to run IoC-aware handlers in a
type-safe manner.RequestContext.params is now a Map<String, dynamic>, rather than just a Map.RequestContext.grab.RequestContext.properties.debug property where it still existed.Routable.use now only accepts a Service.Angel.createZoneForRequest.Angel.defaultZoneCreator.Angel constructor, ex. Angel.eagerParseBodies.handleRequest would not be caught.AngelHttp.useZone now defaults to false.ResponseContext now starts in streaming mode by default; the response buffer is opt-in,
as in many cases it is unnecessary and slows down response time.ResponseContext.streaming was replaced by ResponseContext.isBuffered.LockableBytesBuilder public.ResponseContext.willCloseItself.ResponseContext.dispose.ResponseContext.end.ResponseContext.releaseCorrespondingRequest.preInject now takes a Reflector as its second argument.Angel.reflector defaults to const EmptyReflector(), disabling
reflection out-of-the-box.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →