abi-adapter
English | 简体中文
Generate wasm interfaces for ordinary Rust functions. abi! converts arguments
according to a declaration, calls the target, and converts its result.
No third-party dependencies; supports no_std. Requires Rust 1.85+.
Quick start
Add the crate to your project:
cargo add abi-adapter
To use unreleased changes from main, depend on the Git repository instead:
cargo add abi-adapter --git https://github.com/vhexl/abi-adapter
use abi;
abi!
host generates a regular Rust function; guest("double.v1") generates a wasm export.
Each bracketed group maps to one target argument. Slots are Rust u32 values
and wasm i32 values; wrappers directly return zero or one slot.
Custom types use FromSlots<N> and IntoSlots<N>.
For a complete wasm example, see examples/guest.rs.
Users define runtime registration, memory protocols, and error codes. Panics from conversions and target functions are not caught; guest exports trap.
Documentation
The following guides are in Chinese:
- Usage guide: custom conversions,
ctx, wasm exports, and common problems. - Buffer example: multi-slot results and memory conventions.
- Architecture: modules, execution flow, and design decisions.
Development
node scripts/check.cjs runs the full local check: formatting, Clippy, tests,
Rustdoc, the wasm build and verification, and a package build. It needs Rust 1.85+
(with rustfmt, Clippy, and the wasm32-unknown-unknown target) and Node.js 22+.
To verify the minimum supported Rust version, install 1.85.0 with the same target
and run node scripts/check.cjs --toolchain 1.85.0 --compatibility.
Releasing
This project uses release-plz to automate releases:
- Every push to
maintriggers release-plz to open/update a Release PR with the correct version bumps and a changelog derived from Conventional Commits. - Merge the Release PR when ready — release-plz will then:
- Create the git tag (
v<version>) - Publish to crates.io
- Create a GitHub release with release notes
- Create the git tag (
Publishing uses crates.io Trusted Publishing, so no registry token is stored; setup notes are in release-plz.yml.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.