punycoder
Punycoder is a well tested Dart implementation of the RFC 3492 Punycode specification
0.3.0
45K downloads/mo
#1537 most downloaded on pub.dev
dropbear-software/punycoder
What this package is like to depend on
Last release 5 months ago
26 Feb 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 5 of 5 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
5 releases · first in 2025
1 release in the last 12 months
see the full history below
Release timeline
5 releases · May 2025 to Feb 2026Releases
latest 5-
0.3.026 Feb 2026Release notes
Open source →0.3.0
This release is a complete, ground-up rewrite of the package. It provides a fully compliant, strictly validated, and idiomatic Dart implementation of the Punycode standard.
🚨 Breaking Changes
- Separation of IDNA and Raw Punycode: The default
PunycodeCodecno longer attempts to automatically parse and encode/decode full domains or email addresses. It now acts purely on raw strings. - Removed
PunycodeCodec.simple(): Because the default codec now handles raw strings exclusively, the.simple()constructor has been removed. A new globalpunycodeinstance is provided for convenience. - Extracted Domain & Email Handling: Domain and email conversions are now handled by dedicated top-level functions (
domainToAscii,domainToUnicode,emailToAscii, andemailToUnicode). - Strict (but Configurable) IDNA Validation: IDNA processing now strictly enforces formatting rules by default. Inputs with labels exceeding 63 characters, domains exceeding 253 characters, or invalid hyphen placements will actively throw a
FormatException. You can bypass this by passingvalidate: false.
✨ New Features & Improvements
- Full RFC 3492 Compliance: Rigorous implementation of the complete Punycode specification.
- Mixed-Case Support (RFC 3429 Appendix A): Added support for Appendix A mixed-case annotations, properly preserving casing during encoding and decoding.
- Official Errata Fixes: Implemented technical corrections for RFC 3492 Errata IDs 265 and 3026.
- IDNA2003 Separator Support:
domainToAsciinow recognizes and properly splits labels using standard IDNA2003 separators (.,\u3002,\uFF0E,\uFF61). - Platform Parity: Added a comprehensive suite of unit and integration tests to guarantee identical behavior across both Dart VM and Web platforms.
Release notes
Open source →This release is a complete, ground-up rewrite of the package. It provides a fully compliant, strictly validated, and idiomatic Dart implementation of the Punycode standard.
🚨 Breaking Changes
- Separation of IDNA and Raw Punycode: The default
PunycodeCodecno longer attempts to automatically parse and encode/decode full domains or email addresses. It now acts purely on raw strings. - Removed
PunycodeCodec.simple(): Because the default codec now handles raw strings exclusively, the.simple()constructor has been removed. A new globalpunycodeinstance is provided for convenience. - Extracted Domain & Email Handling: Domain and email conversions are now handled by dedicated top-level functions (
domainToAscii,domainToUnicode,emailToAscii, andemailToUnicode). - Strict (but Configurable) IDNA Validation: IDNA processing now strictly enforces formatting rules by default. Inputs with labels exceeding 63 characters, domains exceeding 253 characters, or invalid hyphen placements will actively throw a
FormatException. You can bypass this by passingvalidate: false.
✨ New Features & Improvements
- Full RFC 3492 Compliance: Rigorous implementation of the complete Punycode specification.
- Mixed-Case Support (RFC 3429 Appendix A): Added support for Appendix A mixed-case annotations, properly preserving casing during encoding and decoding.
- Official Errata Fixes: Implemented technical corrections for RFC 3492 Errata IDs 265 and 3026.
- IDNA2003 Separator Support:
domainToAsciinow recognizes and properly splits labels using standard IDNA2003 separators (.,\u3002,\uFF0E,\uFF61). - Platform Parity: Added a comprehensive suite of unit and integration tests to guarantee identical behavior across both Dart VM and Web platforms.
- Separation of IDNA and Raw Punycode: The default
-
0.2.202 May 2025 -
0.2.102 May 2025Release notes
Open source →What's Changed
- Refactor to strictly use codec pattern from dart:convert by @mark-dropbear in #10
Full Changelog: v0.1.0...v0.2.1
-
0.2.002 May 2025Release notes
Open source →- Refactor the package to strictly follow the
Converter<S, T>interface established indart:convertand clean up the API as a result.
- Refactor the package to strictly follow the
-
0.1.002 May 2025Release notes
Open source →What's Changed
- Setup environment for Firebase Studio by @mark-dropbear in #2
- Add initial punycode implementation by @mark-dropbear in #4
- Add Punycode test suite by @mark-dropbear in #6
- Add package documentation by @mark-dropbear in #8
New Contributors
- @mark-dropbear made their first contribution in #2
Full Changelog: https://github.com/dropbear-software/punycoder/commits/v0.1.0