ThreeUI Community: The Open-Core Machine Turning 3D UI into a Real Component System

A look at how Meng To’s catalog combines ready-made Three.js visuals, lazy-loaded browsing, and a private-to-public sync pipeline to make spatial interfaces shippable.

9 min read • View on GitHub • More from MengTo

A wide gallery of suspended 3D component cards arranged in a clean white space, with one hand placing a card into a labeled slot while other cards seem to move through filters and routes. The scene explains that the project is less a bag of shaders than a productized catalog with browsing, selection, and distribution built in.
ThreeUI behaves like a gallery, but underneath it is a distribution system for reusable spatial components.
Key Takeaways

The surprising thing about ThreeUI Community is not the shaders. It is the machinery around them. The public repo behaves like a storefront, but the source of truth lives behind the curtain, and a sync pipeline decides what becomes visible, routable, and installable.

The real product is the pipeline

This is an open-core setup with discipline. A private Pro codebase feeds a public community edition, and the community repo is continuously derived from it. That means the project is not just publishing components. It is manufacturing a public surface from a governed source tree.

The public repo is the output of a controlled transformation, not the starting point.

MengTo/threeui is interesting because it does not just dump components into a repo. It ships a polished community catalog, a React package, and a clean product boundary between free and paid tiers that builders can actually learn from.

That matters because the repo has to solve two jobs at once. It has to be useful to developers who want 3D UI components now, and it has to protect the boundary between public and paid assets. The sync script handles that tension by filtering restricted files, stripping premium fonts, and emitting a public source manifest.

Why this is a different kind of 3D library

ThreeUI is not trying to be another low-level helper layer for React Three Fiber. It is closer to a finished visual vocabulary. The components are the point, not just the primitives underneath them.

ToolPrimary goalOutput typeSource accessBest forWhat it is missing
ThreeUI CommunityReady-made 3D UI componentsSource code and npm packageOpen community repo, with Pro tier above itShipping polished spatial UI fastDeep scene authoring and endless low-level flexibility
R3F / Drei3D utilities and helpersBuilding blocksFully open sourceEngineers who want control over everythingFinished visual patterns and productized compositions
SplineNo-code 3D designProprietary editor and exportsClosed editor, export focusedDesigners who prefer a visual workspaceFull source-level ownership and code-first remixing

The distinction is simple. Drei gives you the bridge. Spline gives you the studio. ThreeUI gives you the finished room, plus the code that built it.

The catalog behaves like a product, not a docs page

The browsing experience is not decorative. The app uses custom route resolution, legacy slug mapping, lazy-loaded components, and metadata-driven catalog results so the site behaves like a searchable product surface. That is why the public repo feels alive instead of archival.

A black ink hedcut portrait of Meng To on a pure white background, based on his verified GitHub avatar. The portrait identifies the creator behind the open-core system and anchors the article in a real maintainer rather than an abstract project brand.

The routing layer matters more than it first appears. Legacy IDs still resolve. Renamed shaders still preserve discovery. That kind of continuity turns a fast-moving design catalog into something indexable, bookmarkable, and safe to evolve.

// The shape of the catalog tells the story.
// Components are lazy-loaded, then flattened into browseable results.

export const routes = {
  "thinking-button": lazy(() => import('./ThinkingButton')),
  "uploading-button": 'redirect-to-thinking-button',
};

const results = createCatalogResults(shaders, categories, tags);

The important part is not the syntax. It is the contract. Source, metadata, routes, and search results are all tied together, so documentation behavior is not bolted on after the fact.

A close-up mechanical sorting machine sends component files from a locked private vault to a public shelf. Some items are diverted into a discard channel while a manifest stamp lands at the end. The scene explains how the community repo is derived from a private source of truth without leaking premium assets.
The sync pipeline is the project’s real differentiator because it turns open-core governance into a repeatable build step.

The component system is built to survive Three.js churn

There are two durability tricks here. First, the package uses explicit subpath exports, so consumers can import one component without dragging in the entire catalog. Second, the repository pins different Three.js versions through aliases, which reduces breakage when scenes depend on a specific renderer era.

That is a serious choice for a visual library. 3D UI tends to rot when its dependencies drift. ThreeUI treats versioning like an asset, not an afterthought.

What it beats, and what it is not

ThreeUI is best understood by what it replaces in the workflow. Compared with low-level tooling, it gives you much more finished output. Compared with closed visual tools, it gives you source code, exports, and direct ownership.

CategoryThreeUIR3F / DreiSplineTheatre.js
Primary valueFinished 3D UI patternsUtilities and helpersNo-code design and exportAnimation orchestration
Best workflowCopy, retheme, shipBuild everything yourselfDesign visually, export laterAnimate custom scenes
Source-level controlHighVery highLimited by export pathHigh
What it lacksDeep scene authoring toolsPre-built visual outcomesFull code ownershipReady-made UI components

That makes its niche unusually clear. It is not a general 3D engine, and it is not a visual toy. It is a component system for teams that want spatial interfaces to behave like ordinary product code.

The agent angle follows naturally. If a component ships as source, props, metadata, and a clean manifest, then a coding agent can retheme it, search it, and reuse it with far less guesswork than a screenshot-based workflow would allow.