runefix-core 0.1.0

Unicode character display width engine supporting CJK, emoji, and grapheme clusters
Documentation

runefix-core

๐ŸŽฏ A Rust core library that fixes terminal and Markdown misalignment caused by CJK and emoji widths.

Crates.io Docs.rs Rust Version License: MIT OR Apache-2.0 CI

English | ็ฎ€ไฝ“ไธญๆ–‡ | ๆ—ฅๆœฌ่ชž


โœจ Overview

runefix-core is a Unicode-based display width engine that provides precise character width calculation, designed for:

  • Terminal CLI alignment
  • Markdown table rendering
  • TUI layout engines
  • Rich text editor rendering

Its goal is to solve a decades-long problem: misaligned characters in terminal and UI environments due to inconsistent Unicode width handling. This includes:

  • CJK characters (Chinese, Japanese, Korean), Kana, and Hangul syllables
  • Emoji (base, composite, and flag sequences)
  • Fullwidth punctuation and multilingual symbols
  • Grapheme cluster boundary cases

โœ… Key Features

  • โœ… Accurate width detection for emoji, CJK, Hangul, Kana, and fullwidth symbols
  • โœ… Full support for grapheme clusters (emoji composition, regional indicators)
  • โœ… Zero dependencies, minimal API, compatible with any terminal or UI renderer
  • โœ… Fully reproducible datasets, powered by char-table
  • โœ… Language bindings planned for JS / Python / Go and more

๐Ÿš€ Quick Example

use runefix_core::RuneDisplayWidth;

fn main() {
    println!("{}", "ไฝ ".rune_width());           // Output: 2
    println!("{}", "๐Ÿ˜‚".rune_width());           // Output: 2
    println!("{}", "ไฝ a1๐Ÿ‘‡".rune_width_total()); // Output: 6
}

๐Ÿ“ท Real-World Examples

For a full demo of grapheme-aware alignment and terminal behavior, see examples/text_align.rs.

It showcases:

  • Naive centering using .chars().count() โŒ
  • Fixed centering using runefix_core::RuneDisplayWidth โœ…
  • Screenshot comparisons across terminals

๐Ÿ‘‰ Read more in examples/README.md

๐Ÿ“ฆ Installation

Add the following to your Cargo.toml:

# Stable release (recommended)
runefix-core = "0.1"

See crates.io for the latest version.

๐Ÿ“š Use Cases

  • ๐Ÿ–ฅ๏ธ Terminal alignment (CLI box drawing, tables)
  • ๐Ÿงพ Markdown renderers (accurate width handling in table cells)
  • ๐Ÿ“Š TUI layout engines (React-style terminal UIs)
  • ๐Ÿ“„ Editors and terminal emulators (accurate text wrapping)
  • ๐Ÿงฉ Width testing tools, playgrounds, and visualization platforms

๐Ÿ“ Dataset Sources

This crate relies on structured, versioned datasets from char-table, including:

  • emoji_base.json, emoji_zwj.json
  • cjk_unified.json, japanese_kana.json, korean_syllables.json
  • fullwidth_variants.json, fullwidth_punctuations.json

All datasets are reproducible, regularly updated, and aligned with the latest Unicode releases.

๐Ÿ› ๏ธ Project Status

Module Status
CJK width detection โœ… Completed
Emoji width support โœ… Completed
Grapheme cluster โœ… Completed

๐Ÿ“Œ CHANGELOG

See CHANGELOG.md for version history.

๐Ÿ”– License

MIT OR Apache-2.0
ยฉ 2025 Pokeya Z. Chen / Runefix Labs

๐Ÿ“ฃ Project Affiliation

This project is maintained by the runefix-labs organization. It serves as the core engine for the runefix suite โ€” a multi-language, cross-platform solution for Unicode width handling.

๐ŸŒ Contact

GitHub: github.com/runefix-labs
Author: pokeyaro
Email: pokeya.mystic@gmail.com