| Crates.io | nil-zonefile |
| lib.rs | nil-zonefile |
| version | 0.3.0 |
| created_at | 2025-01-30 15:06:48.829371+00 |
| updated_at | 2025-02-18 06:44:47.554739+00 |
| description | A library for parsing and creating zonefiles on the new internet. |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1536467 |
| size | 227,084 |
A Rust library for parsing and creating NIL zonefiles. This library supports both WebAssembly and native Rust environments.
Add this to your Cargo.toml:
[dependencies]
nil-zonefile = "0.1.0"
For WebAssembly support, enable the wasm feature:
[dependencies]
nil-zonefile = { version = "0.1.0", features = ["wasm"] }
use nil_zonefile::ZoneFile;
fn main() -> Result<(), serde_json::Error> {
// Parse a zonefile
let json_str = r#"{
"zonefile": {
"owner": "SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8",
"general": "Example Name",
"twitter": "@example",
"url": "example.locker",
"nostr": "",
"lightning": "",
"btc": "bc1..."
}
}"#;
let zonefile = ZoneFile::from_str(json_str)?;
// Convert back to JSON
let output = zonefile.to_string()?;
Ok(())
}
=
import { ZoneFile } from 'nil-zonefile';
const zonefile = ZoneFile.fromString(jsonString);
const output = zonefile.toString();
use nil_zonefile::ZoneFile;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Read from CBOR
let cbor_bytes: &[u8] = &[0u8; 0]; // example empty CBOR data
let zonefile = ZoneFile::from_cbor(cbor_bytes)?;
// Write to CBOR
let output_bytes: Vec<u8> = zonefile.to_cbor()?;
Ok(())
}
import { parse_zonefile_cbor, create_zonefile_cbor } from 'nil-zonefile';
// Read from CBOR
const cborBytes = new Uint8Array(/* your CBOR data */);
const result = parse_zonefile_cbor(cborBytes);
// Write to CBOR
const output = create_zonefile_cbor(cborBytes);
import { generateZonefile } from 'nil-zonefile';
const zonefile = {
zonefile: {
owner: "SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8",
general: "Example Name",
twitter: "@example",
url: "example.locker",
nostr: "",
lightning: "",
btc: "bc1...",
subdomains: {}
},
version: "1.0.0",
status: "current"
};
// Generate uncompressed CBOR
const bytes = generateZonefile(zonefile);
// Generate compressed CBOR using zstd compression
const compressedBytes = generateZonefile(zonefile, true);
When building this project on macOS (especially for WebAssembly), you need LLVM installed and configured correctly. Two options are available:
Run the provided setup script:
source ./setup-llvm.sh
This script will:
Install LLVM if you haven't already:
brew install llvm
Set up the required environment variables:
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
export CC=/opt/homebrew/opt/llvm/bin/clang
export AR=/opt/homebrew/opt/llvm/bin/llvm-ar
To make these changes permanent, add the above lines to your ~/.zshrc or ~/.bash_profile.
MIT License - Copyright (c) 2025 New Internet Labs Limited