text_on_path
Text along any curve in Flutter, with cursive scripts kept joined. Arabic, Persian and Urdu stay connected; Hindi and Bengali keep their headline.
Try it in your browser ยท Get started
Why text_on_path
- Joins stay closed. Other packages turn each letter to the curve, so cursive joins break open. text_on_path bends only where letters join.
- Letters keep their shape. Warping the whole line stretches every letter; text_on_path distorts them a fifth to two thirds as much.
- Every script Flutter shapes. Arabic, Persian, Urdu Nastaliq, Hindi, Bengali and Latin script hands.
- Seals that fit. Fill a ring with kashida, tracking or word spacing, never by opening joins.
- Selectable. Drag, double-click and copy inside a
SelectionArea, right to left too. - Sharp and exportable. It stays crisp at any zoom, and exports to SVG and PDF.
Demos
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Learn more
- Getting started: install, options, selection, and SVG and PDF.
- How it works: the method, the measurements and the limits.
- Measurements and sharpness, in full.
License
Apache 2.0. The example's fonts are under the SIL Open Font License 1.1.
Libraries
- text_on_path
- Text laid along a curve with cursive joins kept closed: Arabic letters stay connected along the baseline, and Devanagari and Bengali keep an unbroken headline.





