Changes in version 1.0.0 (2026-06-11) Bug Fixes - puny_decode() (and the URL/domain decoders) now bound label length in both strict and non-strict mode. A crafted oversized xn-- label previously drove the fallback decoder into quadratic time with unbounded allocation; oversized labels are now rejected promptly (error in strict mode, NA in non-strict). New Features - Strict decoding now enforces RFC 5891 canonical A-label form: a decoded label must re-encode to itself. Non-canonical encodings (e.g. uppercase payloads) are rejected in strict mode while non-strict decoding stays lenient. New Features - Initial release of punycoder package - Core punycode encoding and decoding functions (puny_encode(), puny_decode()) - URL-aware processing functions (url_encode(), url_decode(), parse_url()) - Domain validation and utility functions (is_punycode(), is_idn(), validate_domain()) - Comprehensive test suite with RFC 3492 compliance testing - High-performance C++ backend with Rcpp - Vectorized operations for bulk processing - Robust error handling and validation - Complete documentation with vignettes Package Structure - CRAN-compliant package structure - MIT license - Comprehensive test coverage - Performance optimizations - Cross-platform compatibility (Windows, macOS, Linux) Technical Implementation - C++ backend using Rcpp for performance - Placeholder implementation ready for libidn2 integration - RFC 3492 compliance framework - Extensive input validation - Memory-efficient vectorized operations Documentation - Complete function documentation with examples - Introductory vignette - README with quick start guide - Test vectors from RFC 3492 specification Future Roadmap - Integration with GNU libidn2 for production punycode implementation - Performance optimizations - Additional URL manipulation utilities - Integration examples with popular R packages