ada-idna 0.1.0

Fast IDNA (Internationalized Domain Names in Applications) implementation in Rust
Documentation
  • Coverage
  • 0%
    0 out of 51 items documented0 out of 20 items with examples
  • Size
  • Source code size: 247.96 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.66 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 10s Average build duration of successful builds.
  • all releases: 10s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • ada-url/idna-rust
    5 2 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • anonrig

IDNA for Rust

⚠️ This library is incomplete and under development ⚠️

This is a Rust implementation of the IDNA (Internationalized Domain Names in Applications) specification, based on the C++ implementation from ada-url/ada.

Fast and compliant IDNA conversion library for Rust with zero dependencies.

About

This library provides IDNA processing capabilities for converting between Unicode domain names and ASCII-compatible encoding (ACE) using Punycode. It implements the IDNA specification for internationalized domain name handling.

This is a Rust port of the IDNA functionality from github.com/ada-url/idna.

Usage

use ada_idna::domain::{to_ascii, to_unicode};

// Convert Unicode domain to ASCII
let ascii_domain = to_ascii("café.example").unwrap();
assert_eq!(ascii_domain, "xn--caf-dma.example");

// Convert ASCII back to Unicode
let unicode_domain = to_unicode("xn--caf-dma.example").unwrap();
assert_eq!(unicode_domain, "café.example");

Features

  • Zero dependencies: No external crates required
  • Complete IDNA support: Full to_ascii and to_unicode conversion
  • RFC 3492 Punycode: Compliant Punycode encoding/decoding
  • Unicode normalization: NFC normalization with composition tables
  • Character mapping: Case folding, soft hyphen removal, format character handling
  • Validation: Domain label and character validation
  • High performance: Optimized UTF-8 ↔ UTF-32 transcoding

Current Status

🚧 This implementation is incomplete and not ready for production use.

Known limitations:

  • Some test cases fail due to expected value discrepancies
  • Unicode table data may be incomplete
  • Error handling needs refinement
  • API is subject to change

Development

Building and Testing

# Build the library
cargo build

# Run tests
cargo test

# Run clippy
cargo clippy

# Format code
cargo fmt

Project Structure

  • src/domain.rs - Main IDNA conversion functions
  • src/punycode.rs - Punycode encoding/decoding
  • src/mapping.rs - Character mapping and case folding
  • src/normalization.rs - Unicode NFC normalization
  • src/validation.rs - Character and domain validation
  • src/unicode.rs - UTF-8 ↔ UTF-32 conversion utilities
  • src/unicode_tables.rs - Unicode lookup tables
  • tests/ - Comprehensive test suite

Contributing

This project is part of the Ada URL family of libraries. Contributions are welcome!

License

This project is licensed under either of

at your option.

Related Projects