PackageTrack
Sign in Get early access

salvo-serde-util

serde util for salvo.

0.95.2 9.4M downloads/mo #3217 most downloaded on crates.io salvo-rs/salvo

What this package is like to depend on

Last release 18 days ago

06 Aug 2026

Release timing varies

gaps range from 8 days to 2 months

Rarely documented

notes for 10 of 70 stable releases

Nothing withdrawn

no release was ever pulled

3 years old

70 releases · first in 2024

25 releases in the last 12 months

see the full history below

Release timeline

70 releases · Jan 2024 to Aug 2026
2025 2026
Release Pre-release

Releases

latest 60 of 70
  1. 0.95.2 06 Aug 2026
    Release notes

    What's Changed

    Full Changelog: v0.95.1...v0.95.2

    Open source →
  2. 0.95.1 29 Jul 2026
    Release notes

    What's Changed

    Full Changelog: v0.95.0...v0.95.1

    Open source →
  3. 0.95.0 15 Jul 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v0.94.0...v0.95.0

    Open source →
  4. 0.94.0 07 Jul 2026
    Release notes

    v0.94.0

    Salvo 0.94.0 focuses on security hardening, OpenAPI 3.1 correctness, lower runtime overhead in core routing/dispatch paths, and API naming cleanup. This release also raises the Rust MSRV to 1.94.

    Highlights

    • Rust MSRV is now 1.94.
    • Core routing and dispatch were reworked to reduce per-request allocations and improve path parameter rollback.
    • Server lifecycle control is clearer, with Server::max_connections, ConnCtrl, improved graceful/forceful shutdown behavior, and safer default connection fuse protection.
    • OpenAPI generation is closer to OpenAPI 3.1: jsonSchemaDialect, webhooks, reusable components, PathItem refs, parameter content/examples/allowEmptyValue, and stricter required path parameters.
    • Security hardening landed across proxying, CORS, CSRF, static files, default error pages, JWT/OIDC, WebSocket upgrades, tus uploads, cookies, and ACME.
    • Response rendering semantics are documented and tightened: text-like scribes append, while Json<T> now replaces previously buffered body bytes because JSON is a complete document.
    • salvo-tus exposes storage/locking types, adds Tus::storage_root, and adds Tus::absolute_location for safe absolute Location URLs.

    Migration Guide

    Rust

    Update your toolchain to Rust 1.94 or newer.

    rustup update stable

    Core API naming

    Several old names remain as deprecated aliases, but new code should use the clearer names:

    Old New
    Depot::inject(value) Depot::insert_typed(value)
    Depot::obtain::<T>() Depot::get_typed::<T>()
    Depot::obtain_mut::<T>() Depot::get_typed_mut::<T>()
    Depot::contains::<T>() Depot::contains_typed::<T>()
    Depot::scrape::<T>() Depot::remove_typed::<T>()
    Depot::delete(key) Depot::remove(key).is_some()
    Response::stuff(status, value) Response::render_with_status(status, value)
    Server::stop_forcible() Server::stop_forceful()
    ServerHandle::stop_forcible() ServerHandle::stop_forceful()
    SchemeFilter::lack(...) SchemeFilter::fallback(...)
    HostFilter::lack(...) HostFilter::fallback(...)
    PortFilter::lack(...) PortFilter::fallback(...)
    StatusError::request_header_fields_toolarge() StatusError::request_header_fields_too_large()
    StatusError::unavailable_for_legalreasons() StatusError::unavailable_for_legal_reasons()
    AcmeListener::get_directory(...) AcmeListener::directory(...)

    Depot now has separate named and type-keyed storage. Use insert/get/remove for string keys and insert_typed/get_typed/remove_typed for type keys. Capacity and inner() refer to named storage.

    Response body rendering

    Response::write_body appends to buffered bodies. Json<T> now replaces existing buffered bytes instead of appending, because concatenated JSON documents are invalid. If you intentionally emit NDJSON or another appendable format, serialize each record yourself and call write_body.

    salvo-tus builder methods

    The tus builder API was aligned with Rust API naming guidelines. Update call sites:

    Old New
    with_store(...) store(...)
    with_locker(...) locker(...)
    with_upload_id_naming_function(...) upload_id_naming_function(...)
    with_generate_url_function(...) generate_url_function(...)
    with_on_incoming_request(...) on_incoming_request(...)
    with_on_incoming_request_sync(...) on_incoming_request_sync(...)
    with_on_upload_create(...) on_upload_create(...)
    with_on_upload_finish(...) on_upload_finish(...)

    Also prefer MaybeUploadId over the deprecated UploadId alias. TusOptions::extract_file_id_from_request replaces the old file-id helper naming.

    For absolute tus Location headers, prefer:

    let tus = Tus::new().absolute_location("https://uploads.example.com");

    Avoid relative_location(false) without a canonical origin on public services, because that derives absolute URLs from request host/forwarded headers.

    OpenAPI changes

    • Top-level $schema output was corrected to jsonSchemaDialect for OpenAPI 3.1.
    • Parameter::parameter_in(...) is deprecated; use Parameter::location(...).
    • ToParameters now defaults generated parameters to query location, so required query parameters are represented correctly.
    • Path parameters are now always serialized as required: true.
    • Routes without an HTTP method filter are skipped during OpenAPI generation instead of being fanned out to every method.
    • #[derive(Extractible)] now rejects #[serde(flatten)] on fields. Use #[salvo(extract(flatten))] for Salvo request extraction flattening.

    CORS, proxy, JWT/OIDC, and cookies

    • CORS now rejects or strips unsafe combinations of Access-Control-Allow-Credentials: true with wildcard CORS response headers. Use explicit allowed origins, headers, and methods for credentialed APIs.
    • ForwardedHeaderIssuer is deprecated because it trusts client-controlled forwarded headers unconditionally. Use TrustedProxyIssuer::new([...]) behind known proxies, or RemoteIpIssuer for direct client IPs.
    • Proxy now uses the standards-compliant host header getter by default, including non-default upstream ports. If you need the old bare-host behavior, configure default_host_header_getter.
    • OIDC JWKS symmetric keys (kty: "oct" / HS*) are rejected by default. Opt in with allow_symmetric_jwks(true) only for issuers that intentionally publish trusted symmetric keys.
    • SecureCookiePolicy is available for CSRF, flash, and session cookies. If TLS terminates before Salvo and the request scheme appears as HTTP, force secure cookies with the relevant secure_cookie(true) or policy API.

    Notable Changes

    Core and server

    • Added Server::max_connections to bound concurrent accepted connections.
    • Reworked connection protection, lifecycle control, and router matching for lower overhead and clearer shutdown behavior.
    • Added ConnCtrl to the prelude and public exports.
    • Improved routing parameter rollback, wildcard capture handling, host/port filtering for IPv6, and matched-path handling.
    • Added response render API clarity and deprecated awkward or misleading names.

    OpenAPI

    • Completed several OpenAPI 3.1 reusable component types.
    • Added top-level webhooks and PathItem $ref support.
    • Added Parameter Object content, examples, and allowEmptyValue.
    • Fixed schema generation for inline generic schemas, request body refs, generic Extractible bounds, number equality, macro diagnostics, and several user-triggerable macro panics.
    • Added endpoint attribute aliases and accepted singular/plural parameter keys interchangeably.

    Security hardening

    • Escaped the default error page and Swagger UI/static directory generated output to reduce reflected XSS risk.
    • Switched CSRF token verification to constant-time comparison.
    • Hardened proxy path normalization, upgrade handling, host headers, body error propagation, and optional authorization forwarding.
    • Added WebSocket Origin checking APIs to mitigate CSWSH on cookie-authenticated WebSocket endpoints.
    • Hardened StaticDir root boundary checks and precompressed file handling.
    • Tightened tus CORS handling, upload id validation, expiration handling, offset overflow checks, finalized-file protection, and absolute Location URL guidance.
    • Bounded OIDC/JWKS fetch sizes and cache behavior, improved OIDC revalidation races, and avoided leaking sensitive panic/error payloads.
    • Added safer secure-cookie policy handling for session, flash, and CSRF cookies.

    Fixes

    • Fixed Set-Cookie parsing/round-tripping and tower-compatible response conversion.
    • Fixed cache behavior that could swallow requests or cache non-success responses.
    • Fixed conditional request ordering, multi-range response handling, IPv6 authority parsing, ETag formatting, and range streaming.
    • Fixed multipart parsing edge cases, missing boundary handling, file-part detection, temp-file cleanup, and panic paths.
    • Fixed sliding-window rate limiting and normalized quota behavior.
    • Fixed OIDC HTTP/2 negotiation and clock-skew panic paths.
    • Fixed RequestId, caching headers, basic auth multi-header fallthrough, and logging path/address behavior.
    • Fixed multiple tus protocol and storage edge cases.

    Performance

    • Reduced allocations in routing/path matching, WebSocket upgrade, proxy path encoding, JSON response rendering, CORS header joining, compression Accept-Encoding parsing, Accept parsing, text_nonce, and write_body.
    • Added a pass-through hasher for Depot type-keyed storage.
    • Bounded cache in-flight miss coalescing and improved sliding-window rate limiter bookkeeping.
    • Added criterion benchmarks for routing and dispatch hot paths.

    Contributors

    Thanks to everyone who contributed to this release:

    New Contributors

    Full Changelog: v0.93.0...v0.94.0

    Open source →
  5. 0.93.0 30 Apr 2026
    Release notes

    What's Changed

    Full Changelog: v0.92.2...v0.93.0

    Open source →
  6. 0.92.2 24 Apr 2026
    Release notes

    What's Changed

    Full Changelog: v0.92.1...v0.92.2

    Open source →
  7. 0.92.1 22 Apr 2026
    Release notes

    What's Changed

    • Add path filter handling for invalid patterns and try_with_path method by @chrislearn in #1422
    • Add fuzzing targets and configuration for Salvo by @chrislearn in #1423
    • refactor fuzz targets to use get method for payload extraction by @chrislearn in #1424

    Full Changelog: v0.92.0...v0.92.1

    Open source →
  8. 0.92.0 17 Apr 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v0.91.1...v0.92.0

    Open source →
  9. 0.91.1 03 Apr 2026
    Release notes

    What's Changed

    • Improve file handling and metadata retrieval in NamedFileBuilder by @chrislearn in #1378
    • Optimize file handling and metadata retrieval for performance by @chrislearn in #1380
    • feat: add WebSocket protocol selection by @18o in #1381
    • perf(core): optimize allocations and minimize Arc clones in hot path by @chrislearn in #1382
    • perf(core): cache SALVO_STATUS_ERROR env var parsing by @chrislearn in #1383
    • perf(core): optimize encode_url_path and fix redirect panic by @chrislearn in #1384
    • fix(core): strip response body for HEAD requests per RFC 9110 by @chrislearn in #1385
    • perf(core): simplify Response::is_stamped with is_some_and by @chrislearn in #1386
    • perf(core): avoid String allocation in is_windows_reserved_name by @chrislearn in #1387
    • perf(core): use async metadata check in Response::send_file by @chrislearn in #1388
    • perf(csrf): use matches! macro in default_skipper by @chrislearn in #1389
    • fix(cache): call ctrl.call_next() when skipper triggers by @chrislearn in #1390
    • perf(cache): pre-allocate String in RequestIssuer::issue by @chrislearn in #1391
    • perf(rate-limiter): use HeaderValue::from for numeric headers by @chrislearn in #1392
    • perf(serve-static): cache metadata, fix list_text, reduce allocs by @chrislearn in #1394
    • perf(compression): optimize negotiate, add Vary header, fix bugs by @chrislearn in #1393

    Full Changelog: v0.90.1...v0.91.1

    Open source →
  10. 0.91.0 03 Apr 2026

    Nothing published for this version

  11. 0.90.1 02 Apr 2026
    Release notes

    What's Changed

    • Replace salvo-acme with certon for enhanced ACME support by @chrislearn in #1339
    • chore(deps): update sha2 requirement from 0.10 to 0.11 by @dependabot[bot] in #1343
    • chore(deps): update chardetng requirement from 0.1 to 1.0 by @dependabot[bot] in #1344
    • fix(oapi): replace utoipa:: path references with correct salvo crate paths by @chrislearn in #1346
    • fix(oapi): preserve doc comment indentation and split summary by paragraph by @chrislearn in #1347
    • fix(oapi): parse serde with attribute for double_option detection by @chrislearn in #1348
    • fix(oapi): make enum_values and Content.schema optional per OpenAPI spec by @chrislearn in #1349
    • fix(oapi): propagate serde attribute parsing errors instead of silently ignoring by @chrislearn in #1350
    • fix(oapi): handle tagged enum variants with flattened fields by @chrislearn in #1351
    • fix(oapi): wrap $ref schemas in allOf when title or description is needed by @chrislearn in #1352
    • fix(oapi): support nullable values in Map types by @chrislearn in #1354
    • feat(oapi): add discriminator schema attribute for enum types by @chrislearn in #1369
    • feat(oapi): add missing KnownFormat variants and Array content fields by @chrislearn in #1359
    • feat(oapi): use $ref for non-primitive generic type parameters by @chrislearn in #1367
    • feat(oapi): use prefixItems for tuple schema representation by @chrislearn in #1362
    • feat(oapi): add ToSchema impls for collections and smart pointers by @chrislearn in #1358
    • fix(oapi): Option in parameters means optional, not nullable by @chrislearn in #1355
    • feat(oapi): add encoding support for multipart request bodies by @chrislearn in #1366
    • fix(oapi): restore uint16 format and remove debug eprintln in test by @chrislearn in #1370
    • fix(oapi): support negative values in schema validation attributes by @chrislearn in #1353
    • feat(oapi): support description and title on unit struct schemas by @chrislearn in #1368
    • feat(oapi): add nest() method for prefixing and merging OpenApi documents by @chrislearn in #1365
    • feat(oapi): add extensions field to all OpenAPI types per specification by @chrislearn in #1364
    • feat(oapi): add property_names support for typed map keys by @chrislearn in #1360
    • feat(oapi): support conditional field ignore with bool or function path by @chrislearn in #1363
    • feat(oapi): add Number type for correct integer serialization by @chrislearn in #1356
    • feat(oapi): add License.identifier field (OpenAPI 3.1) by @chrislearn in #1357
    • feat(oapi): add no_recursion attribute to prevent infinite schema recursion by @chrislearn in #1361
    • feat(oapi): add ComposeSchema trait and real generics support by @chrislearn in #1371
    • [codex] fix(oapi): compose defaults for flattened schemas by @chrislearn in #1372
    • fix(oapi): add example/examples methods to AllOf/OneOf/AnyOf schemas by @chrislearn in #1373
    • fix(core): support unicode characters in Redirect URLs by @chrislearn in #1374
    • fix(oapi): handle ref keyword in PathType parsing for all contexts by @chrislearn in #1375
    • docs(cors): clarify that CORS handler must be on Service, not Router by @chrislearn in #1376
    • fix: update multer references to multra for compatibility by @chrislearn in #1377

    Full Changelog: v0.89.3...v0.90.1

    Open source →
  12. 0.90.0 01 Apr 2026

    Nothing published for this version

  13. 0.89.3 18 Mar 2026

    Nothing published for this version

  14. 0.89.2 28 Feb 2026

    Nothing published for this version

  15. 0.89.1 03 Feb 2026

    Nothing published for this version

  16. 0.89.0 28 Jan 2026

    Nothing published for this version

  17. 0.88.1 08 Jan 2026

    Nothing published for this version

  18. 0.88.0 03 Jan 2026

    Nothing published for this version

  19. 0.87.1 31 Dec 2025

    Nothing published for this version

  20. 0.87.0 31 Dec 2025

    Nothing published for this version

  21. 0.86.0 22 Dec 2025

    Nothing published for this version

  22. 0.85.0 24 Nov 2025

    Nothing published for this version

  23. 0.84.2 19 Oct 2025

    Nothing published for this version

  24. 0.84.1 29 Sep 2025

    Nothing published for this version

  25. 0.84.0 11 Sep 2025

    Nothing published for this version

  26. 0.83.0 27 Aug 2025

    Nothing published for this version

  27. 0.82.0 15 Aug 2025

    Nothing published for this version

  28. 0.81.0 19 Jul 2025

    Nothing published for this version

  29. 0.80.0 10 Jul 2025

    Nothing published for this version

  30. 0.79.0 27 May 2025

    Nothing published for this version

  31. 0.78.0 12 Apr 2025

    Nothing published for this version

  32. 0.77.1 21 Mar 2025

    Nothing published for this version

  33. 0.77.0 05 Mar 2025

    Nothing published for this version

  34. 0.76.2 04 Feb 2025

    Nothing published for this version

  35. 0.76.1 24 Jan 2025

    Nothing published for this version

  36. 0.76.0 13 Jan 2025

    Nothing published for this version

  37. 0.75.0 30 Dec 2024

    Nothing published for this version

  38. 0.74.3 12 Dec 2024

    Nothing published for this version

  39. 0.74.2 11 Nov 2024

    Nothing published for this version

  40. 0.74.1 05 Nov 2024

    Nothing published for this version

  41. 0.74.0 28 Oct 2024

    Nothing published for this version

  42. 0.73.0 01 Oct 2024

    Nothing published for this version

  43. 0.72.4 25 Sep 2024

    Nothing published for this version

  44. 0.72.3 23 Sep 2024

    Nothing published for this version

  45. 0.72.2 19 Sep 2024

    Nothing published for this version

  46. 0.72.1 19 Sep 2024

    Nothing published for this version

  47. 0.72.0 13 Sep 2024

    Nothing published for this version

  48. 0.71.1 18 Aug 2024

    Nothing published for this version

  49. 0.71.0 18 Aug 2024

    Nothing published for this version

  50. 0.70.0 13 Aug 2024

    Nothing published for this version

  51. 0.69.0 07 Aug 2024

    Nothing published for this version

  52. 0.68.5 09 Jul 2024

    Nothing published for this version

  53. 0.68.4 24 Jun 2024

    Nothing published for this version

  54. 0.68.3 20 Jun 2024

    Nothing published for this version

  55. 0.68.2 14 Jun 2024

    Nothing published for this version

  56. 0.68.1 05 Jun 2024

    Nothing published for this version

  57. 0.68.0 30 May 2024

    Nothing published for this version

  58. 0.67.2 07 May 2024

    Nothing published for this version

  59. 0.67.1 26 Apr 2024

    Nothing published for this version

  60. 0.67.0 08 Apr 2024

    Nothing published for this version

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