Guides

Ghidra project persistence

Save, export and re-import the Ghidra project of a job.

Each job owns a Ghidra project on the shared ghidra_projects Docker volume. Three endpoints move that project in and out of the stack; they are exposed in the UI as the Save button in the job header and Download / Upload on the job list rows.

EndpointWhat it does
POST /api/v1/jobs/{id}/ghidra/saveForce-flush the in-memory programs of the job to disk. The runtime auto-saves at the end of each turn — use this before a teardown.
GET /api/v1/jobs/{id}/ghidra-project?format=tarStream <project>.gpr + <project>.rep/ as a gzip'd tarball — the whole project.
GET /api/v1/jobs/{id}/ghidra-project?format=gzf&program=<name>Stream a single program as a Ghidra Zip File (.gzf).
POST /api/v1/jobs/{id}/ghidra-projectRe-import a tarball or a .gzf (multipart file, ?mode=replace or new_job). new_job clones the job pointing at a fresh project; replace rewires the existing one.

.gar archives round-trip through File → Restore Project in the Ghidra GUI; .gzf files import into an existing project via File → Import File.

docker compose down -v wipes the ghidra_projects volume. Use Save → Download first to preserve analyst work across a full teardown. docker compose down (without -v) is safe.
Copyright © 2026