PackageTrack
Sign in Get early access

relic

A lightweight and flexible web server inspired by Shelf for building APIs and backend services.

1.2.0 379K downloads/mo #596 most downloaded on pub.dev serverpod/relic

What this package is like to depend on

Last release 13 days ago

10 Aug 2026

Release timing varies

gaps range from 9 days to 4 months

Nearly every release is documented

notes for 24 of 24 stable releases

Nothing withdrawn

no release was ever pulled

2 years old

26 releases · first in 2024

21 releases in the last 12 months

see the full history below

Release timeline

26 releases · Aug 2024 to Aug 2026
2025 2026
Release Pre-release

Releases

latest 26
  1. 2.0.0-beta.1 10 Aug 2026 pre-release
    Release notes
    • feat: Add CacheControlHeader.parseStrict for validating own values (#370)
      • Throws a FormatException for an unrecognized directive or a malformed delta-seconds value instead of ignoring it
      • Intended for values under the sender's own control, such as server configuration; parse remains lenient per RFC 9111 5.2
    Open source →
  2. 2.0.0-beta.0 24 Jun 2026 pre-release
    Release notes

    Overhaul of typed HTTP headers for RFC compliance, landing in concert with serverpod 4.0. Parsing of received (request) headers is lenient (except security-sensitive ones), while construction and serialization are always strict. Many typed headers changed shape and/or semantics, so this is a breaking release.

    • refactor!: Cookie and Set-Cookie headers (#361)
      • BREAKING: SetCookie now represents a single cookie, and SetCookieHeader is a List<SetCookie> collection (one Set-Cookie line per cookie, RFC 6265 4.1). The previous single-cookie SetCookieHeader(name:, value:, ...) API is replaced by SetCookie(...); augment a response with mh.setCookie = (mh.setCookie ?? const SetCookieHeader.empty()).add(cookie)
      • The request Cookie header is parsed leniently: a malformed cookie is skipped and the header is rejected only when no cookie in it is usable
      • Add CookieHeader.getCookies(name) returning every cookie with that name in order; byte-identical duplicates are preserved (not collapsed)
      • Set-Cookie decode is strict (it is produced by the server): a malformed attribute rejects the cookie
      • Domain is normalized per RFC 6265 5.2.3 — the full leading-dot run is stripped and the host is lower-cased; an all-dots Domain is rejected
      • Max-Age is parsed as a strict decimal integer per RFC 6265 5.2.2; non-decimal values such as 0xFF are rejected
      • Nameless =value segments are dropped when parsing the request Cookie header
    • feat!: RFC compliant typed headers (#360) — fixes #113, #142
      • Many typed headers changed their Dart interface and/or their parse/serialize semantics
      • Parsing is lenient on receive; construction and serialization are strict
    Open source →
  3. 1.2.0 11 Mar 2026
    Release notes
    • feat: Make NormalizedPath interning cache configurable (#343)
      • Introduce abstract Cache<K, V> interface
      • Add NoCache implementation for high-cardinality workloads
      • LruCache now implements Cache
      • NormalizedPath.interned can be swapped to any Cache implementation
    • feat: Add staticChangeCount and VM service extension to DeveloperTools (#341)
    • feat: Add DeveloperTools class to RelicApp (#340)
    Open source →
  4. 1.1.1 05 Mar 2026
    Release notes
    • docs(ai): Adds skills for AI agents based on documentation. (#338)
    Open source →
  5. 1.1.0 23 Feb 2026
    Release notes
    • feat: Allow internal request forwarding with req.forwardTo(newReq) (#331)
    • feat: Add indexAssets() and tryAssetPathSync() to CacheBustingConfig (#332)
    • feat: Auto-index assets in StaticHandler when cache busting is configured (#332)
    Open source →
  6. 1.0.0 10 Feb 2026
    Release notes

    Relic is now considered stable and production-ready! 🎉

    Open source →
  7. 0.15.1 04 Feb 2026
    Release notes
    • fix: Downgrade meta dep to ^1.16.0 to match flutter 3.32.0 (serverpod lower bound) (#325)
    Open source →
  8. 0.15.0 03 Feb 2026
    Release notes
    • feat: Add virtual host routing support (#322)
      • Add useHostWhenRouting parameter to routeWith() middleware
      • Add useHostWhenRouting parameter to RelicApp
      • When enabled, routing uses {host}{path} for route matching
    • feat: Add paths, toString(), and toDot() to PathTrie for debugging (#320)
    • feat: Add force parameter to server close() method (#317)
    • refactor: Restructure into multi-package workspace with relic_core, relic_io, and relic packages
    Open source →
  9. 0.14.0 15 Dec 2025
    Release notes
    • feat!: Add optional consume flag to attach (#309)
      • BREAKING: attach now throws ArgumentError when called with a tail path (/**), unless consume: true and the attached trie/router has a single value at the root (isSingle)
      • BREAKING: group now throws ArgumentError when called with a tail path
      • Add consume flag to attach that resets the attached trie's root after attachment
      • Add isSingle property to check if a trie/router has only a single root value/route
      • Allow attach(..., consume: true) at tail paths (/**) when the attached trie/router isSingle
      • Update injectAt to use attach(..., consume: true), still enabling injection at tail paths for simple HandlerObjects (those adding a single handler at the root ('/'))
    Open source →
  10. 0.13.1 09 Dec 2025
    Release notes
    • fix: Close connection, if request too large (#303)
    Open source →
  11. 0.13.0 08 Dec 2025
    Release notes
    • feat!: Add maxLength argument on read (#301)
    Open source →
  12. 0.12.0 03 Dec 2025
    Release notes
    • feat!: Support back-tracking during routing (#297)
    • fix: Ensure close is idempotent (#295)
    Open source →
  13. 0.11.0 27 Nov 2025
    Release notes
    • feat!: Add typed accessor for query and path parameters (#288)
    • feat: Introduce ConnectionInfo (#273)
    • feat: Add IPAddress class (independent of dart:io) (#272)
    • refactor!: Simplify ContextProperty interface
    • refactor!: Disallow url rewriting in Request.copyWith (#289)
    • refactor!: Use named ctors on all header classes (#283)
    • refactor!: Avoid repeating ctor name on parameter (#282)
    • fix!: Remove stale arguments from Request and Response class (#274)
    • fix: Don't overwrite Content-Length when set as header (#291)
    Open source →
  14. 0.10.0 05 Nov 2025
    Release notes
    • refactor!: The Great Simplification (#264)
      • Merged RequestContext into Request by moving the token property
      • HandledContext renamed to Result
      • Merge ResponseContext into Response (now implements Result)
      • Removed respond(), hijack(), and connect() methods - handlers can construct and return Results directly
      • Updated handler signatures: Handler = FutureOr<Result> Function(Request req)
      • Consolidated context classes into single file using part files
      • Updated all examples and tests
      • Significant simplification of the class hierarchy by eliminating the:
      • Context,
      • RequestContext,
      • RespondableContext,
      • HijackableContext,
      • ConnectableContext, and
      • ResponseContext interfaces
      • Renamed ConnectionContext to WebSocketUpgrade (now extends Result)
      • Renamed HijackedContext to Hijack (now extends Result)
    Open source →
  15. 0.9.2 03 Nov 2025
    Release notes
    • feat: Expose noOfIsolates parameter on serve extension on RelicApp (#260)
    • feat: Add injectAt extension method on Router<T> (#261)
    • feat: Allow re-run of RelicApp.run after close (#257)
    Open source →
  16. 0.9.1 30 Oct 2025
    Release notes
    • feat: Add async RelicServer.connectionsInfo() method (#255)
      • Adds a connectionsInfo() method to RelicServer that returns the current number of active, closing, and idle connections.
      • A new ConnectionsInfo typedef is introduced as a record type with active, closing, and idle fields.
    Open source →
  17. 0.9.0 29 Oct 2025
    Release notes
    • refactor!: Context renaming (#251) Renames core context types for improved clarity and consistency:
      • NewContextRequestContext
      • ConnectContextConnectionContext
      • HijackContextHijackedContext
      • Base class RequestContext renamed to Context
    • chore!: Upgrade sdk to ^3.7.0 (#239)
    • feat: Introduce MultiIsolateRelicServer (#216) Implements multi-isolate support for RelicServer to enable concurrent request handling across multiple CPU cores. Adds noOfIsolates optional named parameter to RelicServer constructor, and RelicApp.run.
    • fix: Mask sensitive credentials in authorization header toString() methods (#238)
    Open source →
  18. 0.8.0 23 Oct 2025
    Release notes
    • feat!: RelicApp now supports hot-reload (#226)
    • feat: Introduce RelicApp (#212)
    • feat: Introduce MiddlewareObject (#211)
    • feat: Introduce HandlerObject (#210)
    • feat(router): Add fallback property for unmatched routes (#196)
    • feat(router): Add asHandler extension to use Router<Handler> as Handler (#209)
    • feat: Adds support for cache busting (#192)
    • feat: Support mime-type inference (#206)
    • feat: Add NewContext.withRequest convenience method (#198)
    • fix: Build platform correct path when serving files. (#207)
    Open source →
  19. 0.7.0 03 Oct 2025
    Release notes
    • feat(router): Add support for setting up mappings of values on lookup router.use(path, map) (#186)
    • feat(trie): Add support for setting up mappings of values on lookup trie.use(path, map) (#185)
    Open source →
  20. 0.6.0 29 Sep 2025
    Release notes
    • feat!: Custom CacheControl header per file (#167)
    • feat!: Distinguish between path and method miss in router lookups (#179)
    • feat!: Remove automatic X-Powered-By header (#169)
    • feat!: Remove unused strict flag (#181)
    • feat(router): Router.group (#157)
    • feat: Add operator== and hashCode on all header classes (#155)
    • fix: HEAD request should match GET except for body, including Content-Length (#180)
    • fix: Host header is not a Uri. Introduce an RFC3986 compliant HostHeader class (#142)
    • fix: Rip out Router.staticCache (#172)
    • fix: Set content length on body, not headers (#161)
    Open source →
  21. 0.5.0 01 Sep 2025
    Release notes
    • refactor!: Rename withResponse to respond (matches connect/hijack) (#134)
    • docs: Adds a docusaurus documentation page for relic. (#132)
    • refactor!: Static File Handler Overhaul (#127)
    Open source →
  22. 0.4.1 03 Jul 2025
    Release notes
    • fix: Export bindHttpServer in io_adapter.dart (#114)
    • fix: Handle ':' in BasicAuthorizationHeader parser correctly (#112)
    Open source →
  23. 0.4.0 30 Jun 2025
    Release notes
    • fix: Missing convenience getters and setter for Headers.xForwardedFor (#108)
    • refactor!: Get rid of old context map on Message (Request/Response) (#105)
    • feat: X-Forwarded-For typed header (#107)
    • feat: Add ContextProperty class (wraps Expando) (#94)
    • feat: Typed forwarded header (#101)
    • build(deps): Bump cli_tools from 0.5.1 to 0.6.0 (#100)
    • refactor!: Replace DuplexStreamChannel with RelicWebSocket (#91)
    • test: Add headers constants test and rename file (#89)
    • build(deps): Bump lints from 5.1.1 to 6.0.0 (#92)
    • fix: Fix request/response header sets (#90)
    • docs: Update router docs (#88)
    • docs: Update router entry comment (#87)
    • feat: WebSocket support (#84)
    • feat: Store benchmark results with git notes (#79)
    • feat: The routeWith middleware builder function is now generic. (#78)
    • feat(Handler)!: Signature changed (#76)
    • feat: Add Router.isEmpty getter (#75)
    • docs: Add CONTRIBUTING.md and CODE_OF_CONDUCT.md (#69)
    • feat: PathTrie wildcard and tail matching support (#70)
    • feat: Router middleware (#68)
    • feat!: Router now supports verb directly (#65)
    • docs: Add badges for codecov, etc. (#67)
    • feat: Add addOrUpdate, update, and remove to PathTrie (#63)
    • feat: Support Router.attach (#62)
    • feat: Allow a trie to be attached as a subtrie to another (#61)
    • feat: Router class (#52)
    • refactor!: Decouple from dart:io and avoid using exceptions for control-flow (#48)
    • chore: Add serverpod lints (#46)
    • feat!: Replace HeaderDecode with HeaderCodec to allow customization on encoding as well (#43)
    • fix: Ensure cache is updated immediately (#42)
    • feat!: Support typed access to custom headers (#38)
    • ci: Hoist continue-on-error to job (#37)
    • ci: Add test coverage (#36)
    • fix!: RelicServer cannot reliably know the Uri to use to hit it (#32)
    • chore: Automate publishing to pub.dev when semver tag is created (#31)
    • chore: Add pull request title validation. (#30)
    • refactor!: Get rid of RelicAddress. (#29)
    Open source →
  24. 0.3.0 21 Jan 2025
    Release notes
    • feat: Implements lazy loading when parsing headers to avoid unnecessary validation.
    • feat: Makes address strongly typed and adds RelicAddress type.
    • fix: Resolves issue with Content-Length header conflicting with Transfer-Encoding: chunked.
    Open source →
  25. 0.2.0 17 Dec 2024
    Release notes
    • First tech preview.
    Open source →
  26. 0.1.0 13 Aug 2024
    Release notes
    • Initial version.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive