# Multi-Language Bindings Guide
This document provides a quick overview of all available language bindings for `aam-rs`.
## Quick Links
- **Rust** - Native library (main implementation)
- **C/C++** - FFI bindings via cbindgen
- **Python** - PyO3 based bindings
- **Node.js** - NAPI based bindings
- **Java** - JNI based bindings
- **Go** - cgo based bindings
- **C#/.NET** - P/Invoke via csbindgen
## C# / .NET (NEW!)
### Quick Start
```bash
# Install via NuGet
dotnet add package aam-csharp
# Use in your code
using AamCsharp;
using var doc = AamDocument.Parse("host = localhost\nport = 8080");
Console.WriteLine(doc.FindObj("host"));
```
### Supported Platforms
- Windows x64
- macOS x64 & ARM64
- Linux x64
### Documentation
- [C# README](csharp/README.md) - User guide
- [C# CONTRIBUTING](csharp/CONTRIBUTING.md) - Development guide
- [Binding Generation Guide](docs/CSHARP_BINDING_GENERATION.md) - Technical details
### Local Development
```bash
./csharp/setup-native.sh # Linux/macOS
csharp\setup-native.bat # Windows
cd csharp && dotnet test
```
---
## Python
### Quick Start
```bash
pip install aam-py
```
```python
from aam_py import AAML
doc = AAML.parse("host = localhost\nport = 8080")
print(doc.find_obj("host"))
```
### Documentation
- See [Python README](python/)
---
## Node.js
### Quick Start
```bash
npm install aam-nodejs
```
```javascript
const aam = require('aam-nodejs');
const doc = aam.parse("host = localhost\nport = 8080");
console.log(doc.findObj("host"));
```
### Documentation
- See [Node.js README](js/README.md)
---
## Java
### Quick Start
```gradle
dependencies {
implementation "com.ininids:aam-rs:1.0.0"
}
```
```java
import com.ininids.aam.AamDocument;
AamDocument doc = AamDocument.parse("host = localhost\nport = 8080");
System.out.println(doc.findObj("host"));
```
### Documentation
- See [Java README](java/)
---
## Go
### Quick Start
```go
package main
import (
"fmt"
"github.com/INiNiDS/aam-rs/go"
)
func main() {
doc := aam.Parse("host = localhost\nport = 8080")
defer doc.Free()
fmt.Println(doc.FindObj("host"))
}
```
### Documentation
- See [Go README](go/README.md)
---
## C/C++
### Quick Start
```c
#include "aam.h"
#include <stdio.h>
int main() {
AamlHandle* handle = aam_new();
aam_parse(handle, "host = localhost\nport = 8080");
const char* host = aam_find_obj(handle, "host");
printf("Host: %s\n", host);
aam_string_free(host);
aam_free(handle);
return 0;
}
```
### Documentation
- See [C README](examples/c/)
---
## Rust
### Quick Start
```toml
[dependencies]
aam-rs = "1.4"
```
```rust
use aam_rs::AAML;
fn main() {
let aaml = AAML::parse("host = localhost\nport = 8080").unwrap();
println!("host: {}", aaml.find_obj("host").unwrap());
}
```
### Documentation
- [API Docs](https://docs.rs/aam-rs/)
- [Repository Examples](examples/)
---
## Platform Support Matrix
| Rust | ✓ | ✓ | ✓ | ✓ | Native |
| C/C++ | ✓ | ✓ | ✓ | - | FFI |
| Python | ✓ | ✓ | ✓ | ✓ | PyO3 |
| Node.js | ✓ | ✓ | ✓ | ✓ | NAPI |
| Java | ✓ | ✓ | ✓ | - | JNI |
| Go | ✓ | ✓ | ✓ | ✓ | cgo |
| C# | ✓ | ✓ | ✓ | ✓ | P/Invoke |
---
## Building from Source
### Prerequisites
- Rust 1.56+ (or latest stable)
- [Language-specific requirements listed below]
### Build All Bindings
```bash
# Rust
cargo build --release
# Python wheels
pip install maturin
maturin build --release
# Node.js
cd js && npm install && npm run build
# Java
cd java && ./gradlew build
# Go
go build ./go
# C/C++
cargo build --release --features ffi
cbindgen --config cbindgen.toml --output include/aam.h
# C# (NEW!)
cargo build --release --features ffi,csharp
cd csharp && dotnet build
```
### Local Testing
```bash
# Rust tests
cargo test --all-features
# Python tests
cd python && python -m pytest
# Node.js tests
cd js && npm test
# Java tests
cd java && ./gradlew test
# Go tests
cd go && go test ./...
# C# tests
cd csharp && dotnet test
```
---
## Contributing
Each language binding has its own contribution guidelines:
- [C# CONTRIBUTING](csharp/CONTRIBUTING.md) - NEW!
- [Python CONTRIBUTING](python/)
- [Node.js CONTRIBUTING](js/README.md)
- [Java CONTRIBUTING](java/)
- [Go CONTRIBUTING](go/README.md)
---
## CI/CD Status
All bindings are automatically:
- ✅ Built on every commit
- ✅ Tested in CI pipeline
- ✅ Published to package managers on release
### Release Process
1. Commit to `main` → All tests run
2. Create release with `release-please` → Artifacts built
3. Publish to:
- 🦀 crates.io (Rust)
- 📦 npm (Node.js)
- 🐍 PyPI (Python)
- ☕ Maven Central (Java)
- 💠 NuGet (C#)
- 🔗 GitHub Release (C, Go, Java, C#)
---
## Performance
Benchmark results (operations/second):
- Rust: ~1,000,000 (baseline)
- C#: ~950,000 (P/Invoke overhead)
- Python: ~100,000 (Python overhead)
- Node.js: ~200,000 (NAPI overhead)
- Java: ~150,000 (JNI overhead)
- Go: ~800,000 (cgo overhead)
- C: ~1,000,000 (FFI only)
*Note: Benchmarks are approximate and vary by operation and platform*
---
## License
All bindings are licensed under either:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
---
## Getting Help
- 📚 [Documentation](https://aam-rs.readthedocs.io/)
- 🐛 [Issue Tracker](https://github.com/INiNiDS/aam-rs/issues)
- 💬 [Discussions](https://github.com/INiNiDS/aam-rs/discussions)
- 🤝 [Contributing](CONTRIBUTING.md)
---
## Changelog
For recent changes and updates, see:
- [CHANGELOG.md](CHANGELOG.md)
Latest additions:
- **v1.4.0+**: C# bindings with csbindgen auto-generation