NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1018 most downloaded on crates.io
Fancy diagnostic reporting library and protocol for us mere mortals who aren't compiler hackers.
Last release 1 years ago
27 Apr 2025
Release timing varies
gaps range from 2 weeks to 9 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
5 years old
67 releases · first in 2021
One column per quarter.
chore: Release miette version 7.6.0
chore: Release miette version 7.6.0
thiserror from 1.0.56 to 2.0.11 (#426) (59c81617)<a name="7.5.0"></a>
graphical: support rendering related diagnostics as nested
chore: Release miette version 7.4.0
chore: Release miette version 7.4.0
WrapError for Option (#409) (7fae60fd)<a name="7.3.0"></a>
chore: Release miette version 7.3.0
chore: Release miette version 7.3.0
from_err() method to Report (#403) (93d3bd11)Diagnostic for Infallible (#402) (f3fb4c1e)alt attribut for single-line-example.png (#372) (b82cc81b)clippy::doc_lazy_continuation lints (#395) (15beec43)dep: syntax for dependencies in features. (#394) (789a04e3)needless_return lint. (#405) (5f441d01)<a name="7.2.0"></a>
chore: Release miette version 7.2.0
chore: Release miette version 7.2.0
<a name="7.1.0"></a>
tests: revert test-breaking changes of e5c7ae4
BREAKING CHANGE: This bumps owo-colors to 4.0, which is a breaking change because we expose its styles as part of the graphical renderer API
This is a small breaking release on the heels of 6.0 because I neglected to bump owo-colors. I figured it's a good time to do it, before 6.0 gets more widely used.
<a name="6.0.1"></a>
graphical: oops. Fix theme issue
It also comes with a few breaking changes so make sure to check below and update your code as needed!
The long-awaited 6.0 release of miette is here, with TONS of goodies, not
least of which is syntax highlighting support!
It also comes with a few breaking changes so make sure to check below and update your code as needed!
miette-derive be able to be turned off (#304) (c7ba5b7e)textwrap options (#321) (fd77257c)wrap_lines: bool option allowing wrapping be disabled entirely (#328) (b0744462)source_code() impl.usize for length (#265) (fad0e76a)
SourceSpan's length type to usize.NamedSource type generic over its Source type, instead of boxing it.std::io::IsTerminal (e5c7ae46)std::sync::OnceLock (4c48584f)
cargo test with default features. (#294) (1f448e47)is_terminal sys call from MietteHandlerOpts::build (#325) (f1dc89c0)NamedResult to where it is used (#309) (d37ada87)<a name="5.10.0"></a>
protocol: add StdError impl for Box
<a name="5.9.0"></a>
const: Constify various functions
source: Add getter for NamedSource name
While this is a semver-minor release, there's potential for it to have knock-on effects due to the syn2 upgrade. There's been issues as this new versi
While this is a semver-minor release, there's potential for it to have knock-on effects due to the syn2 upgrade. There's been issues as this new version propagates between syn/thiserror versions (for example, see a similar change in eyre).
The other thing of note is that backtrace printing is now much better! Try the hook and see for yourself!
<a name="5.6.0"></a>
ci: configure clippy-specific MSRV
SourceCode: Implement SourceCode for Vec
<a name="5.4.1"></a>
graphical: Fix panic with zero-width span at end of line
<a name="5.4.0"></a>
version: declare minimum supported rust version at 1.56.0
miri: Resolve Miri's concerns around unsafe code
utils: Fix off-by-one error in SourceOffset::from_location
docs: readme was getting cut off during generation
deps: bump minimum supports-color version
protocol: Implement SourceCode for Arc (and similar types)
<a name="5.0.0"></a>
theme: restructure automatic color selection
MietteHandlerOpts::ansi_colors is removedMietteHandlerOpts::rgb_color now takes an enum that controls the color
format used when color support is enabled, and has no effect otherwise.<a name="4.7.1"></a>
tests: add Display impl to diagnostic_source example
diagnostic_source: add protocol method for Diagnostic-aware source chaining
spans: add From shorthand for zero-length SourceSpans
spans: make SourceSpan implement Copy
<a name="v4.4.0"></a>
report: Add conversion from Report to Box
reporter: Allow GraphicalReportHandler to disable url display
<a name="v4.2.1"></a>
handlers: source code propagation for JSON handler
derive: allow Report in related
handlers: propagate source code to related errors
graphical: boolean was messing up graphical display
BREAKING CHANGE: NO_COLOR no longer triggers the narrated handler. Use NO_GRAPHICS instead.
diagnostic attribute more flexible. (#115) (5b8b5478)
diagnostic attribute duplication will now error..context() method to the Report (#109) (2649fd27)<a name="v3.3.0"></a>
chain: correct Chain structure exported
tabs: Add replace tabs with spaces option
### Features * SourceSpan: add impl From
No code changes this release. Just improved documentation and related tests.
No code changes this release. Just improved documentation and related tests.
<a name="v3.0.0"></a>
BREAKING CHANGE: linkification option method on GraphicalReportHandler has been changed to .with_links(bool)
It's here! Have fun!
It's a pretty significant change, so if you were using miette's snippet
support previously, you'll need to update your code.
<a name="3.0.0-beta.0"></a>
graphical: stop rendering red vbars before the last item
Time to get ready for release!
<a name="3.0.0-alpha.0"></a>
BREAKING CHANGE: linkification option method on GraphicalReportHandler has been changed to .with_links(bool)
This is the first WIP alpha release of miette 3.0!
It's a MAJOR rewrite of the entire snippet definition and rendering system, and you can expect even more changes before 3.0 goes live.
In the meantime, there's this. :)
<a name="2.2.0"></a>
So it turns out `3.0.0` is already under way, if you didn't already hear!
So it turns out 3.0.0 is already under way, if you didn't already hear!
It's going to be an exciting release, but we'll still be putting out bugfixes
and (backwards-compatible) features in the 2.x line until that's ready.
And there's definitely stuff in this one to be excited about! Not least of all
the ability to forward diagnostic metadata when wrapping other
Diagnostics. Huge thanks to @cormacrelf for
that one!
We've also got some nice improvements to reporter formatting that should make output look at least a little nicer--most notably, we now wrap messages and footers along the appropriate column so formatting keeps looking good even when you use newlines!
Finally, huge thanks to @icewind1991 for fixing a really weird-looking bug caused by an off-by-one error. Oopsies 😅
#[diagnostic(forward(field_name), code(...))] (#41) (2fa5551c)<a name="2.1.2"></a>
So it turns out I forgot to make snippets and other stuff forward through when you use .context() &co. This should be fixed now 😅
So it turns out I forgot to make snippets and other stuff forward through when
you use .context() &co. This should be fixed now 😅
Report (e4fdac38)<a name="2.1.1"></a>
This is a small, but visually-noticeable bug fix. I spent some time playing with colors and styling and made some fixes that will improve where people
This is a small, but visually-noticeable bug fix. I spent some time playing with colors and styling and made some fixes that will improve where people's eyes are drawn to, and also take into account color visibility issues a bit more.
<a name="2.1.0"></a>
This is a small release with a handful of quality of life improvements (and a small bugfix).
This release overhauls the toplevel/main experience for miette. It adds a new Report type based on eyre::Report and overhauls various types to fit int
This release overhauls the toplevel/main experience for miette. It adds a
new Report type based on eyre::Report and overhauls various types to fit
into this model, as well as prepare for some future changes in
Rust that will make it possible to
integrate miette directly with crates like eyre instead of having to use
this specific Report.
On top of that, it includes a couple of nice new features, such as
#[diagnostic(transparent)], which should be super useful when wrapping other
diagnostics with your own types!
DiagnosticReport is now just Report, and is a different, eyre::Report-like type.DiagnosticResult is now just Result..into_diagnostic() now just transforms the error into a Report.DiagnosticReportPrinter has been replaced with ReportHandlerset_printer has been replaced by set_hookcode is now optional..into_diagnostic() no longer takes a code argument.#[diagnostic] is now optional when deriving Diagnostic.#[diagnostic(transparent,forward)] (#36) (53f5d6d1)T: Clone from Source implementation for Cow. (#42) (0427c9f9)<a name="1.1.0"></a>
This is a small release of patches entirely not my own!
This is a small release of patches entirely not my own!
The exciting new feature is the ability to do thiserror-style
#[diagnostic(transparent)] when using the derive macro, which will defer
diagnostics to a Diagnostic referred to by the struct/enum!
Big thanks to @cormacrelf and @felipesere for your contributions!
#[diagnostic(transparent,forward)] (#36) (53f5d6d1)<a name="1.0.1"></a>
This is a (literally) small release. I noticed that the crate's size had increased significantly before I realized cargo was including the images/ fol
This is a (literally) small release. I noticed that the crate's size had
increased significantly before I realized cargo was including the images/
folder. This is not needed, as these images are just hosted on GitHub.
miette should be smaller now, I hope :)
<a name="1.0.0"></a>
...you know what? I'm just gonna tag 1.0.0, because I don't want sub-1.0 versions anymore, but the Cargo ecosystem buries pre-releases pretty thorough
...you know what? I'm just gonna tag 1.0.0, because I don't want sub-1.0 versions anymore, but the Cargo ecosystem buries pre-releases pretty thoroughly. Integers are cheap!
So here we are! We made it to 1.0, and with some really nice goodies to boot.
Most fun is the fact that the default printer now has clickabble url linking
support. A new Diagnostic::url() method has been added to the protocol that,
is used to figure out what URL to send folks to! This should work on most
"modern" terminals, but more thorough support checking will be done in the
future. And of course, the narrated reporter prints them out too.
I also took the time to completely redo how messages, labels, and filenames are handled in the system, and this is a pretty big change you might run into. Godspeed!
Last but not least, we got our first external contribution! Thank you to @martica for the bug fix!
Anyway, here's to 1.0, and to many more after that. Enjoy! :)
rgb style with nicer colors (3546dcec) - @martica<a name="1.0.0-beta.1"></a>
New features may still be added, and breaking changes may still happen, but miette is now considered "good enough to use", and breaking changes are ex…
It's happening, folks! miette is now working towards stability and is now in
beta! We'll keep it like this for a little while until a few more people have
tried it out and given feedback. New features may still be added, and breaking
changes may still happen, but miette is now considered "good enough to use",
and breaking changes are expected to be more rare.
Oh, and as part of this release, the docs were overhauled, particularly the README, so you might want to take a gander at them!
dyn (c1da4a0d)<a name="0.13.0"></a>
This release includes some accessibility improvements: miette now includes a "narratable" printer that formats diagnostics like this:
This release includes some accessibility improvements: miette now includes a "narratable" printer that formats diagnostics like this:
Error: Received some bad JSON from the source. Unable to parse.
Caused by: missing field `foo` at line 1 column 1700
Begin snippet for https://api.nuget.org/v3/registration5-gz-semver2/json.net/index.json starting
at line 1, column 1659
snippet line 1: gs":["json"],"title":"","version":"1.0.0"},"packageContent":"https://api.nuget.o
highlight starting at line 1, column 1699: last parsing location
diagnostic help: This is a bug. It might be in ruget, or it might be in the source you're using,
but it's definitely a bug and should be reported.
diagnostic error code: ruget::api::bad_json
This style is the default in a number of situations:
NO_COLOR env var is present and set, and not 0.CLICOLOR env var is present and not set to 1.stdout or stderr are not TTYs.You can override and customize this behavior any way you want by using the
miette::set_reporter() function at the toplevel of your application, but we
encourage you to at least make the narratable printer an option for your
users, since miette's default printer is exceptionally bad for screen
readers.
Our hope is that this release is only the starting point towards making miette's error reporting not just really fancy and cool, but friendly and accessible to everyone.
<a name="0.12.0"></a>
This is a SUPER EXCITING release! With this, miette now has a full-featured pretty-printer that can handle cause chains, snippets, help text, and lots
This is a SUPER EXCITING release! With this, miette now has a full-featured pretty-printer that can handle cause chains, snippets, help text, and lots more!
Check out the serde_json example to see a "real-world" case!
This release also adds support for full thiserror-style format strings to
the help() diagnostic derive attribute!
We're rapidly approaching a 1.0-beta release. One more extra-fun treat left and we can start stabilizing!
<a name="0.11.0"></a>
BIG changes this time. The whole end-to-end experience for tossing around Diagnostics in your code has been overhauled, printing reports is easier tha
BIG changes this time. The whole end-to-end experience for tossing around
Diagnostics in your code has been overhauled, printing reports is easier than
ever, and we even have an eyre::Report-style wrapper you can pass around in
app-internal returns!
<a name="0.10.0"></a>
Lots of goodies in this release! I'm working hard on the 1.0.0 Roadmap, so things are changing pretty quick, and I thought it would be nice to release
Lots of goodies in this release! I'm working hard on the 1.0.0 Roadmap, so things are changing pretty quick, and I thought it would be nice to release this checkpoint.
<a name="0.9.0"></a>
Yay new version already! A pretty significant API change, too! ��
Yay new version already! A pretty significant API change, too! ��
SourceSpans have changed a bit: for one, they're based on offset/length now,
instead of start/end. For two, they have a new Option<String> field,
label, which is meant to be used by reporters in different contexts. For
example, highlight snippets will use them as the labels for underlined
sections of code, while the snippet context will use the label as the "file
name" for the Source they point to.
<a name="0.8.1"></a>
Just a small bump to update the readme (and docs.rs in the process) with the new snippet derive stuff. No notable changes.
Just a small bump to update the readme (and docs.rs in the process) with the new snippet derive stuff. No notable changes.
<a name="0.8.0"></a>
You can full-on use #[derive(Diagnostic)] to define snippets now. That's a big deal.
You can full-on use #[derive(Diagnostic)] to define snippets now. That's a
big deal.
<a name="0.7.0"></a>
Welp. 0.6.0 was basically completely broken, so I tore out the darling-based derive macros and rewrote the whole thing using syn, and things are much
Welp. 0.6.0 was basically completely broken, so I tore out the
darling-based derive macros and rewrote the whole thing using syn, and
things are much better now!
There's still a few bits and bobs to add, like snippets (oof. big.), and full help format string support (they don't quite work in enums right now), but otherwise, this is pretty usable~
<a name="0.6.0"></a>
We haz a basic derive macro now!
We haz a basic derive macro now!
<a name="0.5.0"></a>
I decided to yank some handy (optional) utilities from a project I'm using miette in. These should make using it more ergonomic.
I decided to yank some handy (optional) utilities from a project I'm using
miette in. These should make using it more ergonomic.
<a name="0.4.0"></a>
Your coding agent can read these notes before it upgrades. Set up the MCP server →