Skip to content

Changelog

0.6.1 (2026-10-21)

Bug Fixes

  • peers: a run keeps PX4's store across a restart unless asked to start clean (#355) (9463732), closes #354

0.6.0 (2026-10-20)

Features

  • ci: a labelled PR touching a peer's folder flies that peer real (#337) (b9d4eea), closes #162
  • config: a catalog vehicle entry composes a base vehicle and its layers (#346) (877eae2), closes #331
  • peers: a declared peer's link reads the signals it names (#347) (03f82ae), closes #341
  • peers: the run joins a declared peer and PX4 SITL over a serial link it owns (#345) (60949e1), closes #342
  • vehicle: each rotor flies its own propeller values, not one shared set (#348) (f92a746), closes #185

Bug Fixes

  • peers: a package's pin file for a peer it registers breaks no run (#352) (a35b24a), closes #316

0.5.0 (2026-10-19)

⚠ BREAKING CHANGES

  • peers: a run's folder holds px4_sitl/console.log and px4_sitl/<date>/<time>.ulg in place of px4.log and ulog/, and kit/console.log in place of kit.log.

Features

  • peers: a peer states how it keeps time, and a run that can't keep it fails first (#336) (317ebfb), closes #325
  • peers: a project's container peer subclasses the public container peer (#333) (9cab39e), closes #306

Bug Fixes

  • px4: a run boots PX4 with no state an earlier run left (#328) (b5f43e5), closes #327

0.4.0 (2026-10-15)

⚠ BREAKING CHANGES

  • NewtonPhysics takes no step_actuators, and the examples library drops Rotors and rigid_body_wrench_batched. The nexus-rl GoTo env still imports the latter until it moves to the articulated plant.
  • core: a run with no verdict raises the public RunError (#324)
  • build: NexusPx4API is retired for NexusPx4API_1, which authors no airframe; nexus:airframe is an attribute of NexusPx4SitlAPI, declared on a Scope of its own, and a layer drops the peer by deactivating that Scope. build_from_launch takes no peers mapping, the receipt's px4 field is gone, Px4MavlinkController takes the run's instance in place of port and target_system, and KitPeer takes its pin in place of an image.

Features

  • api: a run writes its files to the folder the caller names (#323) (2a6617b), closes #320
  • assets: s3:// assets come through boto3 under nexus-uav[s3] (#326) (a4d9d62), closes #322
  • build: every role and peer builds from the vehicle's USD (#315) (46764ac), closes #261
  • core: a run with no verdict raises the public RunError (#324) (2c2c1d9), closes #321
  • every controller flies one plant on the vehicle's Newton motors (#319) (1c6afe6)

0.3.0 (2026-10-13)

⚠ BREAKING CHANGES

  • catalog: an installed package adds a catalog layer and its pin files (#313)

Features

  • catalog: an installed package adds a catalog layer and its pin files (#313) (cf422f4), closes #305

0.2.0 (2026-10-13)

⚠ BREAKING CHANGES

  • peers: PX4_DIR goes; set NEXUS_PX4_SITL_REF to a checkout's absolute path instead. A project's nexus.px4.ref becomes nexus.px4_sitl.ref, and the old name now fails the run.

Features

  • peers: every peer resolves its pin the same way (#309) (3b2b879), closes #304

Bug Fixes

  • loop: a run whose PX4 never starts lockstep fails (#308) (b6e5b57), closes #129
  • px4: a run's artifacts name the ULog PX4 wrote for that run (#310) (dc13009), closes #145

0.1.0 (2026-10-12)

⚠ BREAKING CHANGES

  • the import package is nexus_uav and the distribution nexus-uav.
  • sensors: every sensor decimates by one due-time rule (#294)
  • api: History.latest() is gone, and Signal.read gives a struct instance or an array without the leading axis.
  • sensors: Component.connect takes the links of the peers the class requires; SensorRun, Site and the scene's origin reader are gone, and a sensor's class takes the model and its site.
  • scene: --geo, Sim(geo=), LaunchConfig.set_geodetic_origin and the catalog's and receipt's geodetic_origin are gone, and a catalog scene names its USD file. An override layer moves a scene's origin.
  • recording: Sim and Sim.from_orchestrator take no observe argument.
  • sensors: Px4MavlinkController takes no gps_rate_hz; the GPS receiver's nexus:rate sets how often HIL_GPS goes out.
  • nexus_sim.Measurement is gone, and a controller's exchange takes (t, timeout).
  • a component schema that includes no role schema, or two, fails the build. A project's own schema includes one, such as NexusSensorRoleAPI.
  • a vehicle declares NexusPx4API and NexusPx4SitlAPI on a Scope under its root prim, named Controller by convention; a vehicle that declares them on its root prim fails the build.
  • Measurement has no state field; an estimator's estimate signal carries the vehicle's state.
  • each concept has one word, defined once on a Concepts page (#251)
  • Sim.controller is gone; a flight reads a component it built from the object it holds.
  • the hand-run ground stack and --stream go (#242)
  • packaging: import nexus_sim, not nexus.
  • guidance: Sim and Sim.from_orchestrator take no reached_m, final_hold_s or operator; a flight passes guidance= and reads sim.guidance.
  • px4: a script opens OffboardClient on the run's port map (#204)
  • actuators: the actuator seam splits into a command seam and a force seam (#205)
  • config: LaunchConfig loses six fields, and runtime.device rejects a device ordinal such as cuda:0.
  • actuators: a vehicle USD declares each rotor's propeller with NexusPropellerAPI on the rotor's rigid body. A vehicle that authors propeller:* attributes on its rotor joints no longer builds.
  • build: --px4, --px4-instance, Sim(px4=, px4_instance=), LaunchConfig.peers, Peers and Px4Peer are gone. A vehicle declares its PX4 SITL peer with NexusPx4SitlAPI, and a layer drops it to fly an external autopilot.
  • config: a catalog with a defaults block no longer loads, and Sim and nexus run require a vehicle and a scene.
  • core: Sim(control=), --control, LaunchConfig.control and set_control, and the catalog's px4 field are gone. A vehicle declares its controller in its USD.
  • core: nexus.EnvSample is no longer exported.
  • cli: --runtime leaves the command-line tool, LaunchConfig's runtime.backend and the empty isaacsim extra go, the isaacsim compose service and its image go, and nexus script runs only Kit-only asset scripts in the Kit image, with no nexus code inside.
  • config: ship two Astro Max vehicles in the catalog (#4)

Features

  • a component with no geometry sits on a scope prim of its own (#259) (1cbc90f), closes #258
  • actuators: each rotor declares its propeller on its rigid body (#166) (2668f83), closes #32
  • actuators: the actuator seam splits into a command seam and a force seam (#205) (1c9fb2c), closes #169
  • api: a script reads a signal's live value by its path, and the sim time (#287) (8d3e5e4), closes #280
  • api: export the component, registry and peer contracts (#277) (2ce4b9b), closes #44
  • api: the RL project imports only the public surface (#279) (80d4036), closes #53
  • assets: a photoreal catalog scene with static geometry (#153) (cda6cc7), closes #101
  • build: a run composes an override layer, and the peer flags go (#160) (b0e586a), closes #156
  • components declare typed signals, and the builder wires them once (#249) (eafeb68), closes #241
  • config: a project catalog extends the bundled one (#17) (b520f74)
  • config: a run names its vehicle and scene, and the catalog's defaults go (#154) (e3fc6f0), closes #34
  • config: ship two Astro Max vehicles in the catalog (#4) (32e1b2f), closes #3
  • core: scene ambient values resolve at build, and the Environment seam goes (#117) (087085c), closes #38
  • core: the loop runs each component's work as device and host stages (#120) (5180cd5), closes #39
  • core: the vehicle USD declares its controller, and --control goes (#151) (4faa4d1), closes #33
  • docs: the Benchmarking page plots each gated metric over the commits (#201) (1ded2b9), closes #81
  • each component's schema states its role (#260) (cb4fa3e), closes #257
  • each sensor's output is a signal of its own type, cameras included (#256) (10430fb), closes #149
  • guidance and control read an estimator's estimate (#252) (b4443f7), closes #228
  • guidance: guidance is a loop seam, the Operator protocol goes (#203) (d825885), closes #210
  • logging: an entity path names its process, component and instance (#193) (4d59000), closes #47
  • loop: each tick has one exact sim time, and its rows describe it (#290) (5122ce1), closes #229
  • peers: every peer ships a fake that speaks its link (#155) (0125759), closes #113
  • px4: a script opens OffboardClient on the run's port map (#204) (f2ff238), closes #194
  • px4: PX4 is a peer the run starts, built from its controller's pin (#119) (618fb70), closes #37
  • recording: the plant writes signals, and every history reads as records (#282) (149be06), closes #275
  • recording: the Recorder keeps each signal's history, and no component records itself (#273) (fd098f7), closes #250
  • recording: the recording holds every row, written from the Recorder's histories (#264) (722ff3b), closes #111
  • rendering: the Kit peer runs NVIDIA's image as pulled (#126) (32ebe1c), closes #124
  • scene: a scene's PhysicsScene prim holds its geodetic origin (#284) (9dca7ac), closes #281
  • sensors: a sensor's prim is a Newton site, and SensorRun goes (#283) (35b16ff), closes #278
  • sensors: sensors are declared by API schemas in the vehicle USD (#180) (1eed48b), closes #9
  • sensors: the IMU honours its prim's full transform on any body (#212) (c7bf2bd), closes #52
  • sensors: the in-graph sensors sample at their declared rates (#223) (9d74670), closes #51
  • the hand-run ground stack and --stream go (#242) (26c6b61), closes #42
  • usd: a schema plugin and an open registry for components (#140) (8d6d494), closes #31
  • usd: schemas evolve by version, and the build fails an unknown one (#176) (c79c3f2), closes #114

Bug Fixes

  • assets: a scene re-root keeps material bindings and shader links (#128) (1f238f1), closes #65
  • ci: a runner cancelled mid-start no longer outlives its run (#136) (a2b0d9b), closes #78
  • ci: an upload run holds back a red flight's docs recording (#197) (2e439e4), closes #95
  • ci: gate the rl leg by the kind of quantity each check reads (#68) (ab8dc8a), closes #15
  • ci: let an approved fork run check out the fork's code (#24) (7ab3a28)
  • ci: lint reds a pull request that stales nexus-rl/uv.lock (#207) (a984b80), closes #202
  • ci: the bench feed reads under a ListBucket grant, and the runner says so (#138) (80bc50c), closes #116
  • ci: the release pull request keeps both locks fresh (#183) (f63336b)
  • cli: launch the Kit container from an installed package (#22) (821a007), closes #12
  • config: the receipt records only what a run applies (#184) (02ea594), closes #173
  • docs: the docs and the config name only what the tree holds (#225) (2f6c819), closes #220
  • examples: goto_policy fetches its hosted policy from the catalog base (#67) (1445f6a), closes #66
  • examples: the acados extra names only packages PyPI serves (#192) (872045d), closes #182
  • examples: the PX4 gate forgives a logger cap line for any topic (#141) (3068275), closes #137
  • notices: name every file a foreign header marks; goto_env is Apache-2.0 (#227) (dc292cb), closes #219
  • orchestrator: capture the host-exchange graph before PX4 dials in (#61) (94009bc), closes #26
  • packaging: an installed nexus-sim pins the warp-lang CI flies (#127) (cec9165), closes #62
  • packaging: the wheel and sdist ship no CLAUDE.md (#240) (7613209), closes #217
  • px4: a late PX4 dial-in logs no ekf2 missing data line (#60) (cab8ef9), closes #57
  • px4: allowlist the missing-parameter message, not [param] (#23) (eb78bb9), closes #21
  • sensors: every sensor decimates by one due-time rule (#294) (f964a1b), closes #263

Performance Improvements

  • tests: fixture-vehicle tests share their builds, and the Kit fake stops at once (#232) (9224844), closes #209

Miscellaneous Chores

  • release: the first release is 0.1.0 and its README links resolve (#295) (2049b5e), closes #55

Code Refactoring

  • each concept has one word, defined once on a Concepts page (#251) (6d50ebb), closes #247
  • packaging: the import package is nexus_sim, imported as nx (#230) (c77617c), closes #216

Build System

  • publish as nexus-uav with the import package nexus_uav (#297) (0972f33), closes #296

Changelog

All notable changes to the project are documented here. This file is maintained automatically by release-please from Conventional Commit messages on main; release entries are prepended below as versions are tagged.