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)
- Dual WASM Strategy: Automated release of both Standard and SIMD binaries to maximize performance and compatibility.
- Barcode Marker Support: Robust decoding for square matrix markers (3x3 to 6x6) with ECC.
- 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:
# or for barcode markers
This example loads a camera parameter file, a marker (pattern or barcode), 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 modules: Use the dual-build script to generate both Standard and SIMD bundles:
-
Run the demo: The
wwwfolder contains a diagnostic demo with an engine selector and threshold visualization.# Serve using any local HTTP server, e.g.:
π 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, dual-build scripts, and diagnostic web demo.benchmarks: C vs Rust performance comparison suite.examples: Usage demonstrations for patterns and barcodes.
πΊοΈ Roadmap
π― Near-term Goals (v1.0.0+)
- Enhanced Documentation: Expand API reference, integration walkthroughs for JS/TS, and provide detailed usage examples.
- WASM Memory Management: Improve resource cleanup when switching engines or markers in long-running browser sessions.
π 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 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.