1. Pick a model
682 low-poly assets and themed kits, every part in a kit sharing one palette and one scale so nothing clashes.
Every asset is AI-native: a small program made with code, not a frozen mesh. Turn its knobs here, in the store, or in the files you download.
Compatible with three.jsWebXRUnityGodotBlender
and any glTF engine
How it works?
682 low-poly assets and themed kits, every part in a kit sharing one palette and one scale so nothing clashes.
Remixable assets carry typed knobs: colours, proportions, part counts. Turn them in the store and the model rebuilds as you drag.
import { createAsset } from
'polyfork.dev/cdn/<id>.mjs';
scene.add(createAsset());
One import in three.js, no loader and no async. Everywhere else takes the file it already reads: GLB for Godot, Blender and any glTF engine, FBX for Unity, Unreal, Maya and 3ds Max, USDZ for iOS AR. Commercial use, no attribution.
Built to be called: connect the catalogue as an MCP server and the asset tools appear inside Claude Code, Cursor or Codex. One endpoint, no install, no key to browse, and every asset described well enough for an agent to place it without asking you.
Connect to MCP →MCP https://polyfork.dev/mcp
JSON-RPC 2.0 over HTTP POST (Streamable HTTP). No SSE, no session setup.
None to browse. A Bearer key only unlocks downloading a paid file you own.
Tools search_assets, get_asset, find_matching, get_variant, preview_scene, list_kits, get_kit, get_terrain, who_am_i, get_help, report_need
REST https://polyfork.dev/api (self-describing: GET it for every endpoint and filter)
GET https://polyfork.dev/api/assets?q=windmill&free=1&max_triangles=2000
GET https://polyfork.dev/api/assets/{id}
GET https://polyfork.dev/api/assets/{id}/matching
GET https://polyfork.dev/api/assets/{id}/variant?want=dark+basalt
GET https://polyfork.dev/api/kits
POST https://polyfork.dev/api/demand {"need":"...","email":"..."}
Authorization: Bearer <key>, from https://polyfork.dev/account. Browsing needs no key.
Import import { createAsset } from 'https://polyfork.dev/cdn/{id}.mjs'
Returns a THREE.Group. No loader, no await. Every asset is also a GLB at /cdn/{id}.glb.
Docs https://polyfork.dev/llms.txt the catalogue as a reference
https://polyfork.dev/prompt.txt the same catalogue as working instructions, which is the one to fetch first
https://polyfork.dev/agents human setup guide for connecting the MCP server
54 of 54 parts are approved and live, all on one palette and one scale.

I have been obsessed with 3D since the first time I played an N64. Now I want to build the biggest code-based 3D library on the internet (and probably the first one!).
I build XR for a living, and more and more of it lands on the web. Every month I spend in WebXR and three.js makes me more certain this is where 3D is going. No install, no store, no launcher. You send someone a link and they are inside it.
Then agents showed up and settled it. They are already web-native: the web is the one place they can build, run and ship something without asking anyone for permission. And they are code-native too. Hand an agent a mesh file and it is a sealed box it can only shove around your scene. Hand it a small program with typed knobs and it reads what every knob does, turns them, and builds the exact thing you asked for.
So that is what I am doing here: the biggest library of AI-native 3D assets for the web there is. Every asset a program, not a frozen mesh. I am building it because it is the version of 3D I want to work in, and right now nobody is building it for me.
I am building this in the open. Come tell me what is missing.
Every asset is a small program rather than a frozen mesh: a self-contained ES module (a factory returning a THREE.Group) with its knobs declared, plus the same model as GLB, FBX, USDZ and OBJ. The download is a zip holding the module, the GLB, a README listing every knob, the licence and a ready index.html, so you can serve the folder and it renders. The palette travels as named materials, so nothing arrives white in Unity or Blender. Themed kits bundle assets that share one palette, one scale and one grid.
Yes. Every kit ships a procedural terrain program: a module with knobs that generates that kit's own ground, sold as a part like any other and exported in the same formats. Terrain from two different kits joins edge to edge on a shared 64m world grid with no seam, so several kits can be laid into one landscape.
Yes: the license covers anything you build: games, apps, client work, courses, commercial products, no attribution required. What you cannot do is resell or redistribute the assets themselves, or use them to build or train a commercial asset generator: a model, service or pipeline that produces 3D assets and that you sell or offer to others. Personal experiments, research and learning are fine.
Parts that should move (lids, wheels, doors) are separate named groups with pivots at the hinge or axle, so a one-line rotation animates them.
Remixable assets have built-in knobs: curated palettes, per-part colors and shape options you flip right in the store viewer, then download as a GLB in your colors. Shader looks (retro palettes, toon and flat shading) are a second layer on top, and they travel with the download on a paid plan. The knobs are also published as machine-readable JSON per asset, so AI coding tools can drive them. Look for the remixable chip.
Modules target current three.js (r150+) and use only stable core APIs. Everything else takes a file: GLB for Godot, Blender and any glTF engine, FBX for Unity, Unreal, Maya and 3ds Max, USDZ for iOS AR Quick Look, OBJ if you just want geometry. The palette comes across as named materials, so nothing arrives white.