NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #3364 most downloaded on crates.io
Macros for tsify
Last release 1 months ago
23 Aug 2026
Ships unpredictably
gaps range from 9 days to 1.9 years
Some releases are documented
notes for 4 of 15 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
15 releases · first in 2022
One column per quarter.
Added #[tsify(rename = "...")], which renames the generated TypeScript declaration and nothing else — references from other types still emit the Rust
#[tsify(rename = "...")], which renames the generated TypeScript declaration and nothing else — references from other types still emit the Rust ident, so point them at the new name with #[tsify(type = "...")] at each reference site. Cannot be combined with type_prefix or type_suffix. Resolves #70, which had been blocking the 0.4 → 0.5 upgrade for anyone with two same-named types in different modulestype_prefix and type_suffix no longer rename type parameters. A type parameter has no declaration for the affix to rename, so #[tsify(type_prefix = "Ts")] struct Wrapper<T> { x: T } declared export interface TsWrapper { x: TsT; } — the parameter dropped, and TsT never declared anywhere. It now declares export interface TsWrapper<T> { x: T; }. If you use either attribute on a generic type, its .d.ts changes. There was no correct way to use the affix on a generic type before this, so nothing that type-checked without skipLibCheck is affectedtype_prefix and type_suffix no longer reach the tag literal of an internally-tagged type. That value comes from serde, which was never told about the affix, so #[serde(tag = "kind")] #[tsify(type_prefix = "A")] struct Config declared kind: "AConfig" where serde has always serialized "Config". It now declares kind: "Config". If you narrowed on the old literal, that code compiled and never matched at runtime; it is now a compile error. Applying either attribute to only some of your types still emits references to names that were never declared — that half of #94 is still openRaises the tsify-macros floor to 0.5.7 alongside the version bump. The published 0.5.6 macro predates the Clone derive on JsType, which Ts's Clone and
Raises the tsify-macros floor to 0.5.7 alongside the version bump. The
published 0.5.6 macro predates the Clone derive on JsType, which Ts's
Clone and its IntoWasmAbi for &Ts both require, so a root-only bump
would let an existing lockfile keep resolving a macro that cannot build
&Ts<T> parameters.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Review of the release candidate turned up a leak in the type whose purpose
is to avoid them: IntoWasmAbi for &Ts cloned the JS handle, but the shim
generated for a borrowed argument never releases it. wasm-bindgen's own
extern types pass the handle by reference for exactly this reason; match
that. The Clone bound falls away with it.
Docs corrected against what the code actually does: only from_wasm_abi
reaches throw_str (into_wasm_abi panics), and the README's namespace enum
and .d.ts examples predated the output they describe. Both are now what a
build emits.
The e2e gate was weaker than it looked: build_all.sh let a failed
wasm-pack build through, compare_output.sh skipped references whose
counterpart was missing, and a generics test asserted the wrong type.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
The &Ts leak was introduced and fixed between releases, so listing it
implies 0.5.6 shipped it. "Addresses" instead of "Resolves": #47 keeps an
upstream remainder and #86 an ergonomics one. The .d.ts sample now matches
a build byte for byte.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Co-authored-by: Claude Fable 5 noreply@anthropic.com
Ts<T>, a wrapper for #[wasm_bindgen] parameters and return types. #[tsify(from_wasm_abi)] deserializes at the ABI boundary, which cannot report failure, so bad input from JavaScript ends in wasm_bindgen::throw_str — a catchable JS exception that skips destructors, leaking a little on every failure until the instance dies. Ts<T> keeps the boundary infallible and moves the conversion into the function body, where it is an ordinary Result. Addresses #65, #47 and #86. @cormacrelf contributed #71into_wasm_abi and from_wasm_abi in favour of Ts<T>. into_wasm_abi panics rather than leaks on failure, but it has the same root cause and the same fix. The attributes still work, and no removal is planned; see the README for detailsTs<T> can now be returned from async fn. @hgiesel contributed #84#[tsify(namespace)] enums now emit export type E = E.A | E.B instead of repeating each variant's shape in the union. @hgiesel contributed #78Resolve the issue with default parameters in generics
Don't assume a struct named Range is automatically a Range type
Range is automatically a Range type#[automatically_derived] on impl blocks#[serde(skip)]wasm_bindgen dep versionNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →