Skip to content

feat(text): publish the renderer-neutral core as @pmndrs/text/core - #59

Open
thejustinwalsh wants to merge 1 commit into
mainfrom
refactor/core-subpath
Open

feat(text): publish the renderer-neutral core as @pmndrs/text/core#59
thejustinwalsh wants to merge 1 commit into
mainfrom
refactor/core-subpath

Conversation

@thejustinwalsh

@thejustinwalsh thejustinwalsh commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Publish the renderer-neutral core (D-249)

The surface a custom renderer integration needs moves out of internal/ and publishes on one stable subpath, @pmndrs/text/core: runtime shaper creation, the engine host and sessions, frame-wire serialization, render-plan and layout views, font-binding compilation, the versioned ABI, and the policy-authoring toolkit (compileRenderPolicy, programContext, the wire-identity registry, technique wire ids). The runtime-to-shaper bridge textRuntimeShaper sheds its @internal marker — integrations reach the engine through the same door Three uses.

Three's first-party policy leaves the core: the per-technique programs, capability set, first-party buffer ids, and firstPartyThreeRenderPolicyBytes now live in three/render-policy.ts, importing the same public authoring toolkit a third party would. The transform/allocation mode unions take policy-neutral names in core.

Behavior unchanged — the moves are type-level. A subpath types test pins the surface; the full package suite and integration tests are green.

Stack created with GitHub Stacks CLIGive Feedback 💬

@github-actions

Copy link
Copy Markdown

size-limit report 📦

Path Size
Core JS (gzip) 18.37 KB (0%)
Shaper Wasm (gzip) 418.76 KB (0%)
Three.js adapter JS (gzip) 57.87 KB (+0.29% 🔺)
Inter font · Bitmap (gzip) 545.26 KB (0%)
Inter font · MTSDF (gzip) 6.48 MB (0%)
Inter font · Slug (gzip) 604.06 KB (0%)
Font Awesome icons · Bitmap (gzip) 439.53 KB (0%)
Font Awesome icons · MTSDF (gzip) 6.89 MB (0%)
Font Awesome icons · Slug (gzip) 642.64 KB (0%)
Font validator JS (gzip) 134.24 KB (0%)
Runtime bake host JS (gzip) 5.38 KB (0%)
Runtime bake Worker JS (gzip) 142.45 KB (0%)
Font baker JS (gzip) 2.41 KB (0%)
Font baker Wasm (gzip) 379.63 KB (0%)
Bitmap baker JS (gzip) 4.66 KB (0%)
Bitmap baker Wasm (gzip) 228.3 KB (0%)
MTSDF baker JS (gzip) 5.39 KB (0%)
MTSDF baker Wasm (gzip) 209.22 KB (0%)
Slug baker JS (gzip) 4.01 KB (0%)
Slug baker Wasm (gzip) 181.24 KB (0%)

@thejustinwalsh
thejustinwalsh force-pushed the refactor/core-subpath branch 2 times, most recently from 376792c to 2dfde80 Compare August 11, 2026 23:33
An error occurred while trying to automatically change base from feat/decoration-rendering to feat/hyphen-cluster-contract August 12, 2026 00:30
@thejustinwalsh
thejustinwalsh marked this pull request as ready for review August 12, 2026 00:30
The surface a custom renderer integration needs moves out of internal/
and publishes on one stable subpath: runtime shaper creation, the
engine host and sessions, frame-wire serialization, render-plan and
layout views, font-binding compilation, the versioned ABI, and the
policy-authoring toolkit (compileRenderPolicy, programContext, wire
identity registry, technique wire ids). The runtime-to-shaper bridge
sheds its @internal marker: integrations reach the engine through the
same door Three uses.

Three's first-party policy leaves the core: the per-technique programs,
capability set, first-party buffer ids, and firstPartyThreeRenderPolicyBytes
now live in three/render-policy.ts, importing the same public authoring
toolkit a third party would. The transform and allocation mode unions
keep policy-neutral names in core. A types test pins the subpath.
@thejustinwalsh
thejustinwalsh changed the base branch from feat/decoration-rendering to main August 12, 2026 00:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant