All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.76 - 2025-02-24
- Bump nightly version used by pavexc to generate JSON docs from 'nightly-2025-01-04' to 'nightly-2025-02-22' (by @LukeMathWalker) - #454
- Use Rust 2024 edition in the generated server SDK as well as in the starter project generated by 'pavex new' (by @LukeMathWalker) - #454
- @LukeMathWalker
0.1.75 - 2025-02-23
- Compare path length before iterating in lock step over their segments. (by @LukeMathWalker) - #450
- Push pavex_session test coverage over 90% (by @LukeMathWalker) - #449
- @LukeMathWalker
0.1.74 - 2025-02-12
- Don't show the 'PAVEX_DEBUG' note if the exit code is successful (by @LukeMathWalker)
- Quickstart template doesn't require an AppConfig instance as input to the application state (by @LukeMathWalker)
- Ensure that the starter project compiles straight away (by @LukeMathWalker)
- @LukeMathWalker
0.1.73 - 2025-02-11
- Don't require native libraries to decompress archives from GitHub. (by @LukeMathWalker) - #442
- @LukeMathWalker
0.1.72 - 2025-02-09
- Nudge users towards PAVEX_DEBUG if they need to investigate errors further (by @LukeMathWalker) - #438
- Add a '-w' option to 'pavex self setup' to streamline the onboard process. (by @LukeMathWalker) - #436
- When printing an error chain, deduplicate identical errors to reduce visual noise (by @LukeMathWalker) - #438
- Add a '--skip-activation' flag to 'pavex self setup' to fix the CI/CD pipeline of the starter project (by @LukeMathWalker) - #437
- @LukeMathWalker
0.1.71 - 2025-02-01
- Inform the user when generating JSON docs for crates in the workspace (by @LukeMathWalker) - #430
- Strive to use the path with the smallest number of segments in the generated code (by @LukeMathWalker) - #430
- All ApplicationState fields should be public to allow manipulation of the state ahead of request serving. This is particularly important for end-to-end tests. (by @LukeMathWalker) - #430
- Assign unique and intelligible field names to the singletons stored inside ApplicationState (by @LukeMathWalker) - #430
- Don't confuse the JSON docs for different versions of the same crate. Be defensive against cargo's broken caching strategy. (by @LukeMathWalker) - #430
- @LukeMathWalker
0.1.70 - 2025-01-24
- Don't install the current nightly when checking the freshness of a project. Pavex will install the specific nightly version it requires when it initializes (by @LukeMathWalker)
- Use the new install URL in the starter project template (#425) (by @LukeMathWalker) - #425
- Use 'tracing_log_error::log_error!' in the project template to ensure consistent error logging (by @LukeMathWalker) - #427
- @LukeMathWalker
- @pavex-releaser[bot]
- @github-actions[bot]
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.69 - 2025-01-21
- When Pavex's Server fails to spawn a worker thread, capture that thread's name in the error message
- Add Server::try_serve to give users a chance to handle the case where no connection sources have been registered
- Cache accesses for path dependencies are now significantly faster, since 'cargo' is no longer in the hot path of determining the crate checksum
- Reduce the time spent generating JSON docs by leveraging 'cargo rustdoc' built-in caching mechanism for the single-crate usecase.
- Update Pavex's nightly to 2025-01-04. It unlocks the 2024 edition for Pavex users
- Enable backtraces for panics in the project template, being careful not to capture backtraces for normal errors in libraries such as anyhow. Update the command to force the toolchain install to work with the latest rustup version
- Use hyper_util's GracefulShutdown utility to ensure connections are indeed shut down gracefully
- Don't panic if we fail to serve a connection. Log the error as a warning.
- Lower the logging level to info when reporting a failure to establish a connection. This event kind is common enough not to deserve a higher logging level.
- Use the blueprint location as the project fingerprint rather than the workspace path, since a workspace may contain multiple blueprints, as it happens for Pavex's UI tests
- Migrate all tracing events that touch errors to
log_error!
to ensure consistent field naming - Clarify why it's fine to panic if
tokio
can't create a current-thread runtime inside a Pavex server worker thread - Improve suggested resolution for a missing nightly toolchain
- Re-export error-related fields in
pavex_tracing
fromtracing_log_error
- Update dependency versions
0.1.68 - 2025-01-05
- Fallbacks can now successfully inject all framework primitives.
- Fix intra-doc link
- Fix clippy lints
0.1.67 - 2025-01-02
- Improve panic message when generic binding fails
- Don't panic when using a non-specific error handler for a generic constructor
0.1.66 - 2024-12-31
- update Cargo.toml dependencies
0.1.65 - 2024-12-31
- Pavex will rely on Rust's coercion rule when a & is required but only a &mut is bound (#404)
0.1.64 - 2024-12-30
- Pavex no longer returns a borrow checker error when a &mut reference must be coerced to a shared reference (#401)
0.1.63 - 2024-12-21
- Execute post-processing middlewares when a pre-processing middleware returns early or fails (#398)
0.1.62 - 2024-12-11
- [
pavex_session
] Fix a runtime panic: the server-side state should be loaded if it hasn't been loaded yet.
0.1.61 - 2024-12-11
- Track which field failed to be deserialized when working with query parameters
- [Breaking] Rework
pavex_session::Session
to avoid requiring a&mut
reference when performing read operations (#389)
0.1.59 - 2024-12-01
- Disable default features for server SDK's dependencies (#386)
0.1.58 - 2024-11-29
- Ensure the code-generation phase respects the ordering determined by the borrow-checker analysis phase
0.1.57 - 2024-11-27
- Pavex won't panic if it can't find a transitive dependency in the package graph. It'll log details about the failed searches.
0.1.54 - 2024-11-26
- Pavex now supports domain guards! You can restrict routes to specific domains and/or serve different websites from the same Pavex application. Check out the relevant guide for more information.
- There is now a dedicated guide explaining how common path prefixes work.
Blueprint::nest_at
has been removed. UseBlueprint::prefix("/my_prefix").nest(nested_bp)
as a replacement.- The syntax for path parameters has changed. Instead of
:param_name
, use{param_name}
.
0.1.53 - 2024-11-12
- 'pavex' and 'pavexc' check a dedicated environment variable, in addition to invocation flags, to determine if diagnostic information should be outputted
- Avoid processing the same nodes multiple times in order to avoid duplicated transient nodes.
- Update
thiserror
to2.x.y
in generated code
0.1.52 - 2024-11-05
- Don't allow the basic block visitor to simultaneously engage with multiple branching nodes. It fixes a panic for more complex call graphs.
- Add a span around the generation of the application state initializer function
- Print the call graph for the application state initializer if the log level is set to 'trace'
0.1.51 - 2024-11-05
- The diagnostic representation of all call graphs now includes call order information—e.g. does this constructor get invoked before or after this other one?
- Respect the order identified by the borrow-checking analysis phase when generating code
0.1.50 - 2024-11-01
- Support lifetime parameters in type aliases
- Supply an (empty) instance of
UrlParams
to the root fallback handler, if it needs it. - Look for the 'impl' block in the crate that define the type, rather than the trait, when resolving trait methods
- Improve error message when we fail to find a method item in the JSON docs
- Don't complain about missing constructors when looking at a naked generic input parameter
- Bind generic parameters correctly in all instances
- Panic eagerly if internal invariants are not upheld when binding generic parameters
- Pavex correctly handles type alises with generic parameters that differ from the target type
- Pavex will correctly set the name of the defining crate when resolving local type aliases that refer to remote types
- Pavex will never use private modules in the paths used to refer to methods in the generated server SDK code. (#355)
- Improve panic message with details about the
rustdoc
item we couldn't handle - Display the available constructibles when PAVEX_DEBUG is set and we incur into a 'missing constructor' error
- Display the cyclic dependency graph when PAVEX_DEBUG is set
- Provide an easy-to-examine representation for the set of constructibles in a given scope tree
0.1.49 - 2024-10-23
- First release of Pavex's HTTP sessions toolkit 🎉 (#338)
- Distinguish between methods and functions in error messages (#344)
- Start caching the JSON documentation of path dependencies. We rely on the hash of their contents to avoid serving stale data
- Pavex will no longer emit duplicated diagnostics, thus reducing visual noise when code generation fails
- Pavex always uses a public path to refer to public items, even if they are defined in a private module
- Detect infinite paths and break early to avoid stalls when generating server SDK crates
- Ensure error observers are correctly added when dealing with errors in the call graph of a middleware of any kind
- Perform cross-call-graph analysis to determine if additional
.clone()
statements are needed before invoking a middleware. - Don't discard spans if they match the provided log filter in pavexc
- Update dependencies to latest possible version. In particular, update 'rustdoc-types' and the nightly version used by 'pavexc'
0.1.48 - 2024-09-02
- Avoid panic petgraph-related panic when inserting clone nodes to fix borrow checking errors (#334)
0.1.47 - 2024-08-14
- always use the specified toolchain, remove yet another location where nightly was hard-coded
- Pin a specific
nightly
version for each version ofpavexc
, ensuring they are compatible (#331) - Allow overriding the
nightly
toolchain used to generate JSON docs viaPAVEXC_DOCS_TOOLCHAIN
(#331) - Fix panics when performing dependency injection for complex call graphs (#329)
0.1.46 - 2024-07-27
- Feature gate tokio net feature for pavex behind server feature (#324)
- update Cargo.toml dependencies
0.1.45 - 2024-07-02
- enable 'std' feature on the 'time' crate in 'pavex'
- std's collections can be used as prebuilt types (#321)
- Add constructor for RequestHead (#319)
0.1.44 - 2024-06-22
- Don't use public items via paths that include private modules (#316)
0.1.43 - 2024-06-19
- Add status_mut() function to Response (#313)
0.1.42 - 2024-06-18
- elided lifetime parameters in generic structs are handled correctly (#310)
0.1.41 - 2024-06-16
- Pavex will reject singleton constructors if they return a type with non-
'static
lifetime parameters. Singletons must be shared across worker threads, therefore they must be'static
.
0.1.40 - 2024-06-16
- 'pavex new' no longer panics if 'cargo fmt' fails. (#303)
0.1.39 - 2024-06-15
- Add a workspace-hack crate to the generated starter project to minimise (re)build times
- Introduce prebuilt types (#298)
- Add a new '--template' option to 'pavex new' and 'pavexc new'. It includes a dedicated 'quickstart' template as well as the 'api' template, the default.
- In the starter project, use a meaningful example to showcase how the configuration system works, rather than a dummy with no usage
- Shorthand methods (
.clone_if_necessary()
and.never_clone()
) to tweak the default cloning strategy on constructors and prebuilt types
- Set new Cargo lint to allow 'cfg(pavex_ide_hint)' in Pavex, its snapshot tests and its scaffolded projects
- Use the [env] section of .cargo/config.toml to store non-sensitive env variables used for local development. It fixes configuration for newly generated projects.
- Don't use colored logs if color is not enabled.
- Include
super
andself
as valid prefixes for relative paths in error messages (#296) - You can no longer register a type with a non-
'static
lifetime parameter (implicit or explicit) as a singleton. (#298)
0.1.38 - 2024-04-28
- Rework CLI introspections (#292)
- anyhow::Result can be returned from constructors and other fallible components (#293)
0.1.37 - 2024-04-27
- Interpolate error message when failing to download a prebuilt
pavexc
binary - Remove dependency on OpenSSL on Linux
0.1.36 - 2024-04-27
- Use the correct name for package names that contain hyphens in the (generated) server SDK Cargo.toml (#287)
For example,
sqlx-query
used to be renamed tosqlx_query
in the generatedCargo.toml
, causing acargo
error.
0.1.35 - 2024-04-26
- Allow &mut references to be held by Next's state. (#280)
0.1.34 - 2024-04-25
- Use Unix path separator in Cargo.toml manifests when specifying path dependencies (#275) It allows the same Pavex project to be built on all platforms with no changes.
- Re-add default .env file (#276)
It allows
cargo px r
to "just work" on a newly scaffolded Pavex project.
- Re-order Cargo.toml file (#277)
0.1.33 - 2024-04-21
- Server request id is now represented as a TypeId (#272)
0.1.31 - 2024-04-21
- Centralize version.