Observed since 20 Oct, 21:42 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
9th.js
A modern 3D JavaScript library for creating interactive graphics and visualizations
A WebGL library for building interactive 3D scenes in the browser.
9th.js gives you a scene graph, cameras, meshes, lights, materials, loaders, and controls — so you can render 3D content with a clear, object-oriented API and ship it to the web.
Maintained by digitalcloud.
Scene, Object3D, Mesh, hierarchy, transforms (Euler + quaternion)BufferGeometryMeshBasicMaterial, MeshStandardMaterial, and related)Raycaster + Mesh.raycastInstancedMesh for batched drawsRenderTarget + composer-friendly renderer APIsOrbitControls for explore / inspect UIsnpm install 9th.js
yarn add 9th.js
pnpm add 9th.js
import {
WebGLRenderer,
Scene,
PerspectiveCamera,
BoxGeometry,
MeshBasicMaterial,
Mesh
} from '9th.js';
const canvas = document.querySelector('#canvas');
const renderer = new WebGLRenderer({ canvas, antialias: true });
const scene = new Scene();
const camera = new PerspectiveCamera(60, innerWidth / innerHeight, 0.1, 100);
camera.position.set(0, 1.5, 4);
const cube = new Mesh(
new BoxGeometry(1, 1, 1),
new MeshBasicMaterial({ color: '#4fc3f7' })
);
scene.add(cube);
function frame() {
requestAnimationFrame(frame);
cube.rotation.y += 0.01;
renderer.setSize(innerWidth, innerHeight);
camera.aspect = innerWidth / innerHeight;
camera.updateProjectionMatrix();
renderer.render(scene, camera);
}
frame();
import {
WebGLRenderer, Scene, PerspectiveCamera,
BoxGeometry, MeshStandardMaterial, Mesh,
AmbientLight, DirectionalLight, OrbitControls
} from '9th.js';
const canvas = document.querySelector('#canvas');
const renderer = new WebGLRenderer({ canvas, antialias: true });
const scene = new Scene();
const camera = new PerspectiveCamera(60, innerWidth / innerHeight, 0.1, 100);
camera.position.set(2, 2, 4);
scene.add(new AmbientLight(0xffffff, 0.35));
const sun = new DirectionalLight(0xffffff, 1.2);
sun.position.set(3, 5, 2);
scene.add(sun);
scene.add(new Mesh(
new BoxGeometry(1, 1, 1),
new MeshStandardMaterial({ color: '#4fc3f7', metalness: 0.2, roughness: 0.4 })
));
const controls = new OrbitControls(camera, canvas);
function frame() {
requestAnimationFrame(frame);
controls.update();
renderer.setSize(innerWidth, innerHeight);
camera.aspect = innerWidth / innerHeight;
camera.updateProjectionMatrix();
renderer.render(scene, camera);
}
frame();
<script src="https://unpkg.com/9th.js@1.0.7/dist/umd/9th.umd.min.js"></script>
Also on jsDelivr: https://cdn.jsdelivr.net/npm/9th.js@1.0.7/dist/umd/9th.umd.min.js
Live gallery (after npm run build, serve the repo root):
examples/ → open examples/index.html
| Hello cube | Lit + orbit |
|---|---|
![]() | ![]() |
Unlit MeshBasicMaterial | PBR + lights + OrbitControls |
| Primitives | Materials |
|---|---|
![]() | ![]() |
| Box, sphere, cylinder, cone | Metalness / roughness row |
| Lights | GLTF |
|---|---|
![]() | ![]() |
| Ambient + directional + points | GLTFLoader → scene |
npm run build
npx serve .
# open http://localhost:3000/examples/
MIT © digitalcloud
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
jestEnvironment{
"local_name": "jest",
"alias": false,
"peer_metadata": null
} | ^29.6.2 | development |
huskyEnvironment{
"local_name": "husky",
"alias": false,
"peer_metadata": null
} | ^8.0.3 | development |
jsdomEnvironment{
"local_name": "jsdom",
"alias": false,
"peer_metadata": null
} | ^22.1.0 | development |
canvasEnvironment{
"local_name": "canvas",
"alias": false,
"peer_metadata": null
} | ^2.11.2 | development |
eslintEnvironment{
"local_name": "eslint",
"alias": false,
"peer_metadata": null
} | ^8.47.0 | development |
rollupEnvironment{
"local_name": "rollup",
"alias": false,
"peer_metadata": null
} | 3.29.5 | development |
ts-jestEnvironment{
"local_name": "ts-jest",
"alias": false,
"peer_metadata": null
} | ^29.1.1 | development |
typedocEnvironment{
"local_name": "typedoc",
"alias": false,
"peer_metadata": null
} | ^0.25.0 | development |
prettierEnvironment{
"local_name": "prettier",
"alias": false,
"peer_metadata": null
} | ^3.0.3 | development |
cross-envEnvironment{
"local_name": "cross-env",
"alias": false,
"peer_metadata": null
} | ^7.0.3 | development |
puppeteerEnvironment{
"local_name": "puppeteer",
"alias": false,
"peer_metadata": null
} | ^21.5.0 | development |
commitizenEnvironment{
"local_name": "commitizen",
"alias": false,
"peer_metadata": null
} | ^4.3.0 | development |
playwrightEnvironment{
"local_name": "playwright",
"alias": false,
"peer_metadata": null
} | ^1.40.0 | development |
size-limitEnvironment{
"local_name": "size-limit",
"alias": false,
"peer_metadata": null
} | ^11.0.0 | development |
typescriptEnvironment{
"local_name": "typescript",
"alias": false,
"peer_metadata": null
} | ^5.1.6 | development |
@types/jestEnvironment{
"local_name": "@types/jest",
"alias": false,
"peer_metadata": null
} | ^29.5.5 | development |
@types/nodeEnvironment{
"local_name": "@types/node",
"alias": false,
"peer_metadata": null
} | ^20.5.0 | development |
lint-stagedEnvironment{
"local_name": "lint-staged",
"alias": false,
"peer_metadata": null
} | ^14.0.1 | development |
concurrentlyEnvironment{
"local_name": "concurrently",
"alias": false,
"peer_metadata": null
} | ^8.2.0 | development |
@commitlint/cliEnvironment{
"local_name": "@commitlint/cli",
"alias": false,
"peer_metadata": null
} | ^17.7.2 | development |
semantic-releaseEnvironment{
"local_name": "semantic-release",
"alias": false,
"peer_metadata": null
} | ^21.1.1 | development |
canvas-5-polyfillEnvironment{
"local_name": "canvas-5-polyfill",
"alias": false,
"peer_metadata": null
} | ^0.1.5 | development |
eslint-plugin-nodeEnvironment{
"local_name": "eslint-plugin-node",
"alias": false,
"peer_metadata": null
} | ^11.1.0 | development |
rollup-plugin-htmlEnvironment{
"local_name": "rollup-plugin-html",
"alias": false,
"peer_metadata": null
} | ^0.2.1 | development |
eslint-plugin-importEnvironment{
"local_name": "eslint-plugin-import",
"alias": false,
"peer_metadata": null
} | ^2.28.1 | development |
rollup-plugin-terserEnvironment{
"local_name": "rollup-plugin-terser",
"alias": false,
"peer_metadata": null
} | ^7.0.2 | development |
eslint-plugin-promiseEnvironment{
"local_name": "eslint-plugin-promise",
"alias": false,
"peer_metadata": null
} | ^6.1.1 | development |
@rollup/plugin-replaceEnvironment{
"local_name": "@rollup/plugin-replace",
"alias": false,
"peer_metadata": null
} | ^5.0.2 | development |
rollup-plugin-commonjsEnvironment{
"local_name": "rollup-plugin-commonjs",
"alias": false,
"peer_metadata": null
} | ^10.1.0 | development |
rollup-plugin-filesizeEnvironment{
"local_name": "rollup-plugin-filesize",
"alias": false,
"peer_metadata": null
} | ^10.0.0 | development |
rollup-plugin-visualizerEnvironment{
"local_name": "rollup-plugin-visualizer",
"alias": false,
"peer_metadata": null
} | ^5.9.3 | development |
@typescript-eslint/parserEnvironment{
"local_name": "@typescript-eslint/parser",
"alias": false,
"peer_metadata": null
} | ^6.4.0 | development |
rollup-plugin-typescript2Environment{
"local_name": "rollup-plugin-typescript2",
"alias": false,
"peer_metadata": null
} | ^0.35.0 | development |
@rollup/plugin-node-resolveEnvironment{
"local_name": "@rollup/plugin-node-resolve",
"alias": false,
"peer_metadata": null
} | 16.0.3 | development |
@commitlint/config-conventionalEnvironment{
"local_name": "@commitlint/config-conventional",
"alias": false,
"peer_metadata": null
} | ^17.7.0 | development |
@typescript-eslint/eslint-pluginEnvironment{
"local_name": "@typescript-eslint/eslint-plugin",
"alias": false,
"peer_metadata": null
} | ^6.4.0 | development |
typescriptEnvironment{
"local_name": "typescript",
"alias": false,
"peer_metadata": {
"optional": true
}
} | >=4.5.0 | peer |
Source distribution
{
"shasum": "52ad7ffd8aa54df002892234a5bdd597c4905b10",
"tarball": "https://registry.npmjs.org/9th.js/-/9th.js-0.1.10.tgz",
"fileCount": 68,
"integrity": "sha512-8wOxb0tKkVYrjrMRB1kQvj/UeyqZdNUtHMiAobqXIiammbroj6CR+15wvaU+3xbUtlW4vk372PlynIbTnqMs9g==",
"signatures": [
{
"sig": "MEYCIQC3wruCjsJfhyGpJsJZ0gxEUjAzymtdhPD8cNpHOEMbCgIhAIXnOMEWXxwcBqCk5/hfbDOt3S3frJJ8+pFyU4uZsVKW",
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
}
],
"unpackedSize": 10119064
}Observed since 20 Oct, 21:42 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:488088eae1920e7c9d311b54844ded355f515c06d4efde6ff511f96fa61a7222