Bunsenite is a Nickel configuration file parser designed to provide type-safe and memory-safe bindings across multiple programming languages. It leverages Rust's robust ecosystem to offer a core library with a stable C ABI layer, enabling seamless integration with Deno (JavaScript/TypeScript), ReScript, and WebAssembly environments.
Key Features:
Type Safety: Compile-time guarantees ensure data integrity and prevent runtime errors.
Memory Safety: Built on Rust’s ownership model, Bunsenite eliminates unsafe memory operations.
Offline-First Operation: Functions without network dependencies for air-gapped environments.
Multi-Language Support: Bindings for Deno, ReScript, and WebAssembly enable cross-platform use.
Standards Compliance: Meets RSR Bronze tier requirements for type safety, memory safety, and documentation.
Audience & Benefit:
Ideal for developers working on projects requiring Nickel configuration parsing across multiple languages. Bunsenite provides type-safe, memory-safe bindings that enhance application reliability while maintaining performance and compatibility with modern development workflows. It can be installed via winget for easy setup in your environment.
Bunsenite is a Nickel configuration file parser with a Rust core
library and multi-language FFI bindings. It provides a stable C ABI
layer (via Zig) that enables bindings for Deno
(JavaScript/TypeScript), Rescript, and WebAssembly for browser
and universal use.
Key Features
✅ Type Safety: Compile-time guarantees via Rust’s type system
✅ Memory Safety: Rust ownership model, zero unsafe blocks
✅ Offline-First: Works completely air-gapped, no network
dependencies
✅ Multi-Language: FFI bindings for Deno, Rescript, and WASM
= From crates.io
cargo install bunsenite
= From source
git clone https://github.com/hyperpolymath/bunsenite.git
cd bunsenite
cargo install --path .
Usage
Rust Library
use bunsenite::NickelLoader;
fn main() {
let config = r#"
{
name = "my-app",
version = "1.0.0",
port = 8080,
}
"#;
let loader = NickelLoader::new();
let result = loader.parse_string(config, "config.ncl").unwrap();
println!("Config: {}", result);
}
CLI
= Parse and evaluate a config file
bunsenite parse config.ncl
= Pretty-print output
bunsenite parse config.ncl --pretty
= Validate without evaluating
bunsenite validate config.ncl
= Show version and compliance info
bunsenite info
WebAssembly (Browser)
import init, { parse_nickel } from './bunsenite.js';
async function main() {
await init();
const config = `{ name = "example", version = "1.0.0" }`;
const result = parse_nickel(config, "config.ncl");
console.log(JSON.parse(result));
}
Deno (TypeScript)
// See bindings/deno/ for full example
import { parseNickel } from "./bunsenite_deno.ts";
const config = `{ foo = 42 }`;
const result = parseNickel(config, "config.ncl");
console.log(result);
Zig FFI Layer: Provides stable C ABI, isolating consumers from Rust
ABI changes. This allows language bindings to remain stable across Rust
compiler versions.
WASM Support: Enables browser deployment and universal compatibility
at ~95% native speed.
Deno .ts Files: Required syntax for Deno runtime FFI (NOT plain
TypeScript). Uses Deno.dlopen for native FFI calls to Zig layer.
Documentation
[CLAUDE.md](./CLAUDE.md): Comprehensive guide for AI assistants
and developers
[SECURITY.md](./SECURITY.md): Security policies and
vulnerability reporting
= Build all targets
just all
= Build Rust library and CLI
cargo build --release
= Build WebAssembly
just wasm
= Run tests
cargo test
= Run linter
cargo clippy
= Format code
cargo fmt
= Check RSR compliance
just rsr-check
See Justfile for all available commands.
Testing
= Run all tests
cargo test
= Run tests with output
cargo test -- --nocapture
= Run specific test
cargo test test_name
= Run with coverage (requires tarpaulin)
cargo tarpaulin --out Html
Current status: 100% test pass rate (30+ tests covering core
functionality, error handling, and edge cases)
Performance
Native Rust: Baseline performance
WebAssembly: ~95% native speed
FFI (Deno/Rescript): ~90% native speed (C ABI overhead minimal)
Security
We take security seriously. See [SECURITY.md](./SECURITY.md) for:
Supported versions
Vulnerability reporting process
Security best practices
Responsible disclosure policy
Security contact: See .well-known/security.txt or
[SECURITY.md](./SECURITY.md)
License
Dual licensed under your choice of:
MPL-2.0 License v1.0 (MPL-2.0) ([LICENSE-MPL-2.0](./LICENSE) or
)
MPL-2.0 v0.8 ([LICENSE-PALIMPSEST](./LICENSE) or
)
This allows maximum flexibility for use while preserving reversibility
and emotional safety principles.
Contributing
Contributions are welcome! This is a TPCF Perimeter 3 (Community
Sandbox) project.
See [CONTRIBUTING.md](./CONTRIBUTING.md) for:
Code of Conduct
Development workflow
Testing requirements
Commit message conventions
Pull request process
Community
Issues: [GitHub
Issues]()
Discussions: [GitHub
Discussions]()
Security: See [SECURITY.md](./SECURITY.md)
Acknowledgments
[Nickel Language Team]() for the
excellent configuration language
RSR Framework contributors
TPCF community
All contributors to this project
Roadmap
See [NEXT_STEPS.md](./NEXT_STEPS.md) for planned features and
enhancements:
Additional language bindings (Python, Ruby, Node.js)
Performance benchmarking suite
REPL/interactive mode
Schema validation
Watch mode for auto-reload
Plugin system
Version History
See [CHANGELOG.md](./CHANGELOG.md) for detailed version history.
Current version: 0.1.0 (Bronze tier compliant, production-ready)
Made with ❤️ by the Campaign for Cooler Coding and Programming
Politically autonomous software for emotionally safe development
Architecture
See TOPOLOGY for a visual
architecture map and completion dashboard.