Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Concept index

The routing table. Search a concept (the search icon or S), open the named files, start reading at the entry symbol. Paths are repo-relative; every row was verified against the tree. For API detail run cargo doc --open -p <crate> locally - every crate exposes a prelude. For prose depth, follow the chapter linked at each group heading.

Boot and frame flow

Depth: Architecture.

ConceptCrate(s)Key filesEntry symbolOrientation
App boot, app assembly, plugin ordernova_corecrates/nova_core/src/lib.rsAppBuilderbuild() wires the whole plugin stack; game binary + CLI flags in src/main.rs.
Game states, pausenova_gameplay, nova_menucrates/nova_gameplay/src/lib.rs, crates/nova_menu/src/pause.rsGameStates, PauseStatesState enums + GameMode live in gameplay; ESC overlay, toggle_pause and the clock freeze in menu.
Frame flow: Update vs FixedUpdatenova_ship, nova_gameplaycrates/nova_ship/src/lib.rs, crates/nova_gameplay/src/plugin.rsSpaceshipSystemsNovaShipPlugin chains the set brackets identically in both schedules; avian physics runs in FixedPostUpdate. Which schedule your system goes in: the Architecture chapter.
Asset loading gate, mod mergenova_assetscrates/nova_assets/src/plugin.rs, crates/nova_assets/src/merge.rsGameAssetsPluginGameAssetsStates gates entry to the menu/game; register_bundles merges base + enabled mods into the Game* resources.

The ship

Depth: Ship sections internals.

ConceptCrate(s)Key filesEntry symbolOrientation
Ship building from sectionsnova_scenario, nova_shipcrates/nova_scenario/src/objects/spaceship.rs, crates/nova_ship/src/sections/base_section.rsinsert_spaceship_sectionsObserver on the ship root spawns one child per SectionKind config, resolving prototypes; SpaceshipConfig is the authored shape.
Section integrity: damage, disable, destroynova_gameplaycrates/nova_gameplay/src/integrity/mod.rs, crates/nova_gameplay/src/damage.rsNovaIntegrityPluginHealth store and the disable/destroy chain; typed DamageType + the travel rule (apply_damage, pierce_remainder). Health decides WHEN a body dies; the two readings below decide what it looks like.
How far gone a body looksnova_gameplaycrates/nova_gameplay/src/integrity/erosion.rsDamageLevelOne scalar, 0..1, derived from the entity’s OWN Health. Grades every whole-body effect.
Where a body was hit (marks, carve cost, merge)nova_gameplaycrates/nova_gameplay/src/integrity/carve.rsDamageMarks, mark_radiusSpheres in the body’s local frame, priced by what the hit ABSORBED at DAMAGE_PER_UNIT_VOLUME (8 hp per cubic unit); record_blast_marks cuts one crater per body.
Authored per-section damage looksnova_shipcrates/nova_ship/src/sections/damage_effects.rs, damage_cracks.rs, damage_sparks.rs, damage_plume.rsDamageEffects, fit_damage_effectsCracks/Sparks/Plume, one component each, default [Cracks]. No ship section ever loses geometry.
Carve debris: dust and severed piecesnova_gameplaycrates/nova_gameplay/src/integrity/spew.rs, crates/nova_gameplay/src/integrity/chunk.rsCarveSpew, ShardLook, spawn_carved_chunkShards are keyed on the WEAPON CLASS - kinetic and pierce chip, explosive does not; only a cut that SEVERED material spawns a real body, floored at CHUNK_MIN_VOLUME.
Severing, wreck fragments, structural collapsenova_shipcrates/nova_ship/src/sections/integrity.rsShipIntegrityPluginBuilds the section graph, splits disconnected structure (sever_disconnected_structures -> ShipWreckFragmentMarker), runs cascade_structural_collapse.
Neutralization (combat-dead)nova_gameplaycrates/nova_gameplay/src/integrity/neutralize.rsNeutralizedMarkerAn armed ship that loses all weapons, or the flight computer it had, fires OnNeutralizedEvent; the hull may survive.
Ship skins, styles, greeblesnova_shipcrates/nova_ship/src/sections/shell_skin.rs, crates/nova_ship/src/sections/skin_style.rs, crates/nova_ship/src/sections/skin_decor.rsShipSkinPluginCladding derived from structure; styles resolve by id (ShipStyleConfig, GameStyles); deterministic greeble scatter (scatter_decor).
Turrets, aimingnova_shipcrates/nova_ship/src/sections/turret_section/mod.rs, crates/nova_ship/src/sections/turret_section/aim.rsTurretSectionPluginAuthored joint tree; lead-intercept aim (update_turret_aim_point, muzzle_on_target); arcs and firing in sibling files.
Torpedoes, point defensenova_shipcrates/nova_ship/src/sections/torpedo_section/mod.rs, crates/nova_ship/src/input/point_defense/mod.rsTorpedoSectionPlugin, SpaceshipPointDefensePluginBay + guided round lifecycle (TorpedoGuidance, TorpedoBlast); PD splits target assignment from mount authority (borrowed player mounts).
Flight autopilot verbs (STOP, GOTO, ORBIT), PD attitude controllernova_shipcrates/nova_ship/src/flight/state.rs, crates/nova_ship/src/sections/controller_section.rs, crates/nova_ship/src/physics/pd_controller.rsFlightVerb, AutopilotController sections grant verbs; the flight layer flies them (NovaFlightPlugin); PDControllerPlugin is the attitude loop.
Radar locking, targetingnova_shipcrates/nova_ship/src/input/targeting/mod.rs, crates/nova_ship/src/input/targeting/state.rsSpaceshipTargetingPluginRadar search writes the two sticky lock slots on the ship root: TravelLock, CombatLock.
Gravity wellsnova_gameplaycrates/nova_gameplay/src/gravity.rsGravityWellInverse-square wells with an SOI cutoff; anchors and asteroids publish one.

Scenario and modding

Depth: Scenario engine.

ConceptCrate(s)Key filesEntry symbolOrientation
Scenario engine, mission scriptingnova_scenario, nova_eventscrates/nova_scenario/src/lib.rs, crates/nova_events/src/engine.rsNovaScenarioPluginA scenario is handlers = event + filters + actions over NovaEventWorld; the generic queue/dispatch (EventHandler) is nova_events.
Scenario events, filters, actions (modding events)nova_scenariocrates/nova_scenario/src/events.rs, crates/nova_scenario/src/filters.rs, crates/nova_scenario/src/actions/mod.rsEventConfig, EventFilterConfig, EventActionConfigOne dispatch enum each; actions fan out to the flow/mission/sequence/ship/spawn/timer/view submodules beside mod.rs.
Scenario variables, expressions, watchesnova_scenariocrates/nova_scenario/src/variables.rs, crates/nova_scenario/src/world.rsVariableExpressionNode, NovaEventWorldTyped literals + expression tree (VariableConditionNode for filters); watches sample typed world queries into variables.
Scenario objects (asteroid, spaceship, beacon, crate, light, anchor)nova_scenariocrates/nova_scenario/src/objects/mod.rs, crates/nova_scenario/src/actions/spawn.rsScenarioObjectsPlugin, ScenarioObjectKindOne module per kind under objects/; the spawn action dispatches on the kind enum.
Scenario loading, lifetime scoping, teardownnova_scenariocrates/nova_scenario/src/loader/mod.rs, crates/nova_scenario/src/loader/lifecycle.rsScenarioLoaderPluginLoadScenario/UnloadScenario observers; everything tagged ScenarioScopedMarker dies at teardown; scenario_is_live gates the ship sets.
Mod formats, bundles, portalnova_mod_format, nova_modding, nova_assetscrates/nova_mod_format/src/lib.rs, crates/nova_modding/src/lib.rs, crates/nova_assets/src/portal/mod.rsBundleManifest, Content, PortalPluginEngine-free serde wire types -> RON asset loaders -> portal fetch/verify/install. The static portal is generated by scripts/gen-portal.py over webmods/.
Content generation (base RON, builders, lint)nova_authoringcrates/nova_authoring/src/cli.rs, crates/nova_authoring/src/generation.rscli::maincargo run content gen serializes the base_content builders into the committed base *.content.ron; content lint validates any content tree. Never hand-edit generated RON.

Interface

ConceptCrate(s)Key filesEntry symbolOrientation
NOVA OS (terminal, shell, ship computer apps)nova_os, nova_os_uicrates/nova_os/src/command.rs, crates/nova_os/src/app.rs, crates/nova_os_ui/src/lib.rsNovaOsUiPluginPure model in nova_os (NovaOsCommandRegistry, NovaOsAppRuntime); the Tab CRT monitor and the map/ship apps in nova_os_ui.
Keybinds: the action table, rebinding, the capturenova_input, nova_menucrates/nova_input/src/registry.rs, crates/nova_input/src/poll.rs, crates/nova_menu/src/settings.rsInputBindings, InputSourcesOne table of named actions; each owner registers its own defaults, every rig is BUILT from it, and every rebind surface reads it. Settings’ Controls tab takes the next press through InputSources; overrides persist in settings_store.
Flight HUD widgetsnova_hudcrates/nova_hud/src/lib.rsNovaHudPluginOne module per instrument (crosshairs, ammo, markers, comms, keybind dock); reads the ship, never drives it.
Main menu, menu backdropsnova_menucrates/nova_menu/src/lib.rs, crates/nova_menu/src/ambience.rsNovaMenuPluginThe backdrop is a random menu_backdrop-flagged scenario drawn live (load_menu_ambience); NOVA_MENU_BACKDROP pins one id for capture.
Shared UI theme, widgets, skinsnova_uicrates/nova_ui/src/lib.rs, crates/nova_ui/src/widget/mod.rsNovaUiPluginTheme tokens, the UiSkin switch, and the widget factories every UI-drawing crate consumes.
Ship editor, link points, placementnova_editor, nova_shipcrates/nova_editor/src/lib.rs, crates/nova_editor/src/snap.rs, crates/nova_ship/src/sections/link_points.rsNovaEditorPluginSandbox build scene; snap_placement mates socket frames; the editor solver decides or refuses a drop.

Tooling

Depth: Automation harness, Measuring performance and Building and running.

ConceptCrate(s)Key filesEntry symbolOrientation
Automation harness, autopilot scripts, screenshot capturenova_autopilot, nova_debugcrates/nova_autopilot/src/autopilot.rs, crates/nova_debug/src/harness.rsAutopilotPluginEnv-armed step driver (NOVA_AUTOPILOT, NOVA_CAPTURE); Nova presets and the shoot capture idiom live in the debug harness module.
Probe, run reports, what an example claimsnova_probe, nova_probe_clicrates/nova_probe/src/capabilities/mod.rs, crates/nova_probe/src/contract.rs, crates/nova_probe_cli/src/native.rsNovaProbePluginOne bundle wires every capability; probe run/scenario/report (subcommands of the game binary, debug feature) spawn and grade runs. Web capture app: crates/nova_perf_web/src/main.rs.
Frame cost, scene census, the capture windownova_probecrates/nova_probe/src/capabilities/frametime.rs, framecost.rs, census.rsnova_frametime, nova_framecost, nova_censusWall-clock deltas over a fixed window, plus where the milliseconds went and what the scene contained. Knob table: cargo doc -p nova_probe.
World-state snapshot (read the world, not a render)nova_probecrates/nova_probe/src/capabilities/snapshot.rsnova_snapshot, probe_snapshotOne JSON object per snapshot: ships, sections, fixtures, weapon state, rounds in flight. Sorted and rounded, so two snapshots of one frozen frame are byte-identical.
WFC arena, generated hullsexamplesexamples/playable/wfc_arena.rs, examples/playable/shared/wfc.rswfc_hullWave-function collapse over real section prototypes into flyable hulls; the arena’s lobby/pause/result match flow sits in examples/playable/wfc_arena/.
Debug tooling (inspector, overlays, F12 screenshots)nova_debugcrates/nova_debug/src/lib.rsDebugPluginCompiled only under the debug feature; F11 overlay toggle, F12 screenshot, --norender, --debugdump.
Web preview, this book at /dev/scripts, webscripts/serve-web.sh, scripts/preview-web.sh, web/webpack.config.jsserve-web.shLive-serves site + /play/ + /mods/ + this book at /dev/, all watched; the preview script builds the static deploy shape.