Build performance-critical geometry and primitive collections.
---
name: cesiumjs-primitives
description: "CesiumJS primitives and geometry - Primitive, GeometryInstance, Appearance, BufferPrimitive collections, GeoJsonPrimitive, Billboard/Label/PointPrimitive collections, built-in geometry shapes, ground primitives, classification. Use when rendering performance-critical static or vector geometry, loading GeoJSON without entities, creating custom shapes, batching draw calls, or using low-level collections."
---
# CesiumJS Primitives & Geometry
> **Applies to:** CesiumJS v1.142+ (ES module imports, `??` instead of `defaultValue`)
## Architecture
The Primitive API is the low-level rendering layer beneath the Entity API, trading convenience for performance.
**Core formula:** `Primitive = GeometryInstance[] + Appearance`
- **GeometryInstance** -- positions a Geometry in world space with per-instance attributes (color, show).
- **Geometry** -- vertex data describing a shape (polygon, box, ellipsoid, etc.).
- **Appearance** -- GLSL shaders + render state + optional Material that shade the geometry.
Primitives are **immutable after first render** -- geometry cannot change, but per-instance attributes update via `primitive.getGeometryInstanceAttributes(id)`.
## Primitive
```js
import {
Viewer, Primitive, GeometryInstance, EllipseGeometry,