Releases: hydro-project/hydro
variadics_macro v0.6.2
Bug Fixes
- refactor github actions workflows, make stable the default toolchain
Commit Statistics
- 2 commits contributed to the release.
- 1 commit was understood as conventional.
- 1 unique issue was worked on: #2028
Commit Details
view details
- #2028
- Refactor github actions workflows, make stable the default toolchain (c40876e)
- Uncategorized
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
sinktools v0.0.1
Bug Fixes
- missing description in Cargo.toml
New Features
-
add LazySink and LazySource
-
DemuxMap, use inhydro_deploy_integration -
sinktoolscrate
this also convertsvariadicto use#[no_std], and adds
feature="std", and fixes an issue causing trybuild tests to not runwill replace
pusheratorin upcoming PR
Commit Statistics
- 5 commits contributed to the release.
- 4 commits were understood as conventional.
- 3 unique issues were worked on: #2157, #2163, #2182
Commit Details
view details
- #2157
sinktoolscrate (7efe1dc)
- #2163
DemuxMap, use inhydro_deploy_integration(335ded3)
- #2182
- Add LazySink and LazySource (ef6f313)
- Uncategorized
- Missing description in Cargo.toml (7925343)
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
multiplatform_test v0.6.0
Chore
- update wasm
Commit Statistics
- 2 commits contributed to the release.
- 1 commit was understood as conventional.
- 1 unique issue was worked on: #2087
Commit Details
view details
- #2087
- Update wasm (e5d9080)
- Uncategorized
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
lattices_macro v0.5.11
Bug Fixes
- refactor github actions workflows, make stable the default toolchain
- hardcoded crate name issues
Other
- ensure
hydro_build_utilsis published in the correct order
Test
- exclude crate/module in lib snapshot file names [ci-full]
Also removes unused
hydro_lang/src/compile/ir/snapshots/hydro_lang__compile__ir__backtrace__tests__backtrace.snap
Commit Statistics
- 5 commits contributed to the release.
- 4 commits were understood as conventional.
- 3 unique issues were worked on: #1977, #2028, #2283
Commit Details
view details
- #1977
- Hardcoded crate name issues (5ec8b3b)
- #2028
- Refactor github actions workflows, make stable the default toolchain (c40876e)
- #2283
- Exclude crate/module in lib snapshot file names [ci-full] (dc170e6)
- Uncategorized
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
- Ensure
hydro_build_utilsis published in the correct order (806a623)
lattices v0.6.2
Chore
- update pinned nightly to 2025-08-20, fix lints
New Features
-
Add efficient tombstone storage for lattices (RoaringBitmap + FST)
This PR implements space-efficient tombstone storage for
SetUnionWithTombstonesandMapUnionWithTombstonesusing
RoaringBitmap (for integers) and FST (for strings). -
sinktoolscrate
this also convertsvariadicto use#[no_std], and adds
feature="std", and fixes an issue causing trybuild tests to not runwill replace
pusheratorin upcoming PR
Bug Fixes
- refactor github actions workflows, make stable the default toolchain
Other
- ensure
hydro_build_utilsis published in the correct order
Commit Statistics
- 6 commits contributed to the release.
- 5 commits were understood as conventional.
- 4 unique issues were worked on: #2024, #2028, #2157, #2271
Commit Details
view details
- #2024
- Update pinned nightly to 2025-08-20, fix lints (97426b8)
- #2028
- Refactor github actions workflows, make stable the default toolchain (c40876e)
- #2157
sinktoolscrate (7efe1dc)
- #2271
- Add efficient tombstone storage for lattices (RoaringBitmap + FST) (1f05026)
- Uncategorized
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
- Ensure
hydro_build_utilsis published in the correct order (806a623)
hydro_std v0.15.0
Documentation
- new template and walkthrough
New Features
-
add cluster-membership ir node
-
introduce
sliced!syntax for processing with anonymous ticks -
replay failed simulation instances and show logs
Previously, a failed simulation would only show the backtrace, and would
have to be re-run withHYDRO_SIM_LOG=1to display the simulation
steps. This would result in lots of log pollution since logging would
also be enabled for passing instances.Now, we've made some tweaks to bolero so that it re-executes the test
after finding a failing input, passing anis_replayflag. We use this
to enable rich logging, so that the failure is displayed with all the
simulation steps that led to it. -
add APIs for unordered stream assertions and tests for
collect_quorum
AI Disclosure: all the tests were generated using Kiro (!)Currently, the core functionality test has to be split up into several
exhaustive units because otherwise the search space becomes too large
for CI (~400s). Eventually, keyed streams may help but splitting up the
test is a reasonable short-term fix. -
deterministic simulator for Hydro programs
This introduces a deterministic simulator for Hydro that can simulate
various asynchronous scenarios to identify bugs in code that use
non-deterministic operators, such asbatch. This PR focuses on just
the infrastructure and support for simulatingbatchon a
totally-ordered, exactly-once stream. Support for additional
non-deterministic operators will follow in separate PRs (currently, an
exception is thrown to prevent use of the simulator on programs that use
such operators).The simulator's job is to explore the space of potential asynchronous
executions. Because "top-level" operators guarantee "eventual
determinism" (per Flo), we do not need to simulate every possible
interleaving of message arrivals and processing. Instead, we only need
to simulate sources of non-determinism at the points in the program
where a user intentionally observes them (such asbatchor
assume_ordering).When compiling a Hydro program for the simulator, we emit several DFIR
programs. One of these is theasync_dfir, which contains all
asynchronously executed top-level operators in the Hydro program. Again,
thanks to Flo semantics, we do not need to simulate the behavior of
executing these operators on different prefixes of the input, since we
know that none of the downstream operators change their behavior based
on the provided prefix (this is somewhat more complicated for unbounded
singletons, whose intermediate states are affected by the set of
elements processed in each batch, but we will address this separately).Because each tick relies on a set of decisions being made to select
their inputs (batch,snapshot), we emit each tick's code into a
separate DFIR graph. The top-level simulator then schedules
(LaunchedSim::scheduler) the async graph and tick graphs by always
trying to make progress with the async graph first (so that we have the
full set of possible inputs at each batch boundary), and when the async
graph cannot make any further progress it selects one of the ticks,
makes a batching decision for each of its inputs
(autonomous_decision), and then executes the tick.The selection of which tick to run and which elements to release in each
batch are driven by a source of non-determinism, which is either:
a) libfuzzer (if using.sim().fuzzand running withcargo sim)
b) a RNG with 8192 iterations (if using.sim().fuzzand running with
cargo testand no reproducer is available)
c) a static input of decisions (if using.sim().fuzzand running with
cargo testand a reproducer is available)
d) an exhaustive, depth-first search algorithm (if using
.sim().exhaustiveand running withcargo test)Whenever a fuzzer finds a failure, it stores the sequence of decisions
that leads to the crash in a.binfile as a reproducer, so that we can
re-execute quickly in testing environments.Because Hydro uses a staged compilation model, our approach to compiling
and executing the Hydro program is also a bit unique. Because the fuzzer
needs to track branch coverage inside the Hydro program to be effective,
and because we need low-latency interactions between the user assertions
and the Hydro code, we cannot run the compiled program in a separate
process. Instead, we compile the Hydro code into a shared library and
dynamically load it into the host process (which has the testing code).
The shared library only provides the compiled DFIR graphs, so the
simulator scheduler runs in the host process to enable low-latency
switching between the DFIR and testing code.This PR includes a couple of toy examples testing the simulator's
functionality. Of particular interest is
sim_crash_with_fuzzed_batching, which takes forever with an exhaustive
search but quickly finds a failure case with a fuzzer. -
Generalize bench_client's workload generation
Allow custom functions for generating bench_client workloads (beyond
u32,u32). -
add keyed singletons and optionals to eliminate unsafety in membership tracking
Bug Fixes
- Staggered client
Client initially outputs 1 message per tick instead of all messages in 1
giant batch, so if downstream operators do not dynamically adjust the
batch size, they are not overwhelmed - Client aggregator waits for all clients before outputting
Outputs N/A as throughput and latency until all clients have responded
with positive throughput. - refactor github actions workflows, make stable the default toolchain
- remove strange use of batching in bench_client
Refactor
-
reduce syntactic overhead of connecting test inputs / outputs
Rather than having separatesource/sink/bytes/bincode
APIs, we use a singleconnectmethod that uses a trait to resolve the
appropriate connection result. -
reduce atomic pollution in quorum counting
Also fixes a sync bug in Compartmentalized Paxos. Due to batching
semantics, we could end up in a situation where responses have missing
metadata (for example if the batch refuses to release any elements).The simulator would hopefully have caught this, we can use this as an
example. -
remove uses of legacy
*_keyedAPIs
Also adds missing doctests to the aggregation APIs onKeyedStream.
Test
- add test for collecting unordered quorum
Documentation (BREAKING)
- add docs for
for_each/dest_sink, restrict to strict streams
Breaking Change:for_each/dest_sinknow require a totally-ordered,
retry-free stream since the downstream may not tolerate such
non-determinism. This helps highlight cases where the developer needs to
reason carefully about the safety of their side effects.
New Features (BREAKING)
-
add specialized
sim_input/sim_outputto reduce simulation boilerplate -
cluster member ids are now clone instead of copy
This is part one of a series of changes. The first part just changes
MemberIds from being Copy to Clone, so that they can later support more
use cases. -
restrict
KeyedSingletonto not allow asynchronous key removal
Previously,KeyedSingletonsupportedfilteron unbounded collections
andlatestto yield snapshots from a tick. Both of these APIs are
problematic because they let developers asynchronously remove elements
from the collection, which goes against the "Singleton" naming. We have
reasonable alternatives for all these use-sites, so remove for now to
minimize the semantic complexity (also for the simulator).Eventually, we will want to bring back
KeyedOptionalwhich permits
such asynchronous removal. -
add
OrderingandRetriestraits with basic axioms
Reduces the need to usenondet!inside broadcast APIs, and also
prepares us for graph viz metadata by requiring these traits to be
implemented for the type parameters inStream/KeyedStream. -
refine types when values of a
KeyedSingletonare immutable
There are many cases where once a value is released into a
KeyedSingleton, it will never be changes. In such cases, we can permit
APIs like.entrieseven if the set of entries is growing.We use this type to improve the API surface for looking up values for a
request. Now, aKeyedSingletonof requests can look up values from
anotherKeyedSingleton.
Bug Fixes (BREAKING)
-
fix cardinality for
Optional::or
UsingHydroNode::Chainis very dangerous for singletons / optionals,
because it can lead to cardinality > 1 within a single batch, which
breaks a fundamental invariant.This introduces a new
HydroNode::ChainFirstoperator that only emits
the first value from the chain. This is paired with a new DFIR operator
chain_firstfor this behavior.We also rewrite some
Singletonlogic to useOptionalunder the hood,
which reduces the places where we deal with chaining in the IR,
hopefully avoiding future incidents.
Refactor (BREAKING)
- don't return results from
SimSender::send
Also makes theassert_*APIs onSimReceivermore general to support
asymmetricPartialEq - allow
simfeature withoutdeployfeature
Also removes leftover prototype "properties" code. - migrate Hydro IR to have Flo semantics at all levels
Previousl...
hydro_lang v0.15.0
Chore
-
update to rust 1.91.1
-
update back to Rust 1.90.0
-
pin Rust to 1.89
GitHub Actions is going to be flip/flopping between 1.89 and 1.90, and
we have users who need support on 1.89.Also updates precheck.bash to use nextest for speed.
-
update nightly snapshots
[ci-full]This PR was automatically generated by the nightly CI run. Updated insta
snapshots for nightly Rust builds. Please review the snapshot changes to
ensure they are expected. -
clean up leftover snapshots
-
move backtrace test to separate module for stable line numbers
Will reduce diff noise whenever modifyingStream. -
update nightly snapshots
-
update nightly snapshots
[ci-full]This PR was automatically generated by the nightly CI run. Updated insta
snapshots for nightly Rust builds. Please review the snapshot changes to
ensure they are expected. -
update nightly snapshots
[ci-full]This PR was automatically generated by the nightly CI run. Updated insta
snapshots for nightly Rust builds. Please review the snapshot changes to
ensure they are expected. -
update nightly snapshots
[ci-full]This PR was automatically generated by the nightly CI run. Updated insta
snapshots for nightly Rust builds. Please review the snapshot changes to
ensure they are expected. -
update nightly snapshots
-
update pinned nightly to 2025-08-20, fix lints
Documentation
- single counter tutorial and prepare code for later tutorials
- new template and walkthrough
- remaining
Optional-specific APIs Stream::persistrustdoc- remaining
KeyedSingleton-specific APIs
Will document all thedefer_ticks in a separate PR. - start on docs for
KeyedSingleton Singleton/Optional::into_streamSingleton/Optional::all_ticks*Singleton/Optional::latest*andZipResultSingleton::zipandOptional::zip- add basic docs around atomics for stream / keyed streams / singleton / optional
- struct docs for
Singleton/Optional, and polish others - rustdoc for
Stream::collect_vec - rustdoc for
KeyedStream::chain - initial docs for
deploymodule - avoid rustfmt thrashing
runtime_contextmodule- keyed variants of networking APIs, send external
- polish for networking APIs
- start on docs for live collections
- document the
nondetmodule - add
doc(cfg(...))annotation forgraphmodule - docs for
backtracemodule
Also cleans up the API interface, adds thecolnofield, and a unit
test showing that we can precisely identify each element of chained
operators. - docs for
test_utilmodule - set up lints so we can find missing docs
- keyed stream docs
- update crate description
New Features
-
add
KeyedStreamAPIs for compound keys and sending with keys
Previously, the only way to send aKeyedStreamincluding the keys
was to get the entries (which would erase the order).Now, we add APIs to prefix/unprefix the key (prepend a tuple element),
and then add aKeyedStream::send_bincodeAPI that sends the entire set
of entries with the sender ID prefixed in the return type. We also add
an inverseKeyedStream::demux_bincodewhere the input keys are a
compound of(MemberId, Key)and the recipient gets a
KeyedStream<Key>. -
support
KeyedStream::assume_orderinginside ticks in simulator -
support
Stream::assume_orderinginside ticks in simulator -
add cluster-membership ir node
-
introduce
sliced!syntax for processing with anonymous ticks -
add
KeyedStream::cross_singleton -
support batching unordered keyed streams in simulator
-
add
Location::bind_single_clientfor bidi single client -
support
KeyedSingleton::snapshotin sim -
support batching ordered keyed streams in sim
-
support atomic regions in sim
-
Allow accessing HydroNodes' inputs, assign all HydroNodes (except Placeholder) an ID
-
support Cluster -> Cluster network in sim
-
support Process -> Cluster network in sim
Also fixessource_iterto add type hints in generated DFIR. -
support
source_cluster_membersin sim -
support ticks on clusters in sim
-
support Cluster -> Process network in sim
-
support Process -> Process network in sim
-
Migrate graph visualization to JSON format with deterministic output and semantic tagging
-
support
Stream::countin simulator
This also tweaks the behavior ofreduce_commutative_idempotent_trusted
to make sure that we simulate different orders of intermediate states
when the input is unbounded / asynchronous. Right now, we do not
actually have any tests for this, since we do not support shuffling
unbounded streams, but this will be supported soon. -
use dynamically linked libraries in test mode
-
share
__stagedacross trybuild targets
Previously, each trybuild target (in test-mode) would have its own copy
of the__stagedmodule containing the entire sources of the original
crate. This creates a huge compilation burden that is repeated on every
deployment.With an accompanying change in Stageleft, we are now able to share the
__stagedmodule in the commonlib.rs. This also moves the simulation
dylibs to be compiled as an example so that they do not conflict with
the caching of the sharedlib.rs.Also reduces thrashing due to the lockfile having to be updated after
each time it is written (because packages have to be removed which were
needed in the workspace but not the trybuild). -
support singletons in simulator
The simulator uses a different representation of singletons than
production, streaming every intermediate state instead of just the final
value for the current DFIR batch. This lets us simulate all possible
snapshots when that happens.To support
Location::singleton, which (lazily) spins in production, we
instead introduce a properSourceSingletonIR node which only
(appropriately) only releases a single item in the simulator.To simulate snapshots, we have to decide which version of the singleton
to advance to. This can include "stutters", where the same version is
released multiple times. To avoid an infinite search space, stutters are
only allowed when some other input to the tick has made a nontrivial
decision (one that makes progress consuming its input). Therefore, if
none of the other inputs make progress, the singleton has to make
progress. -
avoid redundant simulations for ordering within unordered batches
Previously, we would select elements for the next released batched in
non-deterministic order. This is unnecessary, because the batch itself
hasNoOrderguarantees and so the permutations within the batch are
redundant.Reduces instance count from 192 to 75 for
sequence_payloads_sequences_all. To avoid regressions,
.sim().exhaustive()now returns the number of simulation instances,
which we can verify against a combinatorial formula. -
replay failed simulation instances and show logs
Previously, a failed simulation would only show the backtrace, and would
have to be re-run withHYDRO_SIM_LOG=1to display the simulation
steps. This would result in lots of log pollution since logging would
also be enabled for passing instances.Now, we've made some tweaks to bolero so that it re-executes the test
after finding a failing input, passing anis_replayflag. We use this
to enable rich logging, so that the failure is displayed with all the
simulation steps that led to it. -
ensure sim logs show up in captured stdout/stderr
When running a sim test withcargo test, the stdout / stderr are
captured. But this capturing mechanism only works for direct calls to
println!andeprintln!, so the previous logic to use
std::io::eprintlndoes not work (and logs are displayed out of order).To fix this, we change the logger to be a tri-state
LogKind. If it is
LogKind::Stderr, we directly invokeeprintln. We also pass down
function pointers forprintlnandeprintlnto the staged code, where
we shadowstd::{println, eprintln, debug}with macros that call the
function pointer. This ensures that any logging statements in quoted
code show up in the right place next to simulator logs. -
add APIs for unordered stream assertions and tests for
collect_quorum
AI Disclosure: all the tests were generated using Kiro (!)Currently, the core functionality test has to be split up into several
exhaustive units because otherwise the search space becomes too large
for CI (~400s). Eventually, keyed streams may help but splitting up the
test is a reasonable short-term fix. -
<csr-id-cea261dd8b585a3c30a8...
hydro_deploy_integration v0.15.0
New Features
- add
Location::bind_single_clientfor bidi single client DemuxMap, use inhydro_deploy_integration
Bug Fixes
- compilation on non-Unix [ci-full]
- [ci-full] fix ci issues
- run docs/website on pr
- use bash by default on windows
- build website with nightly
- increase test timeout to 45m
- run docs with nightly
- make rustfmt use native line endings instead of unix
- fix compile-fail nightly stderr outputs
- add the ability to include [ci-full] into the body/title of a PR to
get it to run the full stable/nightly linux/windows test matrix.
New Features (BREAKING)
-
start adding APIs for various forms of keyed streams "joins", add KVS counter server
Also fixes incorrect output metadata forKeyedStream::fold, and
removesKeyedSingleton::all_ticksfor now until we a) actually need it
and b) can think carefully about its semantics. -
expose a stream of membership events for bidi externals
-
introduce support for dynamic external clients
So far, Hydro has only supported deployments where there is a statically
known number of single-connection external clients for sending /
receiving data. This is not practical in production applications where
external users will dynamically connect to the Hydro service.This takes the first step towards addressing this, by setting up the
networking mechanism for handling dynamically connected clients and
adding an API for sending/receiving data.This also changes the
source_external_bytesAPIs to return the raw
BytesMutsent over the network, rather than adding a freezing step.Finally, we show an end-to-end example using this interface to write a
simple HTTP server.
Refactor (BREAKING)
- remove unnecessary
ConnectedSourceSinktrait
Commit Statistics
- 11 commits contributed to the release.
- 10 commits were understood as conventional.
- 10 unique issues were worked on: #1966, #1978, #1980, #1981, #1996, #2029, #2031, #2163, #2246, #2267
Commit Details
view details
- #1966
- Introduce support for dynamic external clients (5d40134)
- #1978
- Remove unnecessary
ConnectedSourceSinktrait (97b879d)
- Remove unnecessary
- #1980
- Make polling fair with round-robin (6b37888)
- #1981
- Expose a stream of membership events for bidi externals (1bb2262)
- #1996
- Start adding APIs for various forms of keyed streams "joins", add KVS counter server (f9f5317)
- #2029
- [ci-full] fix ci issues (4e84a3f)
- #2031
- Use round-robin polling for
MergeSourceto ensure fairness (92adacc)
- Use round-robin polling for
- #2163
DemuxMap, use inhydro_deploy_integration(335ded3)
- #2246
- Add
Location::bind_single_clientfor bidi single client (4a43594)
- Add
- #2267
- Compilation on non-Unix [ci-full] (e5f2004)
- Uncategorized
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
hydro_deploy v0.15.0
Chore
- only depend on
samplyon supported systems, remove leftover DTrace code
Minimizes dependencies we pull in on Unix. - update pinned nightly to 2025-08-20, fix lints
New Features
-
make glibc vs musl configurable for cloud deployments
-
use dynamically linked libraries in test mode
-
share
__stagedacross trybuild targets
Previously, each trybuild target (in test-mode) would have its own copy
of the__stagedmodule containing the entire sources of the original
crate. This creates a huge compilation burden that is repeated on every
deployment.With an accompanying change in Stageleft, we are now able to share the
__stagedmodule in the commonlib.rs. This also moves the simulation
dylibs to be compiled as an example so that they do not conflict with
the caching of the sharedlib.rs.Also reduces thrashing due to the lockfile having to be updated after
each time it is written (because packages have to be removed which were
needed in the workspace but not the trybuild). -
add support for aws via terraform
Bug Fixes
- fix full path replacement for staged code errors
- make
cargo simfuzzing command work again [ci-full]
Accidentally broken when we moved to sharing the trybuild-lib as a
dylib. - simulator on Windows and test macOS in CI [ci-full]
Now that we have a bunch of platform-specific bits for dynamic
libraries, we should test all our supported dev platforms. - don't emit duplicate leafs for building Rust service
Because the.build()API creates a leaf itself, there is no need to
wrap it in another leaf (which results in two rows in the progress
display).
New Features (BREAKING)
-
introduce support for dynamic external clients
So far, Hydro has only supported deployments where there is a statically
known number of single-connection external clients for sending /
receiving data. This is not practical in production applications where
external users will dynamically connect to the Hydro service.This takes the first step towards addressing this, by setting up the
networking mechanism for handling dynamically connected clients and
adding an API for sending/receiving data.This also changes the
source_external_bytesAPIs to return the raw
BytesMutsent over the network, rather than adding a freezing step.Finally, we show an end-to-end example using this interface to write a
simple HTTP server.
Refactor (BREAKING)
- remove deprecated
add_connectionAPI
Has not been used for a long while...
Commit Statistics
- 14 commits contributed to the release.
- 12 commits were understood as conventional.
- 12 unique issues were worked on: #1966, #1967, #2024, #2083, #2177, #2187, #2191, #2192, #2194, #2205, #2269, #2288
Commit Details
view details
- #1966
- Introduce support for dynamic external clients (5d40134)
- #1967
- Remove deprecated
add_connectionAPI (9e07af1)
- Remove deprecated
- #2024
- Update pinned nightly to 2025-08-20, fix lints (97426b8)
- #2083
- Add support for aws via terraform (1dd2606)
- #2177
- Only depend on
samplyon supported systems, remove leftover DTrace code (83b77a1)
- Only depend on
- #2187
- Share
__stagedacross trybuild targets (a65893a)
- Share
- #2191
- Don't emit duplicate leafs for building Rust service (dad4abe)
- #2192
- Use dynamically linked libraries in test mode (891a25d)
- #2194
- Simulator on Windows and test macOS in CI [ci-full] (6d2e7d0)
- #2205
- Make
cargo simfuzzing command work again [ci-full] (807eb0a)
- Make
- #2269
- Make glibc vs musl configurable for cloud deployments (fc3bf5b)
- #2288
- Fix full path replacement for staged code errors (f0acd7c)
- Uncategorized
- Release sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0 (ac88df1)
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
dfir_rs v0.15.0
Chore
-
update to rust 1.91.1
-
update back to Rust 1.90.0
-
pin Rust to 1.89
GitHub Actions is going to be flip/flopping between 1.89 and 1.90, and
we have users who need support on 1.89.Also updates precheck.bash to use nextest for speed.
-
update wasm
-
update pinned nightly to 2025-08-20, fix lints
Documentation
- consistently refer to Hydro as a framework
- fix "DFIR Playground" link
New Features
-
add
resolve_futures_blockingfor resolving async calls by blocking the subgraph -
DemuxMap, use inhydro_deploy_integration -
sinktoolscrate
this also convertsvariadicto use#[no_std], and adds
feature="std", and fixes an issue causing trybuild tests to not runwill replace
pusheratorin upcoming PR
Bug Fixes
- fix code generation for
scanas a push-operator - update backtrace snapshots for Rust 1.90 and remove unused types
The line number ofcore::ops::function::FnOnce::call_oncein the
standard library changed. - remove python udf support
- [ci-full] fix ci issues
- run docs/website on pr
- use bash by default on windows
- build website with nightly
- increase test timeout to 45m
- run docs with nightly
- make rustfmt use native line endings instead of unix
- fix compile-fail nightly stderr outputs
- add the ability to include [ci-full] into the body/title of a PR to
get it to run the full stable/nightly linux/windows test matrix.
Other
- ensure
hydro_build_utilsis published in the correct order
Refactor
-
Make
join_fuseduse newAccumulatortrait
To make the codegen less magical.
Test
- rearrange
sortandanti_jointests out ofsurface_codegen
does not change any code, just moves it to new files - ensure
surface_demux_enumactually assert results
Refactor (BREAKING)
-
Make DFIR use
sinktoolsfor pushing to outputs [ci-bench]
This allows DFIR to handledest_sinkdirectly instead of having to
offload to a separate task, which causes latency and unwanted batching
(on single threaded runtimes)pusheratorcrate is no longer depended upon and is on a path to removal as it has been
replaced withSinksFixes some spanning bugs in codegen that using
Sinks revealed -
remove
demuxoperator, replace usage withdemux_enum
This is in preparation of making DFIR support asyncSinks. The
overpowered demux API is incompatible with the more constrained
mechanics ofSinks.Pull Request Overview
This PR refactors the
dfir_rslibrary by removing thedemuxoperator
and replacing its usage with thedemux_enumoperator, which provides
better type safety and ergonomics.- Removes the
demuxoperator implementation and related code - Updates examples to use
demux_enumwith enums for message handling - Removes all compile-fail tests specific to the
demuxoperator
- Removes the
-
superficially make subgraphs/operators asynchronous
Subgraphs now are async (create a future when running) which must be
awaited. However this PR does not actually change any
subgraphs/operators, so all subgraphs/operators returnPoll::Ready(())
immediately
Pull Request Overview
This PR refactors the dfir_rs library by removing the demux operator
and replacing its usage with the demux_enum operator, which provides
better type safety and ergonomics.
- Removes the
demuxoperator implementation and related code - Updates examples to use
demux_enumwith enums for message handling - Removes all compile-fail tests specific to the
demuxoperator - superficially make subgraphs/operators asynchronous
Subgraphs now are async (create a future when running) which must be
awaited. However this PR does not actually change any
subgraphs/operators, so all subgraphs/operators returnPoll::Ready(())
immediately
Commit Statistics
- 26 commits contributed to the release.
- 25 commits were understood as conventional.
- 24 unique issues were worked on: #1997, #2010, #2020, #2021, #2022, #2024, #2028, #2029, #2038, #2087, #2091, #2119, #2122, #2132, #2134, #2137, #2147, #2157, #2163, #2170, #2281, #2295, #2309, #2318
Commit Details
view details
- #1997
- Fix "DFIR Playground" link (273bc1e)
- #2010
- Check dfir warnings in tests on non-nightly (d057072)
- #2020
- Consistently refer to Hydro as a framework (2d09687)
- #2021
- Snapshot tests don't depend on the parent crate name (bdc54eb)
- #2022
- Add trybuild stable tests (669aefa)
- #2024
- Update pinned nightly to 2025-08-20, fix lints (97426b8)
- #2028
- Refactor github actions workflows, make stable the default toolchain (c40876e)
- #2029
- [ci-full] fix ci issues (4e84a3f)
- #2038
- Remove python udf support (09c0770)
- #2087
- Update wasm (e5d9080)
- #2091
- Superficially make subgraphs/operators asynchronous (2902770)
- #2119
- Remove
demuxoperator, replace usage withdemux_enum(8535940)
- Remove
- #2122
- Update backtrace snapshots for Rust 1.90 and remove unused types (1b818e3)
- #2132
- Ensure
surface_demux_enumactually assert results (562d108)
- Ensure
- #2134
- Make DFIR use
sinktoolsfor pushing to outputs [ci-bench] (9d943ac)
- Make DFIR use
- #2137
- Pin Rust to 1.89 (bcef055)
- #2147
- Fix code generation for
scanas a push-operator (dd62edf)
- Fix code generation for
- #2157
sinktoolscrate (7efe1dc)
- #2163
DemuxMap, use inhydro_deploy_integration(335ded3)
- #2170
- Update back to Rust 1.90.0 (623ed9e)
- #2281
- Add
resolve_futures_blockingfor resolving async calls by blocking the subgraph (f7ecb53)
- Add
- #2295
- Update to rust 1.91.1 (d22507c)
- #2309
- Rearrange
sortandanti_jointests out ofsurface_codegen(356292e)
- Rearrange
- #2318
- Make
join_fuseduse newAccumulatortrait (f4a26b3)
- Make
- Uncategorized
- Release hydro_build_utils v0.0.1, dfir_lang v0.15.0, dfir_macro v0.15.0, variadics v0.0.10, sinktools v0.0.1, hydro_deploy_integration v0.15.0, lattices_macro v0.5.11, variadics_macro v0.6.2, lattices v0.6.2, multiplatform_test v0.6.0, dfir_rs v0.15.0, copy_span v0.1.0, hydro_deploy v0.15.0, hydro_lang v0.15.0, hydro_std v0.15.0, safety bump 5 crates (092de25)
- Ensure
hydro_build_utilsis published in the correct order (806a623)