npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@toytown/models

v0.2.0

Published

CC0 low-poly toy-town building models (GLB) with a manifest: houses, shops, schools, churches, props and more.

Readme

@toytown/models

A kit of low-poly, toy-town building models as GLB files, with a manifest.json describing them. It includes houses, shops, cafés, pubs, schools, churches, hospitals, offices, petrol stations, trees, small props and more. It's made for toytown-gl but works in any engine that reads glTF.

Licence: CC0 1.0. Use the models for anything, including commercial work, with no attribution needed. Provenance is in models/LICENSES.md.

The kit

Conventions

Every model follows the same rules:

  • Y-up, metres. One unit is one metre.
  • The front faces +Z, where the door and shopfront are.
  • The origin is at the centre of the base, so the model sits on the ground at y = 0.
  • One material per palette key. Materials are named like wall_cream, roof_red or window, and their colours are in manifest.json → palette as sRGB hex. The GLB baseColorFactor values are the same colours in linear space, as the glTF spec requires. To recolour the kit, look materials up by name.
  • There are no textures or node transforms. Budgets: at most 2,000 triangles per model, 300 per prop.

What's in manifest.json

{
  "version": 1,
  "units": "metres", "up": "+Y", "front": "+Z",
  "palette": { "wall_cream": "#F4E9D8", "roof_red": "#D9644A", … },
  "models": {
    "house": {
      "file": "generic/house.glb",
      "pack": "generic",
      "osm_tags": ["building=house", "building=detached"],   // suggested OpenStreetMap matches
      "materials": ["wall_cream", "roof_red", …],
      "footprint_m": [8.6, 7.8],                              // width (x) × depth (z)
      "height_m": 8.7,
      "variants": [{ "name": "house_2", "file": "generic/house_2.glb", … }]
    }
  },
  "props": {
    "awning": { "file": "props/awning.glb", "categories": ["shop", "cafe"], "attach": { "at": "front-wall", … }, … }
  }
}
  • variants: other looks for the same category. house, shop and apartment each have 2. Pick one per building, for example by hashing an id, so streets don't look cloned.
  • props: small parts to decorate a building when a full model doesn't fit. They are an awning, a red-cross sign, a church spire and a petrol-station canopy, and attach says where each one goes.
  • Regional packs (e.g. ireland/) hold landmark models such as Tramore's Metal Man.

Skin model sets

models/skins/ holds two restyled sets of the generic models, under the same names, so a renderer can swap a whole set by name. Each folder has its own manifest.json (same format, paths relative to the folder) and preview.png:

  • skins/voxel: every model rebuilt from cubes, coloured like the surface each cube came from.
  • skins/chunky: squash-and-stretch cartoon, with squat bulging walls and tall steep roofs.

The props are restyled too. Both sets are generated by assets/generator/generate_models.py and follow the same conventions and budgets. In toytown-gl, the voxel and chunky themes use them (models.kit in a theme).

Using the models

three.js

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
const gltf = await new GLTFLoader().loadAsync(
  'node_modules/@toytown/models/models/generic/house.glb',
);
scene.add(gltf.scene); // already Y-up, metres, front facing +Z

Babylon.js

import '@babylonjs/loaders/glTF';
const result = await BABYLON.SceneLoader.ImportMeshAsync(
  '',
  '/models/generic/',
  'house.glb',
  scene,
);

Unity: add glTFast and drop the .glb files into Assets/. glTF +Z maps to Unity's forward (+Z).

Godot 4: copy the .glb files into your project; Godot imports glTF natively. A model's front (+Z) faces Godot's +Z, the opposite of -Z "forward", so rotate 180° about Y if your game uses -Z as forward.

Getting it

  • npm: npm i @toytown/models, then use @toytown/models/manifest.json and @toytown/models/generic/house.glb.
  • A zip is attached to each GitHub release (toytown-models-<version>.zip).

The models are generated by assets/generator/generate_models.py in the toytown-gl repo. See docs/adding-models.md there to add your own.