# Interface: Topology
CPU-side graph and geometry used to build network render buffers.
## Remarks
`vertexCoords` and `polylinePoints` are interleaved coordinate pairs. Flat
and tilt projections accept arbitrary `x, y` coordinates. Globe projection
is available when coordinates fit geographic longitude and latitude bounds.
`polylineStart` is an offset table into `polylinePoints`. It must contain
`edgeCount + 1` entries, begin at `0`, stay monotonic, and end at the number
of polyline points. Straight edges with no bend points can use a zero-filled
table.
## Example
```ts
const topology: Topology = {
vertexCount: 3,
vertexCoords: new Float32Array([-96, 30, -95, 31, -94, 30]),
edges: new Uint32Array([0, 1, 1, 2]),
polylineStart: new Uint32Array([0, 0, 0]),
};
```
## Properties
| Property | Modifier | Type | Description |
| :------ | :------ | :------ | :------ |
| `edges` | `readonly` | `Uint32Array` | Edge endpoint vertex indices stored as `[from0, to0, from1, to1, ...]`. **Remarks** Every endpoint index must be less than `Topology.vertexCount`. |
| `polylinePoints?` | `readonly` | `Float32Array`\<`ArrayBufferLike`\> | Optional intermediate `x, y` or `lon, lat` points, two f32 values per point. **Remarks** These are bend points only. Edge endpoints still come from `Topology.edges` and `Topology.vertexCoords`. |
| `polylineStart` | `readonly` | `Uint32Array` | Edge-to-polyline offset table with `edgeCount + 1` entries. The first entry must be `0`, entries must be monotonic, and the terminal entry must equal the number of points in `polylinePoints`. |
| `vertexCoords?` | `readonly` | `Float32Array`\<`ArrayBufferLike`\> | Optional `x, y` or `lon, lat` coordinates, two f32 values per vertex. **Remarks** Omit this field to use a generated unit-ring layout. |
| `vertexCount` | `readonly` | `number` | Number of logical graph vertices. |