Roadmap
February 4, 2026 · View on GitHub
Updated: 2026-02-05 | Format: Now / Next / Later
Vision
The fastest Unicode width calculation library in the Go ecosystem — correct emoji handling, zero allocations, full Unicode compliance. A drop-in replacement for go-runewidth.
Now (v0.2.0 — Current Release)
- 4-tier O(1) lookup: ASCII → CJK → Emoji → 3-stage table (3.8KB)
- SWAR optimization: ASCII detection and width counting at 8 bytes/iter
- ZWJ emoji sequences: 👨👩👧👦 = width 2 (forward-scan state machine)
- Emoji modifiers: Skin tones 👍🏽 = width 2
- Variation selectors: U+FE0E (text) / U+FE0F (emoji)
- Regional indicator pairs: Flag emoji 🇺🇸 = width 2
- Unicode 16.0 compliance
- 96.4% test coverage, zero lint issues
Next (v0.3.0)
- Profile-Guided Optimization (PGO) — expected 10-20% speedup on hot paths
- Benchmark CI — automated regression detection on every PR
- Unicode 17.0 preparation — generator pipeline ready for next release
- Keycap sequences —
#️⃣,*️⃣,0️⃣-9️⃣ - Migration guide — step-by-step from go-runewidth
- API review — gather feedback from early adopters
Later (v1.0.0+)
API Freeze
- Stable API guarantee (no breaking changes until v2.0)
- Semantic versioning commitment
- Validated by multiple production projects
Explicit SIMD
- Go assembly (Plan 9
.sfiles) — SSE2/AVX2/NEON, 16-32 bytes/iter -
archsimd(Go 1.26+) — portable SIMD intrinsics (golang/go#67520) - AVX-512 — server-side bulk processing, 64 bytes/iter
- ARM NEON — Apple Silicon / AWS Graviton
Grapheme Clusters (Conditional)
- Full UAX #29 support (opt-in, not default)
- Reactivation: when users report incorrect widths for specific scripts
Ecosystem
- Phoenix TUI integration
- unigrapheme — companion grapheme segmentation library
Non-Goals
- Automatic locale detection (use Options API)
- Font-specific width variations
- Backward compatibility below Go 1.25
- Full ICU replacement
Contributing
We welcome contributions in these areas:
- Bug reports — width calculation issues, emoji mismatches
- Performance testing — benchmarks on different hardware
- Real-world usage — integrate in your app, report API friction
- Unicode edge cases — sequences we handle incorrectly
See GitHub Issues for current work items.