Site navigation

Typography

Professional text tools with a dependable answer to a common import problem: when a design uses a font you do not have, Varve helps you replace it without turning the design into a screenshot.

What It Is

Varve's typography system provides multi-line layout, text decoration, overflow handling, list styles, letter spacing, vertical alignment, and text case transforms. It supports font-defined OpenType features, variable font axes, point and area text, text placed along arbitrary paths, bounded non-destructive deformation, and a logical Unicode source model designed to keep shaping, editing, and export aligned.

Vertical writing is a real text-flow setting, not a rotated layer. Choose vertical-rl or vertical-lr for column progression, then choose Mixed, Upright, or Sideways character orientation. The logical text, rich runs, transform, and text-frame geometry stay intact while the content reflows on the vertical inline axis.

For native Figma .fig, REST, or plugin-export JSON imports, Varve also treats fonts as document dependencies. It detects missing families in ordinary text, rich-text runs, and reusable text styles; checks the shipped Fontsource catalog for the requested face; ranks installed candidates; and keeps the original family reference in the saved document manifest. You can continue editing locally without keeping Figma open.

The catalog ships with Varve, so font discovery works offline and does not require a Google Fonts key or runtime metadata request. The full browser offers an explicit local-font permission or refresh action and reports when it falls back to the compatibility list. On desktop, installing a result is an explicit action that retrieves one exact, version-pinned Fontsource artifact, stores it locally under its artifact and face identity, and only then makes it available to the document. If a font is still unavailable after reopening, the missing-font workflow helps you review a replacement. Same-name files and collection members remain distinct in storage; native GUI restart evidence is still being collected. The browser demo can browse the catalog but does not download additional font files.

In development

Keep text readable over detailed artwork

Varve is adding optional background and border styling around a text frame. These controls are separate from glyph fill and outline, so a caption can sit over a busy illustration without changing the letters themselves. The feature is not in a released build yet.

Import with confidence

Missing fonts are a reviewable decision, not silent damage

Install a matching Fontsource face when the catalog offers the requested family and style, or choose a substitute and apply it across the document in one undoable action. Varve shows the requested weight, style, and license before installation; labels compatible and fallback replacements; updates rich text without flattening it; and warns when new metrics may reflow the design.

Search by intent

Describe the type you need

The local catalog understands design language as a set of reviewable signals. Try “friendly rounded sans for UI”, “editorial serif with Vietnamese”, or “similar to Inter”. Hard requirements stay hard; softer preferences improve ranking, and each result can explain which local fact or reviewed annotation contributed.

friendly rounded sans for UIconstruction + tone + use
editorial serif with Vietnamesepreferred role + hard coverage
similar to Intersimilarity lane, not a pairing claim

Verified coverage and font-table facts are labeled separately from inferred or curated descriptors. Unknown metadata stays unknown.

Browse before you commit

Inspect the type, then make the decision

Browse fonts keeps search and inspection side by side. Select a family to review its source, license, styles, weights, script coverage, personal tags, and related families without losing your place in the catalog. Installed and bundled families can render a specimen; catalog-only families remain metadata-only until an explicit desktop install.

Font details keep technical embedding declarations separate: the base OS/2 permission, no-subsetting, and bitmap-only flags are shown independently, while unknown license provenance stays unknown. Export choices are withheld when the available evidence cannot support live embedding or subsetting.

Variable families expose only the axes declared by the selected face. Preview weight, width, optical size, or slant in the specimen, reset to the font's defaults, and apply the chosen values explicitly with Use face. The regular weight control stays coupled to wght while other authored axes and the exact face reference remain intact.

Exact name search“gothic” returns Gothic families, not unrelated catalog filler.
Live specimenReplace the sample text while inspecting an installed or bundled family.
Explainable resultsSee why semantic terms, coverage, or similarity affected a result.
Local-first controlReview metadata before an explicit, version-pinned install.

Audit the document

See which faces your text actually uses

The Fonts panel opens on Document fonts, scoped to the active page. It groups exact artifact faces and family-only requests separately, shows character counts and page locations, keeps linked story frames together, and excludes hidden or locked content from the working list. Choose Entire document for a broader audit, then select every matching text layer in one action before making a replacement decision.

Unused text styles remain visible in their own disclosure, while Browse all fonts opens the full local-first catalog without changing the document. A family-only request stays visibly unresolved until an exact face is installed or deliberately replaced.

A type specimen in Varve showing a display character, a character set, a subhead and a body paragraph
A type hierarchy set on the canvas
The Varve properties inspector showing typography controls: font family, weight, style, size, line height and letter spacing
Type controls for the selected text

Key Capabilities

  • Text rendering: Multi-line with line height, paragraph spacing, text decoration (underline, strikethrough), text overflow (clip, ellipsis)
  • Vertical writing: Editable vertical-rl and vertical-lr flows with Mixed, Upright, and Sideways orientation policies; vertical columns remain distinct from object rotation and vertical alignment
  • Inline editing: Native caret, IME, clipboard, and grapheme-safe selection input while the canvas preserves the text's authored appearance
  • Rich text: Paragraph-aware replacement and range formatting that preserves unaffected runs instead of flattening them
  • Editable appearance: Gradients, strokes, shadows, glows, and supported layer effects remain visible while text is being edited; alpha-aware effects follow glyph counters and transparent backgrounds
  • Glyph-aware strokes: Text outlines follow the rendered glyphs, counters, and antialiased edges instead of tracing the text layer's rectangular bounds
  • Predictable layer names: Content-derived labels follow automatic text layers; manual names persist until you explicitly restore automatic naming
  • OpenType features: Face-aware controls for Boolean, indexed, and (where byte-backed shaping is available) ranged values, including ligatures, alternates, swashes, stylistic sets, small caps, numerals, and fractions; required script-shaping features are protected
  • Variable fonts: Per-axis slider control with min/max/default from font metadata
  • Alternate feature browser: Search and preview the selected face's available feature choices with keyboard navigation, cancellable hover previews, and one undoable apply action; feature choices are not presented as universal Unicode glyphs
  • Artistic text: Point/area text, cluster-safe offset/rotation/scale/baseline controls, and bounded arc/bend/wave deformation remain editable until you explicitly outline
  • Text on path: Place shaped source clusters along circle, bezier, rectangle, polygon, or star paths with offset, side, flip, reversal, and detach controls; this positions text on a baseline rather than bending glyph outlines
  • Text to outlines: Convert supported monochrome text using the actual shaped glyph IDs, counters, feature values, axes, and source-range provenance; invalid or unavailable font data leaves the editable source intact
  • CJK support: Line breaking via Intl.Segmenter for Chinese, Japanese, and Korean text
  • Unicode foundations: Explicit UTF-16, code-point, grapheme, shaping-cluster, and visual-caret mappings
  • BiDi foundations: UAX #9 embedding levels, per-line visual run ordering, mirrored punctuation, and cluster-safe caret geometry in the engine
  • Paragraph layout: Script/language itemization, word-level line breaking that never splits a grapheme, and RTL-safe wrapping
  • Font system: Offline semantic catalog, local-first search, @fontsource runtime loading, CSS fallback chains, and explicit version-pinned desktop installs
  • Font discovery: Natural-language intent, coverage and feature constraints, personal tags, similarity, alternatives, pairings, and explainable result reasons
  • Missing-font replacement: Ranked local candidates, rich-text-aware Replace All, and manifest provenance across save/reopen
  • Quick text toolbar: Compact 32px controls share the editor palette's spacing and surface tokens; expand a family to choose a registered face or named variable instance without losing its exact identity; family and face hover previews stay outside history until chosen; alignment and lists live in More text formatting, with keyboard dismissal for the font picker
  • Typography inspector: A seven-row everyday spine (content, family, weight, style, size, line height, letter spacing, alignment) with named icon controls, a collapsed Advanced typography subsection for tracking, paragraph spacing, vertical alignment, direction, writing mode, case, decoration, list style, overflow, and text sizing, a badge reporting how many advanced properties the layer already uses, contextual vertical alignment and orientation rows, and face-aware OpenType features
  • Image font identification: Bounded local image analysis, optional local OCR text capture with editable review, installed-font comparison, and explicit Use for new text or Apply to target actions

Technical Depth

The FontRegistry manages font loading, CSS fallback chains, font revisions, and variable font axis discovery. The engine has a typed HarfBuzz-compatible shaping seam, a canonical derived layout snapshot, bounded cache identity, and explicit Unicode source maps. A paragraph-aware layout pipeline resolves UAX #9 base direction and embedding levels per paragraph, itemizes script and language runs, breaks lines at word boundaries without ever splitting an extended grapheme cluster, and derives line-level visual run order after wrapping — so wrapped RTL paragraphs reorder correctly. Vertical writing uses the same snapshot with a physical-height inline constraint, right-to-left or left-to-right column progression, and grapheme-cluster orientation policy. Cluster-safe caret stops, hit testing, and selection geometry come from the same snapshot. Live browser paint uses Canvas2D source-run shaping; when a local CSS face source is inspectable, whole-run feature values and custom axes are attached through a process-local FontFace descriptor alias. Exact glyph IDs are supplied by the byte-backed HarfBuzz path for outlining, and the desktop outline path prefers the native rustybuzz adapter when Tauri is available.

SVG export includes multi-line and rich text support. Typography preflight checks font availability and CSS generation.

Limitations

Current limitations:

  • Live Canvas2D and SVG text are delegated to the browser's font engine; whole-run feature values and custom axes can use a process-local FontFace descriptor when the local CSS source is inspectable, while exact glyph-ID shaping and UTF-16-ranged features require accessible font bytes and a compatible face
  • The native desktop shaper is reachable for text-to-outlines, but the live renderer remains Canvas2D and the native PDF writer does not yet consume the shared shaped glyph stream
  • Native PDF vertical text and exact vertical font-table/vertical-alternate fidelity are not yet proven end to end; HTML/CSS and SVG retain semantic writing-mode data, while unsupported targets require an explicit outline or raster fallback
  • Collection faces with a non-zero face index and COLR/CPAL colour glyphs are refused by the exact outline converter; they are not replaced with a misleading monochrome or placeholder shape
  • PDF preflight rasterizes path text, complex/non-Latin text, rich runs, ligature-sensitive strings, explicit features/axes/ranges, tracking, and manual cluster edits through the live renderer. This preserves appearance but loses PDF text searchability for those nodes
  • Direct cluster manipulation is intentionally limited around required shaping and likely active standard Latin ligatures; turn Standard ligatures off before moving inside fi, ff, ffi, ffl, or fl
  • Font substitution preserves editability and provenance, but a compatible or category fallback can change text metrics. Document Fonts can preview and restore the recorded original family for the affected exact face and text scope; wrapping, metrics, and overflow can still change

Status

Built

Core text controls, face-aware OpenType settings, variable fonts, cluster-safe artistic adjustments, text-on-path, bounded deformation, exact monochrome text-to-outlines, inline editing, horizontal and vertical writing modes, Mixed/Upright/Sideways orientation, Unicode indexing, UAX #9 BiDi, canonical paragraph layout, rich-text transactions, and local-first missing-font replacement are functional in the beta. Browser live paint remains Canvas2D; native PDF text shaping and collection/color-font outlining remain limited as described above.

Current font workflow limits

The compact toolbar, contextual bar, and Inspector use the active text range or caret when one exists, and otherwise format selected text objects. Family and exact-face hover previews are presentation only; choosing a result commits one undoable change, while Escape restores the previous formatting. Registered exact-face selection is available from the expanded browser rows; the Logo wordmark panel shares that browser and exposes weight and style controls. Recovery of an imported collection face, scoped Select by Font replacement with layout preview, arbitrary image-region crop/overlay selection, and applying an identified face to an existing text target are still being integrated. Text-to-outlines is available from the Typography inspector for supported monochrome, byte-backed faces; it creates an explicit destructive conversion with source-range/font provenance and undo recovery. Browser local-font enumeration is available only through the explicit action in the full browser and remains subject to the browser's permission policy.

Document Fonts indexes the effective text on the current canvas, including component instances and inherited rich runs, while hiding locked or invisible content. Review the source license before distributing a font file. Technical embedding flags do not describe every license term, and absent metadata remains unknown. See the typography guide for the available controls and current limitations.

The floating text formatting toolbar with its font family menu open during text editing
Choose a family from the compact text toolbar
Browse fonts with a family list and a local specimen alongside font details
Inspect a local family specimen before applying it

Common questions

Do effects disappear while I edit text?

No. The native input surface captures typing and selection, while the canvas remains the appearance authority for supported fills, strokes, shadows, glows, and other layer effects.

Will editing a rich-text range flatten its formatting?

No. When rich text is present, Varve keeps its paragraphs and runs canonical and replaces only the changed range. Effects remain whole-layer appearance; range styling belongs to rich-text formatting.

What happens to a text layer's name?

New text uses a content-derived automatic label. A manual Layers rename becomes custom and persists through later content or style changes. Typography includes an explicit action to restore automatic naming.

What happens when an imported design uses a missing font?

Varve identifies the family and checks the shipped catalog for the requested Fontsource face. You can explicitly install a matching catalog family and style, browse semantic alternatives, or choose an installed replacement. A family name alone cannot identify the original font file or revision. The source family remains available as provenance in the document manifest.

Can I replace a font everywhere?

Yes. Replace All covers node-level text, mixed rich-text runs, and shared text styles as one undoable operation.

Does replacement upload my document or fonts?

No. Core replacement uses Varve's local font catalog and is local-first; it does not require Figma credentials or uploading the document. Optional font providers remain separate and user-controlled.

Will replacement alter layout?

It can. Font metrics affect wrapping and bounds, so Varve shows the match quality and asks you to review reflow before delivery.

Can I preview a font before applying it?

Yes. Hover or use the arrow keys in the compact family picker to preview an installed or bundled face without changing document history; choose it to commit one change, or press Escape to restore the previous formatting. Catalog-only results show metadata until you explicitly install the exact desktop artifact; browsing never starts a remote request.

How do I see which faces are used in a document?

Open the Fonts panel's Document fonts view. It starts on the active page, separates exact faces from family-only requests, excludes hidden and locked content, and lets you select every matching text layer. Choose Entire document when you need a broader audit; Browse all fonts keeps discovery separate from the document.

Is vertical text just rotated text?

No. Vertical-rl and vertical-lr are logical writing modes with their own column progression and grapheme orientation. Rotation remains an independent object transform, and vertical alignment remains a text-frame alignment setting.

Ready to design with type?

Download Varve

Search Varve