# Changelog
All notable changes to this project are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.4] - 2026-07-29
### Changed
- Rewrote `README.md`, `SECURITY.md`, and `CHANGELOG.md` in ASD-STE100
strict mode. Removed marketing language, passive voice, and long
sentences.
- Fixed `README.md` inaccuracies. The stale note that said the published
version is `1.0.1` is removed. The install version now reads `1.1`.
The test count now reads 142.
- Fixed `SECURITY.md` inaccuracies. The security changelog now lists
1.0.2 and 1.0.3 changes. The stale "Last Updated" date is corrected.
The reference to "the multibase crate" in the reporting section now
says "the `multi-base` crate".
## [1.0.3] - 2026-07-16
### Security
- Removed the unmaintained `serde_cbor` dev-dependency. This addresses
RUSTSEC-2021-0127.
### Changed
- Updated `SECURITY.md` to document the inline `Base256Emoji`
implementation. The stale reference to the dropped `base256emoji`
dependency is corrected.
- Updated `SECURITY.md` code examples to use `multi_base::` instead of
the old `multibase::` module path.
## [1.0.2] - 2026-07-15
### Added
- `#![deny(unsafe_code)]` at the crate root. The library has no `unsafe`
code. This lint enforces that at compile time.
- `#[inline]` on hot encode and decode paths. This covers `encode`,
`decode`, `encode_into`, `decode_into`, `encode_to_validated`,
`parse_encoded`, `Base::from_code`, `Base::code`, `Base::encode`,
`Base::decode`, `Base::decode_into`, `EncodedString::base`,
`EncodedString::as_str`, `EncodedString::decode`,
`EncodedString::decode_with_strictness`, and the macro-generated
`BaseCodec` implementations.
- `const fn` on `Base::from_code`, `Base::code`, and
`EncodedString::base`.
- `#[must_use]` on `EncodedString::base`, `as_str`, and `into_inner`.
- `# Errors` doc sections on `decode()` and `Base::from_code`.
- `# Panics` doc section on `encode_to_validated()`.
- MSRV declared as `rust-version = "1.85"` in `Cargo.toml`. CI verifies
the MSRV with a dedicated job.
- `cargo audit` job in CI.
- Clippy lint configuration. `[lints.clippy]` sets `pedantic`,
`nursery`, and `cargo` groups to `warn`. `[lints.rust]` sets
`unsafe_code` to `deny`.
### Changed
- Edition updated to 2024 from 2021. The `gen` keyword is now reserved.
Benchmarks use `rng.r#gen()`.
- CLI fixed. `cli/Cargo.toml` and `cli/main.rs` updated from the
legacy `multibase` dependency name to `multi-base`.
- Fuzz targets fixed. `fuzz/Cargo.toml` and fuzz targets updated from
the legacy `multibase` name to `multi-base`. Edition 2024 and lint
config added.
- `Error::eq` merged identical match arms into a single pattern.
- Backticked `rfc4648` in base-variant doc comments.
## [1.0.1] - 2026-07-13
### Changed
- Synced from the bettersign workspace (`bs-multibase` 0.7.0).
- Renamed the crate from `bs-multibase` to `multi-base`.
- Reimplemented `Base256Emoji` inline. Dropped the external
`base256emoji` dependency.
- Initial published release on crates.io as `multi-base`.
### Added
- Zero-copy APIs: `encode_into()` and `decode_into()` for buffer reuse.
- `encode()` optimization. Pre-allocates exact capacity instead of
`insert(0, char)`.
- `EncodedString` newtype. A validated multibase-encoded string type.
Implements `FromStr`, `TryFrom<String>`, `TryFrom<&str>`, `AsRef<str>`,
and `Display`. Gives `decode()` and `decode_with_strictness()`
methods.
- Convenience functions: `encode_to_validated()` and `parse_encoded()`.
- 16 property-based tests for round-trip, determinism, and buffer-reuse
invariants.
- Error handling tests for all base types.
- Concurrency tests for parallel operation verification.
- Enhanced benchmarks for all base types and sizes.
- Macro documentation for `build_base_enum`, `derive_base_encoding`,
and `derive_base_x` macros.
- Macro hygiene with `$crate::` prefixes.
- CLI migrated from structopt 0.3 to clap v4.
- CLI deduplication. Unified Base and string mappings with a macro.
- CLI error messages. Context added to all error paths. Unknown bases
list all available options.
- 17 security tests: large inputs, malformed input, buffer-reuse
safety, concurrent operations, and resource exhaustion.
- Fuzzing infrastructure with `cargo-fuzz`. Targets: `fuzz_decode`,
`fuzz_encode`, and `fuzz_roundtrip`.
- `SECURITY.md` with security review results, best practices, and
vulnerability reporting process.
- `CONCURRENCY.md` with thread safety guarantees and concurrent usage
patterns.
- 20 thread safety tests with compile-time `Send` and `Sync` assertions
and a 2000-operation stress test.
### Changed (1.0.1)
- BREAKING: Error type uses `thiserror` instead of a manual
implementation. `#[non_exhaustive]` added for forward compatibility.
- BREAKING: Identity encoding uses lossy UTF-8 conversion instead of
panicking. Invalid UTF-8 bytes are replaced with U+FFFD. They do not
round-trip.
- Updated from Rust 2018 to Rust 2021.
- Added SPDX-License-Identifier headers to all source files.
- Enhanced public item documentation with performance characteristics,
usage examples, and error conditions.
### Fixed (1.0.1)
- Panic in Identity encoding on invalid UTF-8. Now uses lossy
conversion.
- O(n) string reallocation in `encode()`.
- Error context lost during conversions.
- Rustdoc warnings and broken links.
## [1.0.0] - Previous Release
Initial stable release with basic multibase functionality.
### Features
- Support for 24 base encodings.
- Strict and permissive decoding modes.
- `no_std` support with `alloc`.
- Basic error handling.
- CLI tool.
## Compatibility
### Minimum Supported Rust Version (MSRV)
Rust 1.85 (Edition 2024).
### Platform Support
- Linux
- macOS
- Windows
- WebAssembly (wasm32)
- `no_std` environments (with `alloc`)
### Breaking Changes in 1.0.1
1. Error type structure changed. Uses `thiserror`.
2. Identity encoding no longer panics. Uses lossy conversion.
3. `#[non_exhaustive]` added to `Error` enum.
4. Edition updated to 2021.
[1.0.4]: https://github.com/cryptidtech/multi-base/compare/v1.0.3...v1.0.4
[1.0.3]: https://github.com/cryptidtech/multi-base/compare/v1.0.2...v1.0.3
[1.0.2]: https://github.com/cryptidtech/multi-base/compare/v1.0.1...v1.0.2
[1.0.1]: https://github.com/cryptidtech/multi-base/releases/tag/v1.0.1
[1.0.0]: https://github.com/multiformats/rust-multibase/releases/tag/v1.0.0