geodeploy
Command-line client and Python API for GeoDeploy — the self-hosted spatial data platform and geoportal builder.
Upload data, style it, build a portal and publish it, without opening a browser:
pip install geodeploy
geodeploy login https://geodeploy.example.org --token gdp_…
geodeploy upload roads.gpkg sites.csv dem.tif --wait
geodeploy portals create "Field sites 2026" --publish
No dependencies. Python 3.9+. Every request goes through the standard library, so installing this pulls in nothing else — and a QGIS plugin can vendor the same client without asking anyone to pip-install into QGIS.
If your shell cannot find geodeploy after installing, pip's scripts directory is not on your
PATH — python -m geodeploy works regardless, and pipx install geodeploy or a virtual
environment avoids it.
What it covers
- Uploads — shapefile, GeoPackage, GeoJSON, CSV (X/Y or WKT), GeoParquet, GeoTIFF. Many files in one command; the route is chosen per file, and anything over 48 MB goes direct to object storage in parallel presigned parts, so a multi-gigabyte upload survives a proxy that caps request bodies.
- Layers — list, inspect, rename, share (STAC / OGC API - Features opt-in), share links per tool, download, delete, restart a stalled ingest.
- Symbology — colour, opacity, outlines, dashes, markers, raster colormaps and stretches, plus
data-driven styling:
--color-field pop --classify jenks --classes 6 --ramp magma, proportional size, and attribute-driven 3D. Classification is computed by the instance, with the same code the portal editor uses, so the CLI and the editor can never disagree about a class. - Portals — create (web map, story map or catalog), arrange and style layers, folders, About page, assets, access tiers, publish, and a whole-configuration JSON round trip for version control.
- Everything else — external WMS/XYZ/WFS services, registering data already in PostGIS or the bucket, the public STAC and OGC API - Features catalog, ingest jobs, users, and instance administration (health, services, updates, backups, activity log).
Every command takes --json, where stdout is exactly one JSON document, and exit codes distinguish
authentication (3) from network (4) from server (5) so a scheduled job can alert on the right thing.
As a library
from geodeploy import Client
gd = Client("https://geodeploy.example.org", token="gdp_…")
result = gd.uploads.upload("roads.gpkg", wait=True)
portal = gd.portals.create("Roads")
gd.portals.add_layer(portal["id"], result.layer_id, "vector", {"color": "#e11d48"})
gd.portals.publish(portal["id"])
Typed exceptions (AuthError, PermissionError_, NotFoundError, ValidationError,
ServerError, TransportError, JobFailed), progress callbacks and cancellation on uploads, and a
swappable transport so a desktop application can route requests through its own network stack.
Documentation
Full guide: https://docs-geodeploy.kndev.org/cli/
Source and issues: https://github.com/bravemaster3/GeoDeploy
Licensed under the Apache License 2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file geodeploy-1.3.0.tar.gz.
File metadata
- Download URL: geodeploy-1.3.0.tar.gz
- Upload date:
- Size: 132.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56ff5cc699a9592e42afa03fe0631a550790221b8bc8d21d3756844c37963aff
|
|
| MD5 |
a0fb503e5a2d98cd3440dbad914df607
|
|
| BLAKE2b-256 |
ded909da059c013ecb7f50a37a0e004a6869fd6727b167165ed57841da66a2eb
|
Provenance
The following attestation bundles were made for geodeploy-1.3.0.tar.gz:
Publisher:
publish-cli.yml on bravemaster3/GeoDeploy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geodeploy-1.3.0.tar.gz -
Subject digest:
56ff5cc699a9592e42afa03fe0631a550790221b8bc8d21d3756844c37963aff - Sigstore transparency entry: 2461887725
- Sigstore integration time:
-
Permalink:
bravemaster3/GeoDeploy@3c768dcc9631e3e91408f1c1c2394917f9b65e5d -
Branch / Tag:
refs/tags/cli-v1.3.0 - Owner: https://github.com/bravemaster3
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-cli.yml@3c768dcc9631e3e91408f1c1c2394917f9b65e5d -
Trigger Event:
push
-
Statement type:
File details
Details for the file geodeploy-1.3.0-py3-none-any.whl.
File metadata
- Download URL: geodeploy-1.3.0-py3-none-any.whl
- Upload date:
- Size: 111.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c1deb9541d741baf841293cb2b73b8a569c5139106bfb82f19f88ed5177da07
|
|
| MD5 |
bc3210c7d9604477f94c64d1331c5f5d
|
|
| BLAKE2b-256 |
28e7396226e3fbc7d51a81daae3c109fa753100f03078b6e3ef04bc79902afbf
|
Provenance
The following attestation bundles were made for geodeploy-1.3.0-py3-none-any.whl:
Publisher:
publish-cli.yml on bravemaster3/GeoDeploy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geodeploy-1.3.0-py3-none-any.whl -
Subject digest:
1c1deb9541d741baf841293cb2b73b8a569c5139106bfb82f19f88ed5177da07 - Sigstore transparency entry: 2461887878
- Sigstore integration time:
-
Permalink:
bravemaster3/GeoDeploy@3c768dcc9631e3e91408f1c1c2394917f9b65e5d -
Branch / Tag:
refs/tags/cli-v1.3.0 - Owner: https://github.com/bravemaster3
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-cli.yml@3c768dcc9631e3e91408f1c1c2394917f9b65e5d -
Trigger Event:
push
-
Statement type: