arabic_text_justification
Arabic kashida justification for Flutter using HarfBuzz shaping and FreeType outlines — native FFI on mobile, WebAssembly on web.
What this package is like to depend on
Last release 2 months ago
12 Jun 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 8 of 8 stable releases
Nothing withdrawn
no release was ever pulled
4 months old
8 releases · first in 2026
8 releases in the last 12 months
see the full history below
Release timeline
8 releases · Apr 2026 to Jun 2026Releases
latest 8-
0.5.112 Jun 2026 -
0.5.012 Jun 2026Release notes
Open source →- Add web (WASM) support: the HarfBuzz/FreeType shaper compiles to WebAssembly via Emscripten (
scripts/build_web.sh). - Add a
fontparameter (JustificationFont) toJustifiedArabicLine,JustifiedArabicBitmapLine, andJustifiedArabicBlockto select the bundled font; exportJustificationFont(madinah,digitalKhatt). - Add
preserveLineHeighttoJustifiedArabicBlock: lock each row to the layout grid so changingfontSizeno longer moves the lines (glyphs centered in a fixed slot). - Add
staticMarker/markerFontSizetoJustifiedArabicBlock: render markers (e.g. ayah marks) at a fixed size while the body text resizes; falls back to the block's auto-fit size.
- Add web (WASM) support: the HarfBuzz/FreeType shaper compiles to WebAssembly via Emscripten (
-
0.4.023 Apr 2026Release notes
Open source →- Add
JustifiedArabicBlockfor multi-line rendering with a shared font size - Align line and block sizing so both widgets pick the same fontSize for the same slot
- Add
-
0.3.018 Apr 2026Release notes
Open source →- Add
colorSpansfor per-character color tinting inside words - Add
heightparameter to auto-fit the line to a given height
Release notes
Open source →- Add
colorSpansfor per-character color tinting inside words - Add
heightparameter to auto-fit the line to a given height
- Add
-
0.2.017 Apr 2026Release notes
Open source →- Add
JustifiedArabicLineandJustifiedArabicBitmapLinewidgets - Add word / marker tap callbacks with
verseMarkersupport - Add
highlightedWordIndicesfor tap-selection highlights - Add
WordProgressfor read-along animation (passed + active words, background + glyph tint) - Add
WordProgressStyle.sweepand.wholefor active-word animation - Add
hiddenWordIndicesfor progressive-reveal - Fix non-justified line width to natural text extents
- Narrow public API to the widgets; remove low-level
renderLine/getOutlineexport
Release notes
Open source →- Add
JustifiedArabicLineandJustifiedArabicBitmapLinewidgets - Add word / marker tap callbacks with
markersupport - Add
highlightedWordIndicesfor tap-selection highlights - Add
WordProgressfor read-along animation (passed + active words, background + glyph tint) - Add
WordProgressStyle.sweepand.wholefor active-word animation - Add
hiddenWordIndicesfor progressive-reveal - Fix non-justified line width to natural text extents
- Narrow public API to the widgets; remove low-level
renderLine/getOutlineexport
- Add
-
0.1.014 Apr 2026Release notes
Open source →- Add
JustificationFontenum exposing the bundleddigitalKhattfont with aload()helper that copies the asset to the application support directory and returns its path - Ship prebuilt native binaries for Android and iOS; drop HarfBuzz/FreeType git submodules so consumers no longer need to build them from source
- Implement kashida justification via the font's
LTAT/RTATvariable-font axes instead of glyph-level tatweel insertion - Tighten kashida solver: bracket the full axis range and return the upper bracket so justified lines reach the target width instead of undershooting
- Use available line width when sizing justified bitmaps and outlines so equal-width lines are no longer clipped
Release notes
Open source →- Add
JustificationFontenum exposing the bundleddigitalKhattfont with aload()helper that copies the asset to the application support directory and returns its path - Ship prebuilt native binaries for Android and iOS; drop HarfBuzz/FreeType git submodules so consumers no longer need to build them from source
- Implement kashida justification via the font's
LTAT/RTATvariable-font axes instead of glyph-level tatweel insertion - Tighten kashida solver: bracket the full axis range and return the upper bracket so justified lines reach the target width instead of undershooting
- Use available line width when sizing justified bitmaps and outlines so equal-width lines are no longer clipped
- Add
-
0.0.205 Apr 2026Release notes
Open source →- Add vector outline rendering via
getOutlineusingFT_Outline_Decompose - Add kashida justification toggle (
justifyparameter) forrenderLineandgetOutline - Add per-glyph word index for word-by-word animation
- Add
ArabicOutlinePainterfor Canvas-based rendering - Restructure lib into
src/(native_structs, models, painter, api)
Release notes
Open source →- Add vector outline rendering via
getOutlineusingFT_Outline_Decompose - Add kashida justification toggle (
justifyparameter) forrenderLineandgetOutline - Add per-glyph word index for word-by-word animation
- Add
ArabicOutlinePainterfor Canvas-based rendering - Restructure lib into
src/(native_structs, models, painter, api)
- Add vector outline rendering via
-
0.0.105 Apr 2026Release notes
Open source →- Initial project setup with Flutter FFI plugin scaffold
- Integrate HarfBuzz for Arabic text shaping (RTL, script-aware)
- Integrate FreeType for glyph rasterization
- Add
shapeLineandrenderLineAPIs via dart:ffi - Android and iOS platform support
Release notes
Open source →- Initial project setup with Flutter FFI plugin scaffold
- Integrate HarfBuzz for Arabic text shaping (RTL, script-aware)
- Integrate FreeType for glyph rasterization
- Add
shapeLineandrenderLineAPIs via dart:ffi - Android and iOS platform support