Circlify a String
Arrange any text into a circular shape with real-time preview. Customize radius, spacing, direction. Export as SVG or PNG.
About
Placing text along a circular path requires precise angular distribution. Each character at index i is rotated by θi = θ0 + i ⋅ δ, where δ is the angular step derived from letter spacing and radius. Get the spacing wrong and characters overlap or scatter with uneven gaps. This tool computes the geometry in real time and produces production-ready SVG using <textPath> elements or rasterized PNG via Canvas. It assumes a monospaced angular step. Variable-width fonts will show slight visual unevenness at small radii.
Formulas
Each character is placed at angle θi measured from the top of the circle:
The Cartesian position of each character center on the canvas:
Where θ0 = start angle, d = direction multiplier (1 for CW, −1 for CCW), φ = total arc coverage in degrees, n = character count, r = radius, and (cx, cy) = canvas center. The −90° offset places index 0 at the top (12 o'clock position). Each character is then individually rotated by θi so its baseline is tangent to the circle.
Reference Data
| Parameter | Symbol | Range | Default | Effect |
|---|---|---|---|---|
| Radius | r | 40 - 300 px | 120 | Circle size; smaller radius = tighter curve |
| Font Size | f | 8 - 72 px | 20 | Character height; must be proportional to r |
| Letter Spacing | δ | 0.3 - 3.0 °/ch | 1.0 | Angular gap multiplier between characters |
| Start Angle | θ0 | 0 - 360 ° | 0 | Rotation offset for the first character |
| Direction | - | CW / CCW | CW | Clockwise or counter-clockwise text flow |
| Arc Coverage | φ | 30 - 360 ° | 360 | Total arc span the text occupies |
| Text Color | - | Any hex | #2D2548 | Fill color of each character |
| Background | - | Transparent / Color | Transparent | PNG background fill |
| Font Family | - | System fonts | sans-serif | Typeface applied to each glyph |
| Repeat Text | - | On / Off | Off | Tile the string to fill the entire arc |
| Canvas Size | - | 200 - 800 px | 400 | Output image dimensions (square) |
| Kerning Compensation | - | 0 - 5 px | 0 | Extra angular offset per character width |