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 ;
// Convert Unicode domain to ASCII
let ascii_domain = to_ascii.unwrap;
assert_eq!;
// Convert ASCII back to Unicode
let unicode_domain = to_unicode.unwrap;
assert_eq!;
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
# Run tests
# Run clippy
# Format code
Project Structure
src/domain.rs- Main IDNA conversion functionssrc/punycode.rs- Punycode encoding/decodingsrc/mapping.rs- Character mapping and case foldingsrc/normalization.rs- Unicode NFC normalizationsrc/validation.rs- Character and domain validationsrc/unicode.rs- UTF-8 ↔ UTF-32 conversion utilitiessrc/unicode_tables.rs- Unicode lookup tablestests/- 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
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Related Projects
- ada-url/ada - Fast spec-compliant URL parser (C++)
- ada-url/rust - Rust bindings for Ada URL parser
- ada-url/idna - Original IDNA implementation (C++)