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.

Hindi and Urdu on a circle that bends: each letter turned rigidly opens the joins; text_on_path keeps them closed

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

Selecting Arabic and Hindi on a curve A seal filling as its joins are drawn out
Text following a curve drawn by hand Six seals, fitted by kashida, tracking or word spacing
Urdu on an arc and an S-curve Bengali on an arc and an S-curve

Learn more

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.