DevelopersEarly development
Build the
Everything you need to get Pulsar building, find your way around a workspace of hundreds of crates, and land your first change. The architecture is still moving, so the best time to shape it is now.
$ git clone --recursive https://github.com/Far-Beyond-Pulsar/Pulsar-Native$ cd Pulsar-Native# opens the voxel planet example in the editor$ just example voxel_planet
Needs Rust, just and (on Linux) a few system packages: see step 01
01 / Quick start
From clone to a running editor.
The repository is a large Cargo workspace whose plugins and renderer are git submodules, so a plain clone will not build: clone recursively.
Get the code
$ git clone --recursive https://github.com/Far-Beyond-Pulsar/Pulsar-Native# already cloned without --recursive?$ just submodule-init
Install the toolchain
Rust installs the pinned version from rust-toolchain.toml on first build, with clippy, rustfmt and the wasm target. Install just for the shortcuts below. On Ubuntu you also need:
$ sudo apt install -y gcc g++ clang libfontconfig-dev libwayland-dev \$ libwebkit2gtk-4.1-dev libxkbcommon-x11-dev libx11-xcb-dev \$ libssl-dev libzstd-dev vulkan-validationlayers libvulkan1
Build and run
$ just check # cargo check, fastest feedback$ just run # the editor$ just example voxel_planet# voxel_moon, voxel_desert and voxel_blocks are the other examples
Before you open a PR
$ just fmt # formats Pulsar-Native's own crates$ just clippy # warnings are errors$ just test # cargo test --workspace
A GPU with Vulkan, Metal or DX12 support is needed to run the editor. Tests that need a GPU are excluded from CI. The full command list is in the justfile.
02 / Where to contribute
Pick the layer that interests you.
You do not need to understand all of it. Each area has its own boundaries and its own documentation.
03 / The shape of it
The engine is a
factory for your game.
Pulsar does not run your game inside the editor. On export it generates a separate Rust crate holding your reflected types, blueprints, scenes and asset manifests, and that crate compiles on its own against only the runtime crates it uses. If it compiles, your data matches the engine.
The editor is built the same way, and an object's component is one typed value: edited in the inspector, ticked at runtime, mirrored to GPU rows and drawn by Helio.
Read the philosophycrates/corecrates/subsystemscrates/editorcrates/uicrates/agent-providerscrates/third-partyplugins/vendorcrates/renderer/helio04 / Anatomy of a plugin
Every object kind has the same five crates.
Learn one plugin and you can read them all. Hosts reach a plugin only through its root crate, and a disabled plugin is simply absent: its classes, features, settings and editors are not registered.
helio-<kind>-apihelio-pass-*<kind>_component<kind>_editor<kind>_plugin# beside the plugin's cratesid = "pulsar.fog" # the one stable identityname = "Fog"description = "Global and local fog media"enabled_by_default = truerequires = [] # plugins it cannot work withoutroot = "fog_plugin" # the root crate in this directory
Projects switch plugins in Pulsar.toml. First-party plugins live in their own Plugin_<Kind> repositories and are pinned into the main workspace as submodules. Start with the plugin system guide.
05 / Workflow
How a change gets in.
The day-to-day loop is short. The rules below are the ones that most often surprise new contributors.
just checkcargo check across the workspacejust build / releaseDebug or release build of the editorjust testcargo test --workspacejust clippyClippy with warnings deniedjust fmtFormat Pulsar-Native's own cratesjust conformanceInterpreted vs generated Rust, debug and releasejust submodule-initgit submodule update --init --recursivejust check-submodule-pinsEvery submodule pinned to a commit on its upstream main- 01Submodule changes merge dependency-firstMerge the plugin or Helio PR into its own main, re-pin the submodule to that commit, then merge the Pulsar-Native PR.
- 02Branch pushes do not run CI, PRs doA new push cancels the superseded run. Draft and docs-only PRs skip CI, so open a draft while you iterate.
- 03Linux is the gatefmt, clippy, guards and nextest run on Linux per PR. Windows and macOS compile checks run on main and nightly.
- 04TODOs need an issueA TODO comment must reference an issue (#123 or a URL). The check scans tracked source in the main repository.
- 05Rendering work loads the Helio skill firstAnything touching Helio, its plugins, WGSL, render graphs or GPU rows. Bug fixes and small changes count too.
06 / Read the design docs
The architecture is written down.
The repository keeps a design document for each subsystem next to the code, and they are kept current as systems change. They are the fastest way in.
ROADMAP.mdCRATES.mdENGINE_LIFECYCLE.mdPLUGIN_SYSTEM.mdECS.mdREFLECTION.mdRENDER_GRAPH.mdUI_CRATES.mdFILESYSTEM.mdCI.mdTHEMING.mdANIMATION.mdMore than thirty documents in total: browse the full .agents folder.
07 / Repositories
Where everything lives.
08 / Talk to us
Ask early. Design in the open.
For anything larger than a bug fix, start a conversation before the code. It saves everyone a rewrite while the architecture is still moving.