Runek is a source registry of procedural 3D components for React Three Fiber. Pull a component's source into your project and own it (shadcn-style). Every component, whether a bookshelf, a lake or a whole house, generates its own geometry from props and a seed. No binary assets, no model files, no CDN. A whole world is just data: diffable, forkable, version-controlled like any repo.
Think "shadcn for 3D worlds."
Why Runek
- Procedural-first: geometry from props +
seed. No.glb, no textures, no CDN. - A world is data: every component is a pure, deterministic function of its props.
- Seeded determinism: same seed → same result, on every machine and every render.
- Re-themeable: components default their colors to a world palette. Swap the palette to re-skin the world.
- Local-first: no backend, and a world deploys as a static site.
- You own the components: component source is copied into your project to edit and fork, while the small
@runek/coreruntime comes from npm.
Getting started
npx @runek/cli init # writes runek.config.json + the install dir
npx @runek/cli add player terrain bookshelf # pulls source + deps into your project
npx @runek/cli list # browse the catalog
import { World } from '@runek/core'
import { Bookshelf } from './runek/Bookshelf'
import { Player } from './runek/Player'
import { Terrain } from './runek/Terrain'
export function FirstWorld() {
return (
<World>
<Terrain size={[40, 40]} />
<Bookshelf position={[0, 1, 0]} seed={42} fill={0.8} />
<Player />
</World>
)
}
Same seed → same world, every time.
More
- Docs · Gallery · Walk the library
- Helicon: the showcase world, a walkable, editable procedural island built entirely from Runek components, its whole scene defined as a single JSON file.
- Source: github.com/nullorder/runek