Web Cars 2 wiki

EditPlay the game

Designing a car

Updated 2026-07-31 by webcars2@lantiainen.com

Everything you need to get a car of your own driving in Web Cars 2. Twenty minutes if you already have Blockbench open.

You do not need to write any code, and there is no export step: the game loads your .bbmodel file directly.

What a car actually is

A car is a Blockbench model whose group names say what each part does. The shapes are yours; the names are the contract.

The smallest car that works has four things:

Everything else — lights, exhausts, extra body panels, a second pair of visible wheels — is optional decoration you can add once it drives.

Start from the sample, not from nothing

Run this once in the repo:

cd game && npm run generate:assets

That writes models/generated/sample-car.bbmodel. Copy it to models/cars/my-car/my-car.bbmodel and open that copy in Blockbench. It is already correctly named and scaled, so restyling it is much faster than building the naming from scratch — and much harder to get subtly wrong.

Never edit a file under models/generated/. That folder is regenerated and your work would vanish.

The three rules that catch everyone

The car faces +X. That is right on screen. Build the nose to the right; a car modelled facing left will drive backwards and look wrong in every screenshot.

One Blockbench block is one metre. A car about 2.5 blocks long is about 2.5 m, which is the intended size. If a model arrives wildly off-scale the loader normalises the chassis to 2.4 m and prints a warning — take the warning as a signal you modelled at the wrong scale, not as a fix.

Two physics wheels, four visible wheels. The simulation runs two wheels: one rear, one front. To show four, add a wheelshell group inside each tire group and it mirrors that axle. This is a design decision, not a limitation to work around — there is no independent left/right suspension in a side-view game.

Naming, briefly

A group can simply be called what it is:

body
tires
├── tire_front
│   └── wheelshell
└── tire_back
    └── wheelshell
suspension_front
suspension_back
headlight
exhaust
spawn

Recognised names include body/chassis, tire/wheel, wheelshell, suspension/strut, headlight, taillight, light, exhaust and spawn. Each may take a _front, _back, _left, _right or number suffix and nothing else — so tire_front claims a role while light_bar stays an ordinary panel of whatever group it sits in.

When you want to tune something, append settings to the name:

body;weight=900;softness=20

See Blockbench tags for the settings worth knowing, and the repository's docs/model-format.md for the complete grammar — that file is the authority, and this wiki deliberately does not duplicate it.

Making it feel like a car

Three settings do most of the work. All of them go on a group name.

SettingGoes onWhat it changes
weight=900a body groupmass in kg — heavier feels planted, lighter flips easily
power=800a body groupengine torque — how hard it pulls up a hill
topSpeed=90a body groupspeed cap in km/h
springHz=4a suspension groupbounce rate — low is floaty, high is stiff
damping=55a suspension grouphow fast the bounce settles

Tag values are always whole numbers. damping=55 means 0.55. There are no decimal points anywhere in the grammar, and a value with one will be rejected.

Trying it

Save the file and reload the page — that is the whole loop. Then:

If the car does not appear, the loader will tell you why on screen. Parsing never throws — problems come back as a list of errors and warnings, so read the message rather than guessing.

Common problems

The car sinks through the ground. Your body group has no cubes in it, so there is no collider. A group's cubes are the shape.

The car spawns inside the terrain. Move the spawn group up. It marks where the chassis centre starts.

The wheels spin the wrong way. The model is facing −X. Rotate the whole thing 180°.

Nothing loads at all. Check that the textures are embedded rather than linked to files on disk — a linked texture that cannot be found opens the model empty.

Next