Ragnavoxel docs

Shipping

Packaging a game with the editor, what a package holds and how it finds its resources, CPU targets, the launcher's servers and releases, publishing, installing and the shared sign-in.

Packaging

ragnavoxel_editor --package            # build, then stage and pack
ragnavoxel_editor --package --no-build

The packager reads the [package] table of the project file and writes:

  • dist/<Name>-<version>-linux-x86_64/: the executable, its resources, the C++ runtime it links, <Name>.sh to start it, and manifest.json with the size, mode and SHA-256 of every file, for launchers that download only what changed;
  • dist/<Name>-<version>-linux-x86_64.tar.zst, with a .sha256 beside it.

A packaged game finds its assets/, shaders/ and anim/ beside its executable through rv::resourceDir (see Getting started); RV_ASSETS_DIR and its like override that.

CPU targets. A build compiled with -march=native runs only on CPUs with the build machine’s instruction sets, and the packager says so when it sees one. arch = "x86-64-v2" targets every x86-64 CPU from about 2009 on.

The launcher

The launcher installs, updates, checks, builds and starts games from a server, and publishes releases to one. With no arguments it opens its window; with a command it works in the terminal (help lists every command).

Servers

A server is a plain folder of files, reachable three ways:

Kind Address Notes
folder /srv/lostvale, ~/lostvale-server a local disk or a mounted share
ssh ssh:user@host:~/server, ssh://user@host:22/~/server your ssh keys or agent (never a password), one shared connection; the far machine needs a POSIX shell, cat, tail, tar and find
https https://releases.example.com/game/ read-only to the launcher; any web server in front of the folder; ca_file for a self-signed certificate

The folder’s layout:

index.toml                         the products, and each channel's version
products/<id>/<version>.toml       a release: its files, its build recipe, how it starts
objects/<ab>/<sha256>[.zst]        file contents by checksum, zstd-packed when that pays

Objects are shared between releases and products, so publishing or updating moves only what changed. A web server only has to serve these files; ranges resume big downloads when the server offers them.

Publishing

lostvale-launcher publish launcher/publish/lostvale.toml --to SERVER [--channel beta] [--dry-run]

A publish spec picks files from the checkout (git’s tracked files and untracked-but-not-ignored files, filtered by globs), maps in extra files, and carries the build recipe and launch command. Versions are the project’s own, stamped with the UTC time and commit, and .dirty when the working tree has uncommitted changes. A ready-made package from the editor publishes on its own channel and shares objects with the source release, so it costs only the binaries.

Installing

lostvale-launcher server add MYSERVER ssh:user@host:~/server
lostvale-launcher install lostvale
lostvale-launcher play lostvale

Products install into ~/.local/share/lostvale-launcher/library/<id>/ (the library can be moved in Settings). The launcher keeps its records in <id>/.launcher/ and only ever removes files it placed, so saves and the product’s own build folder survive updates and a plain uninstall. A stopped download resumes where it stopped. Source releases build on the player’s machine for their CPU and need cmake 3.25+, ninja, a C++20 compiler, glslc, git, pkg-config, curl, zip, unzip, tar and vcpkg (tools <id> checks them). Starting a product refuses a second copy while one runs.

One sign-in

~/.config/ragnavoxel/account.toml (mode 0600) is the sign-in shared by the launcher, the editor and the Gaddr Games website. When the account service writes a service account with a token, the launcher sends it as a bearer token to https servers.

Selling

Games on Ragnavoxel pay a flat 1.987% royalty on gross revenue and nothing else; see the Ragnavoxel page. Games made in any engine can be sold on the Gaddr Games store: see Sell with us.

Written from the engine's headers and source as of commit 02e81b2 (2026-11-01).