From 6d139bb6eab7a5a0a82ebdc133775a412bd6f6d3 Mon Sep 17 00:00:00 2001 From: Erik Jonkers Date: Wed, 27 May 2026 11:47:51 +0200 Subject: [PATCH 1/7] Initial version. Folkert's draft + sponsor section --- content/_index.md | 1 + content/blog/Announcing Zstandard in Rust.md | 79 ++++++++++++++++++++ content/initiatives/data-compression.md | 1 + content/news.md | 1 + content/projects/libzstd-rs.md | 1 + 5 files changed, 83 insertions(+) create mode 100644 content/blog/Announcing Zstandard in Rust.md diff --git a/content/_index.md b/content/_index.md index 790adc5..666482f 100644 --- a/content/_index.md +++ b/content/_index.md @@ -30,6 +30,7 @@ supporters = [ ] blogposts = [ + "Announcing Zstandard in Rust", "Three years of Rusty sudo", "Announcing ntpd-rs in Ubuntu", "Video: Securing time with NTS (FOSDEM26)", diff --git a/content/blog/Announcing Zstandard in Rust.md b/content/blog/Announcing Zstandard in Rust.md new file mode 100644 index 0000000..b809def --- /dev/null +++ b/content/blog/Announcing Zstandard in Rust.md @@ -0,0 +1,79 @@ ++++ +title = "Announcing Zstandard in Rust" +slug = "announcing-zstandard-in-rust" +authors = ["Folkert de Vries"] +date = "2026-05-28" + +[taxonomies] +tags = ["libzstd-rs", "announcement"] + ++++ + +Over the past year we've been silently working on our third compression project. After [zlib](https://github.com/trifectatechfoundation/zlib-rs) and [bzip2](https://github.com/trifectatechfoundation/libbzip2-rs) we're taking on zstd with [libzstd-rs-sys](https://github.com/trifectatechfoundation/libzstd-rs-sys). + + + +Zstd is a compression format that has been designed with modern CPUs in mind. It is both much faster and able to compress better than gzip. It is already widely used, and we expect that it will continue to gradually replace gzip for web traffic. + +## Why though? + +Using zstd in rust is already supported via the [zstd](https://crates.io/crates/zstd) crate, so why bother with a whole new implementation? + +One practical advantage of rust is that it is straightforward to write portable software. Currently the `zstd` crate compiles the C code from source, which requires a C toolchain for the target and for the target to be supported at all. Setting up a C toolchain on windows or for webassembly can be a challenge, and isn't needed with a pure-rust implementation. For rust programmers, using dependencies written in rust is a superior experience. + +Additionally, like with zlib and bzip2, we support compiling `libzstd-rs-sys` into a drop-in compatible C library. Hence we are, or aim to be, an alternative to the C reference implementation. + +The [C reference implementation](https://github.com/facebook/zstd) is maintained by Meta, and requires signing a contributor agreement with them in order to contribute. We believe that an independent, performant and compatible implementation strengthens the open source ecosystem. + +## Current state + +The reference implementation was initially translated using [`c2rust`](https://c2rust.com/) , and we have since completed the cleanup work for decompression and the dictionary builder. + +We test our rust code (compiled into a C static library) with the the reference implementation's test suite. We additionally use fuzz testing and Miri, so we're fairly confident in the correctness of our implementation. + +This work has also had ecosystem benefits: we've found several limitations of Miri (that are now resolved) and made contributions to Clippy. A more complete write-up of our recent contributions can be found [here](https://trifectatech.org/blog/fixing-our-own-problems-in-the-rust-compiler/). + +### The cost of memory safety + +By default decompression performance of our implementation is a couple percent slower than the C reference implementation. We believe we can justify this though, because with the `unsafe-performance-experimental` feature flag enabled we match C performance. + +This feature flag disables 4 bounds checks where data from the input is used to index into a data structure. For most users a ~3% performance regression is likely an acceptable price to pay for increased memory safety. If you really need that last bit of performance, you can enable the flag at your own risk. Its behavior matches C which also does not check the bounds and appears to run just fine in many production systems. + +## Future + +We are looking for funding of the compression portion of this library. + +Because of code sharing between compression and decompression, we have looked at the compression code a bit, but most of the cleanup work still needs to be done. We did set up benchmarks to ensure compression performance does not unexpectedly regress, and as mentioned we already use the reference implementation's test suite to check that we produce the correct result. + +### Ecosystem integration + +We have our own fork of the `zstd` that uses `libzstd-rs-sys` instead of the C library. We'd like to upstream this at some point. + +For the most commonly-used APIs this is straightforward. For the `experimental` features we run into some mismatches where `zstd-safe` uses an enum but we must use a `struct` for FFI safety. + +### Thanks to our sponsors + +The work on the decompression side has been funded by [Chainguard](https://www.chainguard.dev/), [Astral](https://astral.sh/) and [NLnet Foundation](https://nlnet.nl/), we're grateful for their support! [Sovereign Tech Agency](https://sovereign.tech) invested in the dictionary builder, thank you! + +--- + +### About + +[**Trifecta Tech Foundation**](https://trifectatech.org) is a non-profit and a Public Benefit Organisation (501(c)(3) equivalent) that creates open-source building blocks for critical infrastructure software. Our initiatives on data compression, time synchronization, and privilege boundary, impact the digital security of millions of people. If you’d like to support our work, please contact us; see [trifectatech.org/support](https://trifectatech.org/support/). + +[**Astral**](https://astral.sh/) builds high-performance developer tools for the Python ecosystem: +- Ruff, an extremely fast Python linter, written in Rust. +- uv, an extremely fast Python package manager, written in Rust. + +Astral's mission is to make the Python ecosystem more productive. Learn more at [astral.sh](https://astral.sh/) + +[**NLnet Foundation**](https://nlnet.nl/) is a recognised philanthropic non-profit foundation. The foundation stimulates network research and development in the domain of Internet technology. The articles of association for the NLnet foundation state: "to promote the exchange of electronic information and all that is related or beneficial to that purpose". The prefered intstrument of NLnet are microgrants: small, independent projects supporting independent researchers and developers. Read more on [nlnet.nl](https://nlnet.nl/) + +[**Chainguard**](https://www.chainguard.dev/) builds trusted open source software for a secure-by-default stack. We believe in a world where engineering teams move at the speed of innovation, confident that every line of code is secure. We guard open source software from what could go wrong, so engineering teams can build what they want. Read more on [chainguard.dev](https://www.chainguard.dev/) + +### Further Information + +- [Data compression initiative on Trifecta Tech Foundation](https://trifectatech.org/initiatives/data-compression) +- [libzstd-rs GitHub Repository](https://github.com/trifectatechfoundation/libzstd-rs-sys) + +*For inquiries, please contact Erik Jonkers, contact@trifectatech.org* diff --git a/content/initiatives/data-compression.md b/content/initiatives/data-compression.md index 9f2a28e..9c994cf 100644 --- a/content/initiatives/data-compression.md +++ b/content/initiatives/data-compression.md @@ -31,6 +31,7 @@ supporters = [ ] blogposts = [ + "Announcing Zstandard in Rust", "Compression compiler contributions", "zlib-rs stable API", "Emulating avx-512 intrinsics in Miri", diff --git a/content/news.md b/content/news.md index d5c619f..5ff07ea 100644 --- a/content/news.md +++ b/content/news.md @@ -5,6 +5,7 @@ template = "news.html" [extra] blogposts = [ + "Announcing Zstandard in Rust", "Three years of Rusty sudo", "Tail calls project goal", "Compression compiler contributions", diff --git a/content/projects/libzstd-rs.md b/content/projects/libzstd-rs.md index c8c651c..7c00da2 100644 --- a/content/projects/libzstd-rs.md +++ b/content/projects/libzstd-rs.md @@ -24,6 +24,7 @@ supporters = [ ] blogposts = [ + "Announcing Zstandard in Rust", "Compression compiler contributions" ] +++ From d2261ebcaafdc9fe76f82f73932a9ac376ae81d6 Mon Sep 17 00:00:00 2001 From: Erik Jonkers Date: Wed, 27 May 2026 11:58:20 +0200 Subject: [PATCH 2/7] Updates to data compression and libzstd pages --- content/blog/Announcing Zstandard in Rust.md | 2 +- content/initiatives/data-compression.md | 3 +- .../initiatives/workplans/workplan-zstd-rs.md | 42 ++++++++++--------- content/projects/libzstd-rs.md | 8 ++-- 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/content/blog/Announcing Zstandard in Rust.md b/content/blog/Announcing Zstandard in Rust.md index b809def..92910b6 100644 --- a/content/blog/Announcing Zstandard in Rust.md +++ b/content/blog/Announcing Zstandard in Rust.md @@ -51,7 +51,7 @@ We have our own fork of the `zstd` that uses `libzstd-rs-sys` instead of the C l For the most commonly-used APIs this is straightforward. For the `experimental` features we run into some mismatches where `zstd-safe` uses an enum but we must use a `struct` for FFI safety. -### Thanks to our sponsors +## Thanks to our sponsors The work on the decompression side has been funded by [Chainguard](https://www.chainguard.dev/), [Astral](https://astral.sh/) and [NLnet Foundation](https://nlnet.nl/), we're grateful for their support! [Sovereign Tech Agency](https://sovereign.tech) invested in the dictionary builder, thank you! diff --git a/content/initiatives/data-compression.md b/content/initiatives/data-compression.md index 9c994cf..c839a0f 100644 --- a/content/initiatives/data-compression.md +++ b/content/initiatives/data-compression.md @@ -20,7 +20,8 @@ funders = [ "chainguard", "ngi-zero-core", "min-bzk", - "astral" + "astral", + "sta" ] supporters = [ diff --git a/content/initiatives/workplans/workplan-zstd-rs.md b/content/initiatives/workplans/workplan-zstd-rs.md index dcb57b0..64ce103 100644 --- a/content/initiatives/workplans/workplan-zstd-rs.md +++ b/content/initiatives/workplans/workplan-zstd-rs.md @@ -9,12 +9,32 @@ backLink = "projects/libzstd-rs" backTitle = "Back to project: Zstandard in Rust" +++ -Work on zstd started in July 2025. The first milestone is the decompression portion of the library. - -Now the decompression is in development, we're seeking funding for the *encoder*. Please [get in touch with us](/support), if you are interested in financially supporting the development of memory-safe zstd. +Work on zstd started in July 2025. The first three milestones are now completed. ### In progress milestones +We're seeking funding for the *encoder*. Please [get in touch with us](/support), if you are interested in financially supporting the development of memory-safe zstd. + +--- + +### Future work + +**Milestone 4: Encoder implementation** + +This milestone adds API-compatible zstd compression. + +- Improving the code quality of the translated code +- Improving the performance of the translated code +- Testing & fuzzing +- Audit +- Create release and publish crates + +Please contact us if you are interested in supporting this milestone; see [trifectatech.org/support](https://trifectatech.org/support/). + +--- + +### Completed milestones + **Milestone 1: Decoder implementation** This milestone adds API-compatible zstd decompression functionality. @@ -44,22 +64,6 @@ This work is supported by [NLnet Foundation](https://nlnet.nl). --- -### Future work - -**Milestone 4: Encoder implementation** - -This milestone adds API-compatible zstd compression. - -- Improving the code quality of the translated code -- Improving the performance of the translated code -- Testing & fuzzing -- Audit -- Create release and publish crates - -Please contact us if you are interested in supporting this milestone; see [trifectatech.org/support](https://trifectatech.org/support/). - ---- - diff --git a/content/projects/libzstd-rs.md b/content/projects/libzstd-rs.md index 7c00da2..9518b04 100644 --- a/content/projects/libzstd-rs.md +++ b/content/projects/libzstd-rs.md @@ -37,15 +37,15 @@ For the high level goals of our data compression projects, see our [Data compres ### About -Development of Zstandard in Rust began in July 2025, with the first release of the decoder planned for March 2026. +Development of Zstandard in Rust began in July 2025. In May of 2026 we released the first version that includes the decoder and the dictionaty builder. We thank [Chainguard](https://www.chainguard.dev/), [Astral](https://astral.sh/), [Sovereign Tech Agency](https://sovereign.tech) and [NLnet Foundation](https://nlnet.nl) for their support. ### Roadmap -- 2025 Q3: start of decoder implementation -- 2025 Q4: implementation of dictBuilder feature -- 2026 Q1: release of decoder +- 2025 Q3: start of decoder implementation (*completed*) +- 2025 Q4: implementation of dictBuilder feature (*completed*) +- 2026 Q1: release of decoder (*completed*) - 2026 Q2: start of encoder implementation (*pending funding*) For details see [the workplan](/initiatives/workplans/libzstd-rs/). From 037d136ca39125f908d2f5bc1ac1450643dbce73 Mon Sep 17 00:00:00 2001 From: Folkert de Vries Date: Wed, 27 May 2026 15:51:29 +0200 Subject: [PATCH 3/7] Apply suggestions from code review Co-authored-by: Erik Jonkers Co-authored-by: Liset <116883252+LisetRoos@users.noreply.github.com> --- content/blog/Announcing Zstandard in Rust.md | 26 ++++++++++++-------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/content/blog/Announcing Zstandard in Rust.md b/content/blog/Announcing Zstandard in Rust.md index 92910b6..7f28f17 100644 --- a/content/blog/Announcing Zstandard in Rust.md +++ b/content/blog/Announcing Zstandard in Rust.md @@ -17,27 +17,33 @@ Zstd is a compression format that has been designed with modern CPUs in mind. It ## Why though? -Using zstd in rust is already supported via the [zstd](https://crates.io/crates/zstd) crate, so why bother with a whole new implementation? +Using zstd in Rust is already supported via the [zstd](https://crates.io/crates/zstd) crate, so why bother with a whole new implementation? -One practical advantage of rust is that it is straightforward to write portable software. Currently the `zstd` crate compiles the C code from source, which requires a C toolchain for the target and for the target to be supported at all. Setting up a C toolchain on windows or for webassembly can be a challenge, and isn't needed with a pure-rust implementation. For rust programmers, using dependencies written in rust is a superior experience. +One practical advantage of Rust is that it is straightforward to write portable software. Currently the `zstd` crate compiles the C code from source, which requires a C toolchain for the target and for the target to be supported at all. Setting up a C toolchain on Windows or for webassembly can be a challenge, and isn't needed with a pure-Rust implementation. For Rust programmers, using dependencies written in Rust is a superior experience. + +### Drop-in replacement Additionally, like with zlib and bzip2, we support compiling `libzstd-rs-sys` into a drop-in compatible C library. Hence we are, or aim to be, an alternative to the C reference implementation. +### Strengthening the ecosystem + The [C reference implementation](https://github.com/facebook/zstd) is maintained by Meta, and requires signing a contributor agreement with them in order to contribute. We believe that an independent, performant and compatible implementation strengthens the open source ecosystem. ## Current state -The reference implementation was initially translated using [`c2rust`](https://c2rust.com/) , and we have since completed the cleanup work for decompression and the dictionary builder. +The reference implementation was initially translated using [`c2rust`](https://c2rust.com/), and we have since completed the cleanup work for decompression and the dictionary builder. + +We test our rust code (compiled into a C static library) with the the reference implementation's test suite. We additionally use fuzz testing and Miri, so we're confident in the correctness of our implementation. -We test our rust code (compiled into a C static library) with the the reference implementation's test suite. We additionally use fuzz testing and Miri, so we're fairly confident in the correctness of our implementation. +The release is available here: . This work has also had ecosystem benefits: we've found several limitations of Miri (that are now resolved) and made contributions to Clippy. A more complete write-up of our recent contributions can be found [here](https://trifectatech.org/blog/fixing-our-own-problems-in-the-rust-compiler/). ### The cost of memory safety -By default decompression performance of our implementation is a couple percent slower than the C reference implementation. We believe we can justify this though, because with the `unsafe-performance-experimental` feature flag enabled we match C performance. +By default decompression performance of our implementation is a few percent slower than the C reference implementation. We believe we can justify this though, because with the `unsafe-performance-experimental` feature flag enabled we match C performance. -This feature flag disables 4 bounds checks where data from the input is used to index into a data structure. For most users a ~3% performance regression is likely an acceptable price to pay for increased memory safety. If you really need that last bit of performance, you can enable the flag at your own risk. Its behavior matches C which also does not check the bounds and appears to run just fine in many production systems. +This feature flag disables 4 bounds checks where data from the input is used to index into a data structure. For most users a ~3% performance regression is likely an acceptable price to pay for increased memory safety. If you really need that last bit of performance, you can enable the flag at your own risk. Its behavior matches C which also does not check the bounds and appears to run just fine in many production systems. ## Future @@ -53,7 +59,7 @@ For the most commonly-used APIs this is straightforward. For the `experimental` ## Thanks to our sponsors -The work on the decompression side has been funded by [Chainguard](https://www.chainguard.dev/), [Astral](https://astral.sh/) and [NLnet Foundation](https://nlnet.nl/), we're grateful for their support! [Sovereign Tech Agency](https://sovereign.tech) invested in the dictionary builder, thank you! +The work on the decompression side has been funded by [Chainguard](https://www.chainguard.dev/), [Astral](https://astral.sh/) and [NLnet Foundation](https://nlnet.nl/), and we're grateful for their support! [Sovereign Tech Agency](https://sovereign.tech) invested in the dictionary builder; thank you! --- @@ -65,9 +71,9 @@ The work on the decompression side has been funded by [Chainguard](https://www.c - Ruff, an extremely fast Python linter, written in Rust. - uv, an extremely fast Python package manager, written in Rust. -Astral's mission is to make the Python ecosystem more productive. Learn more at [astral.sh](https://astral.sh/) +Astral's mission is to make the Python ecosystem more productive. Learn more at [astral.sh](https://astral.sh/). -[**NLnet Foundation**](https://nlnet.nl/) is a recognised philanthropic non-profit foundation. The foundation stimulates network research and development in the domain of Internet technology. The articles of association for the NLnet foundation state: "to promote the exchange of electronic information and all that is related or beneficial to that purpose". The prefered intstrument of NLnet are microgrants: small, independent projects supporting independent researchers and developers. Read more on [nlnet.nl](https://nlnet.nl/) +[**NLnet Foundation**](https://nlnet.nl/) is a recognised philanthropic non-profit foundation. The foundation stimulates network research and development in the domain of Internet technology. The articles of association for the NLnet Foundation state: "to promote the exchange of electronic information and all that is related or beneficial to that purpose". The prefered instrument of NLnet is awarding microgrants to small, independent projects supporting independent researchers and developers. Read more on [nlnet.nl](https://nlnet.nl/). [**Chainguard**](https://www.chainguard.dev/) builds trusted open source software for a secure-by-default stack. We believe in a world where engineering teams move at the speed of innovation, confident that every line of code is secure. We guard open source software from what could go wrong, so engineering teams can build what they want. Read more on [chainguard.dev](https://www.chainguard.dev/) @@ -76,4 +82,4 @@ Astral's mission is to make the Python ecosystem more productive. Learn more at - [Data compression initiative on Trifecta Tech Foundation](https://trifectatech.org/initiatives/data-compression) - [libzstd-rs GitHub Repository](https://github.com/trifectatechfoundation/libzstd-rs-sys) -*For inquiries, please contact Erik Jonkers, contact@trifectatech.org* +*For inquiries, please contact Erik Jonkers, [contact@trifectatech.org](mailto:contact@trifectatech.org)* From 50bd38955a4b275a4cea0fce41417927840f5a02 Mon Sep 17 00:00:00 2001 From: Folkert de Vries Date: Thu, 28 May 2026 11:21:47 +0200 Subject: [PATCH 4/7] tweaks --- content/blog/Announcing Zstandard in Rust.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/content/blog/Announcing Zstandard in Rust.md b/content/blog/Announcing Zstandard in Rust.md index 7f28f17..1622536 100644 --- a/content/blog/Announcing Zstandard in Rust.md +++ b/content/blog/Announcing Zstandard in Rust.md @@ -19,6 +19,8 @@ Zstd is a compression format that has been designed with modern CPUs in mind. It Using zstd in Rust is already supported via the [zstd](https://crates.io/crates/zstd) crate, so why bother with a whole new implementation? +### Portability + One practical advantage of Rust is that it is straightforward to write portable software. Currently the `zstd` crate compiles the C code from source, which requires a C toolchain for the target and for the target to be supported at all. Setting up a C toolchain on Windows or for webassembly can be a challenge, and isn't needed with a pure-Rust implementation. For Rust programmers, using dependencies written in Rust is a superior experience. ### Drop-in replacement @@ -33,7 +35,7 @@ The [C reference implementation](https://github.com/facebook/zstd) is maintained The reference implementation was initially translated using [`c2rust`](https://c2rust.com/), and we have since completed the cleanup work for decompression and the dictionary builder. -We test our rust code (compiled into a C static library) with the the reference implementation's test suite. We additionally use fuzz testing and Miri, so we're confident in the correctness of our implementation. +We test our Rust code (compiled into a C static library) with the the reference implementation's test suite. We additionally use fuzz testing and Miri, so we're confident in the correctness of our implementation. The release is available here: . @@ -41,9 +43,9 @@ This work has also had ecosystem benefits: we've found several limitations of Mi ### The cost of memory safety -By default decompression performance of our implementation is a few percent slower than the C reference implementation. We believe we can justify this though, because with the `unsafe-performance-experimental` feature flag enabled we match C performance. +By default decompression performance of our implementation is a few percent slower than the C reference implementation. We benchmark each merge in to `main` in our [benchmark suite](https://trifectatechfoundation.github.io/libzstd-rs-sys-bench/). -This feature flag disables 4 bounds checks where data from the input is used to index into a data structure. For most users a ~3% performance regression is likely an acceptable price to pay for increased memory safety. If you really need that last bit of performance, you can enable the flag at your own risk. Its behavior matches C which also does not check the bounds and appears to run just fine in many production systems. +We believe we can justify this regression though, because with the `unsafe-performance-experimental` feature flag enabled we match C performance. This feature flag disables 4 bounds checks where data from the input is used to index into a data structure. For most users a ~3% performance regression is likely an acceptable price to pay for increased memory safety. If you really do need that last bit of performance, you can enable the flag at your own risk. Its behavior in these four locations matches C which also does not check the bounds and appears to run just fine in many production systems. ## Future From de341499441e753373f9e8e99ae4f7beaa34db16 Mon Sep 17 00:00:00 2001 From: Erik Jonkers Date: Fri, 29 May 2026 11:11:51 +0200 Subject: [PATCH 5/7] Apply suggestion from @erikjee --- content/blog/Announcing Zstandard in Rust.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/Announcing Zstandard in Rust.md b/content/blog/Announcing Zstandard in Rust.md index 1622536..75c925d 100644 --- a/content/blog/Announcing Zstandard in Rust.md +++ b/content/blog/Announcing Zstandard in Rust.md @@ -9,7 +9,7 @@ tags = ["libzstd-rs", "announcement"] +++ -Over the past year we've been silently working on our third compression project. After [zlib](https://github.com/trifectatechfoundation/zlib-rs) and [bzip2](https://github.com/trifectatechfoundation/libbzip2-rs) we're taking on zstd with [libzstd-rs-sys](https://github.com/trifectatechfoundation/libzstd-rs-sys). +Over the past year, we've been silently working on our third compression project. After [zlib](https://github.com/trifectatechfoundation/zlib-rs) and [bzip2](https://github.com/trifectatechfoundation/libbzip2-rs) we're now taking on zstd with [libzstd-rs-sys](https://github.com/trifectatechfoundation/libzstd-rs-sys), and are proud to announce its first release. From e8d35e13a1b8ac1c72958a1deb5f5722efe3e478 Mon Sep 17 00:00:00 2001 From: Erik Jonkers Date: Fri, 29 May 2026 11:16:17 +0200 Subject: [PATCH 6/7] Apply suggestion from @erikjee --- content/blog/Announcing Zstandard in Rust.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/Announcing Zstandard in Rust.md b/content/blog/Announcing Zstandard in Rust.md index 75c925d..aa57ec9 100644 --- a/content/blog/Announcing Zstandard in Rust.md +++ b/content/blog/Announcing Zstandard in Rust.md @@ -37,7 +37,7 @@ The reference implementation was initially translated using [`c2rust`](https://c We test our Rust code (compiled into a C static library) with the the reference implementation's test suite. We additionally use fuzz testing and Miri, so we're confident in the correctness of our implementation. -The release is available here: . +The pre-release is available here: . This work has also had ecosystem benefits: we've found several limitations of Miri (that are now resolved) and made contributions to Clippy. A more complete write-up of our recent contributions can be found [here](https://trifectatech.org/blog/fixing-our-own-problems-in-the-rust-compiler/). From afa6d5bd536a2c5fb3a0e3d25c31bd39bc3b5776 Mon Sep 17 00:00:00 2001 From: Erik Jonkers Date: Fri, 29 May 2026 11:20:05 +0200 Subject: [PATCH 7/7] Apply suggestion from @erikjee --- content/blog/Announcing Zstandard in Rust.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/Announcing Zstandard in Rust.md b/content/blog/Announcing Zstandard in Rust.md index aa57ec9..00c1e86 100644 --- a/content/blog/Announcing Zstandard in Rust.md +++ b/content/blog/Announcing Zstandard in Rust.md @@ -77,7 +77,7 @@ Astral's mission is to make the Python ecosystem more productive. Learn more at [**NLnet Foundation**](https://nlnet.nl/) is a recognised philanthropic non-profit foundation. The foundation stimulates network research and development in the domain of Internet technology. The articles of association for the NLnet Foundation state: "to promote the exchange of electronic information and all that is related or beneficial to that purpose". The prefered instrument of NLnet is awarding microgrants to small, independent projects supporting independent researchers and developers. Read more on [nlnet.nl](https://nlnet.nl/). -[**Chainguard**](https://www.chainguard.dev/) builds trusted open source software for a secure-by-default stack. We believe in a world where engineering teams move at the speed of innovation, confident that every line of code is secure. We guard open source software from what could go wrong, so engineering teams can build what they want. Read more on [chainguard.dev](https://www.chainguard.dev/) +[**Chainguard**](https://www.chainguard.dev/) builds trusted open source software for a secure-by-default stack. Read more on [chainguard.dev](https://www.chainguard.dev/) ### Further Information