Skip to content

Incubate a standalone authored font source library #431

Description

@kostyafarber

Problem

Shift's format readers and writers are coupled to editor-specific models, native paths, and product workflows. Other Rust, TypeScript, browser, and Node consumers cannot reuse the authored-source work without importing Shift or reconstructing format behavior independently.

Expected outcome

A standalone fontsrc library reads and writes authored font sources through format-native APIs and host-provided I/O boundaries. It incubates in the monorepo against Shift's fixtures and adapters, then moves to the public shift-editor/fontsrc repository without carrying any shift-* dependency.

Acceptance criteria

  • The Rust library has no direct or transitive dependency on a shift-* crate.
  • UFO, Designspace, and Glyphs inputs have format-native read APIs that do not require native filesystem paths.
  • Supported writes preserve format-specific data, including pass-through lib content, and have corpus-backed round-trip coverage.
  • Browser and Node consumers have typed TypeScript APIs backed by the same Rust format implementation.
  • Multi-file projects can be loaded through host-provided sources without Electron, N-API, persistence, or a server round trip.
  • Shift consumes the library through a separate adapter instead of exposing editor identity in fontsrc.
  • The incubated library is transferred to shift-editor/fontsrc with documentation and reproducible release configuration before its first public release.

Boundaries

Compiled OpenType previewing, Shift editor sessions, workspace persistence, and the MemoryFontSource adapter are integrations built on or alongside this library, not part of its format-native core.

Related to #399 and #404.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions