This guide walks you through deploying your first GeoEngine worker from start to finish. Every command is ready to copy and paste — just follow the steps in order. A couple of surprises are built in along the way, so don’t skip ahead.Documentation Index
Fetch the complete documentation index at: https://docs.nikaplanet.com/llms.txt
Use this file to discover all available pages before exploring further.
This guide assumes you have already installed GeoEngine and logged in. If you haven’t, complete the Installation & Setup guide first.
Introduction
We will be deploying a simple geoprocessing worker that creates a grid around a vector input. The script is written in Python.Step 1 — Download the Starter Script
Download the starter worker script and save it in an isolated folder somewhere on your machine — your home directory or Desktop works fine.- macOS
- Windows
- Linux
For this example, we will assume you created a directory in
/Users/<user>/Downloads/grid-creator. Place the script into this directory.grid-creator in your current directory.
Step 2 — Navigate Into the Directory
Step 3 - Initialise the Worker
First, you have to generate the worker artifact templates. Run the following in the same terminal.--env flag to create a Python-centric dependencies template. If you were to use an R script, use --env r instead.
When GeoEngine asks whether to create a tests/ folder, choose Yes. If you skipped it, the testing step below shows the exact files to create.
Step 4 — Inspect the Files
Take a moment to look at what’s inside before running anything:Main Script
grid_creation.py— the Python script that does the actual geoprocessing work
GeoEngine Worker Configurations
The following files can be edited to customize the worker:pixi.toml— declares all the Python/conda dependencies GeoEngine will install into the Docker containergeoengine.yaml— the worker configuration: its name, version, local tag, command, and inputs
GeoEngine Worker Build Artifacts
The following files are automatically generated by GeoEngine, and should not be edited unless you know what you’re doing:.dockerignore— tells Docker which files to ignore when building the imagegeoengine.lock- the ID of the worker (do not touch this)tests/— local worker test scaffold, if you chose to create it during init
Dockerfile is generated during geoengine apply for normal Python/R workers. Once it exists, treat it as a GeoEngine-managed build artifact.
Step 5 - Wire up the Script
Ensure that your script has an argparser set up. If you look at the script, you will notice it is already done. So now, we just need to wire up the config files to match the script.Add Dependencies
Open uppixi.toml in an editor of your choice.
Here, you can edit the [workspace] section if you wish. This will not be reflected anywhere, but is just a mere requirement of Pixi.
You will notice an empty [dependencies] section. The GeoEngine runtime image already includes common geospatial packages such as GDAL, pandas, NumPy, GeoPandas, and Shapely, which are sufficient for this script. If your own worker needs extra conda-forge packages, add only those extras here.
Edit the Config File
Open upgeoengine.yaml in an editor of your choice.
Here, you will define the worker’s details: its name, description, local tag, command, and input parameters.
- The template creates the worker
namebased on your directory folder, but feel free to change it as you wish. - The
versionfield is the cloud-facing semantic version. For now you can leave it at1.0.0. - The
local_tagfield labels this local production build. Use it to provide short but informative information about the local version. - The
descriptionfield will be write-up on your worker’s workings. Optional, but good to have. - The
commandsection details out the running requirements of your worker. The inputs should match the arguments set up in the argparser in your script. - Inputs marked with
output: trueare writable output paths. Other file and folder inputs are mounted read-only.
geoengine.yaml.
Step 6 — Apply the Worker Locally
First, run the semantic config checks:pixi.toml.
When it finishes, you should see output like this:
grid-creator directory:
Step 7 — Add a First Worker Test
Before opening GIS, add a tiny local contract test. This gives you a repeatable way to prove the worker still builds a grid after future edits. Iftests/fixtures/ does not exist yet, create it. Then add a file at tests/fixtures/small_extent.geojson:
tests/geoengine.test.yaml with this first smoke test:
geoengine run --actor CLI --json. The fixture path is resolved from tests/, and the output path is created under .geoengine-test/square-grid-smoke/.
Step 8 — GIS Testing
If you want to run this worker from QGIS or ArcGIS Pro, install the local GIS plugin once:- QGIS
- ArcGIS Pro
Enable the Plugin in QGIS
Aftergeoengine setup plugins --qgis installs the plugin, enable it inside QGIS once:- In the QGIS top bar, click Plugins > Manage and Install Plugins…
- Go to the Installed tab
- Find GeoEngine in the list and check the box next to it
- Close the dialog
You only need to enable the plugin once. Future applies and updates will not require you to do this again.
Processing Toolbox
The GeoEngine plugin should now be available in the Processing Toolbox. Open it from the top bar Processing > Toolbox.- macOS
- Windows
- Linux
Alternatively, you can use the short cut
⌥+⌘+T.Step 9 — Run the Worker from GIS
- QGIS
- ArcGIS Pro
In the Processing Toolbox, expand GeoEngine and find grid-creator (*latest). Double-click it to open the tool dialog.Load a vector layer as the Input Layer — any polygon or line layer you have on hand works for a first test run. You can even load in a vector file. Click Run.GeoEngine executes the script inside the Docker container and streams the output back to QGIS. When it finishes, a result layer will appear in your Layers panel and render on the map canvas.
Step 10 — Push to the Cloud
Once you’re happy with how the worker runs locally, publish it so your whole team can access it. Pushing requires a production apply, so first make suregeoengine.yaml has a valid version and local_tag, then rerun the local checks:
local_tag and publishes it with the semantic version from geoengine.yaml. If you have access to multiple teams, you will be prompted to select the team you wish to push to.
After pushing, the worker is available to everyone in your Nika organisation — in QGIS, ArcGIS Pro, and the Nika web platform — without them needing to run
geoengine apply themselves.Next Steps
You’ve gone from a zip file to a live cloud-deployed geoprocessing worker. Here’s where to go from here:- Running Workers in ArcGIS Pro & QGIS — inputs, outputs, and layer handling in detail
- Designing Worker Tests — fixtures, expected outputs, and semantic comparisons
- Versioning — how to version, tag, and roll back workers
- Cloud Push & Deployment — advanced push options and CI/CD integration