WebARKitLib-rs π¦
WebARKitLib-rs is a high-performance, memory-safe Rust port of the WebARKitLib (originally C/C++).
This project aims to provide a pure-Rust implementation of the core ARToolKit algorithms, targeting both native systems and WebAssembly (WASM) for high-performance augmented reality in the browser.
[!NOTE] This project is currently a Work in Progress. While the core marker detection and pose estimation are functional, we are continuously optimizing and expanding the feature set.
π Key Features
- Pure Rust: Built for safety, speed, and modern concurrency. (crates.io)
- WASM Ready: High-performance tracking in the browser via WebAssembly. (@webarkit/webarkitlib-wasm)
- Side-Effect Free: Pure mathematical engine, easy to test and integrate.
- CI-Integrated Benchmarking: Performance parity with original C implementation.
π Getting Started
Native Rust Example
To see the marker detection in action on your local machine, run the provided simple example:
This example loads a camera parameter file, a hiro marker pattern, and a sample image, performing detection and outputting the 3D pose extrinsics.
WebAssembly (WASM) Demo
The WASM port allows you to run the AR engine directly in most modern browsers.
-
Build the WASM module:
-
Run the demo: You can serve the
wwwfolder using any local HTTP server (e.g.,python -m http.server 8080).
π Benchmarking
We maintain a strict performance comparison with the original C library to ensure our Rust port remains competitive.
Running the Comparison
-
Bootstrap the C library:
-
Execute the Suite:
# Rust Benchmark # C Benchmark (Manual build required once)
Tracking Performance
We use criterion to track performance over time. You can save specific snapshots as "baselines":
# Save a milestone baseline
ποΈ Project Structure
crates/core: The core AR engine (pure Rust).crates/wasm: WASM bindings and JavaScript glue code.benchmarks: C vs Rust performance comparison suite.examples: Usage demonstrations.
πΊοΈ Roadmap
π― Near-term Goals (v1.0.0+)
- Dual WASM Strategy: Automate the release of both non-SIMD (current) and SIMD-enabled binaries to maximize compatibility across different browser environments.
- Barcode Marker Support: Port matrix-code detection logic to support barcode markers.
- Enhanced Documentation: Expand API reference, integration walkthroughs for JS/TS, and provide detailed usage examples.
π Long-term Vision
- Multi-Marker Support: Port
arMultilogic to enable tracking of multiple markers simultaneously. - KPM/NFT (Natural Feature Tracking): Implement robust tracking of arbitrary images and surfaces.
- Advanced Video Abstraction: Develop a cross-platform video handling layer (inspired by ARWrapper/ARToolkitX) to simplify integration with various input sources.
π Credits
This project is a port of the excellent WebARKitLib project. Special thanks to the original ARToolKit contributors.
π License
This project is licensed under the LGPLv3 License - see the LICENSE file for details.