# navlink

> Talos 0.7 · Since 0.6

Use it in a scene entity's `components` list as `{ "type": "navlink", … }`. The contract writes the fields flat and refuses unknown keys.

## Fields

| Field | Type | Required | Default | Allowed values | Description |
|---|---|---|---|---|---|
| `to` | `Vec3` | yes |  |  | The far end, relative to this entity's position and turned by its rotation (scale is ignored). Both ends are snapped to the navmesh within `radius`; a link with no navmesh near an end is left out and reported at load. |
| `kind` | `NavLinkKind` | yes |  | `jump`, `drop`, `generic` |  |
| `bidirectional` | `boolean` | no | `false` |  | Crossable from `to` back to this entity as well. Default false. |
| `action` | `string` | no |  |  | The input action a player-driven traverser performs at the start while moving toward the end — what the playtester presses. Default `jump` for a `jump` link, none otherwise. |
| `radius` | `number` | no | `0` |  | How far from each end to look for navmesh to attach to, in metres. Default 0.6. |
| `hold` | `number` | no | `0` |  | Seconds the traverser holds `action` down from the start, the way a player holds jump for a full-height jump in a game that cuts the rise on an early release. Default 0.25; 0 is a one-tick tap. A finite number of seconds, 0 or more (`navlink-invalid`). |

## Rules that can refuse it

- `nav-undeclared`
- `navlink-invalid`

## Example

From the contract's tested fixture `fixtures/contract/full20/scene.json#island-goal`.

```json
{
  "type": "navlink",
  "to": [
    -3,
    -0.5,
    0
  ],
  "kind": "drop"
}
```
