A concise, readable text-pipeline grammar for QGIS geoprocessing.
Project description
niva
QGIS from the command line. A concise, readable grammar for QGIS geoprocessing — for people who don't want to write PyQGIS. Easy wins every time.
Ever get tired of clicking? Write a whole pipeline on one line — friendly verbs running on QGIS's own Processing algorithms underneath:
load roads.gpkg | buffer 100m dissolve | clip city.gpkg | save roads_local.gpkg
or even
# ── TEST 24 | add then remove vertices | densify → smooth → simplify
load "{data}/collected.gpkg|layername=park_lines" | densify 5m | smooth iterations=2 | simplify 10 | save /tmp/niva_validation/out/s3_24.gpkg
What it does
Niva turns QGIS automation from PyQGIS code into a readable single lines of text.
- Runs in QGIS's own Python
- Reaches any of its ~878 algorithms
- Near-zero dependencies on other packages. We're trying to stay within the python standard library.
- ~45 friendly verbs → real QGIS algorithms, across vector geometry, overlay, attributes, raster or use
runto any of the ~878 with no dedicated verb alias;describeshows their parameters. Every alias is validated against the installed QGIS. - Discoverable —
describe <verb>ends with a runnable example;search <keyword>fuzzy-finds functions across the verbs and QGIS ; anddocs <keyword>emits the full reference for every match — save it out withto=<file>. And more! - Databases via named QGIS connections — read (
load @conn.table,sql @conn "SELECT …"), write (save @conn.table, fail-closed withmode=create|replace|append), and analyze server-side (non-SELECTsql @conn "CREATE TABLE … AS SELECT …"). Credentials never leave QGIS. - Provenance for free — every
saverecords processing steps into metadata;assesswrites data-quality reports; the run journal echoes the exactprocessing.run(…)for each step. - Composable — chain stages with
|, compose .niva files withcall mypipeline.niva, and export a flow to a standalone PyQGIS script (niva export) or import one back. - It's just PyQGIS under the hood. - Utility verbs beyond QGIS —
notify(ntfy push when a long job finishes),email(SMTP, Gmail-aware),catalog(recurse a directory and inventory every geospatial dataset — CRS, extent, fields, bands — to a Markdown report),show(list the loadable layers/tables at a file, directory,@conn, or remote WFS/WMS/ArcGIS REST/XYZ URL — name, type, format, ready-to-load source), andinfo(inspect the local QGIS environment — the registered@connconnection names across every profile, providers, versions). Credentials fornotify/emailcome only from the environment, never the flow text.
Screenshots
niva in the QGIS plugin dock and on the command line — see docs/screenshots.md.
Docs
New here? Start with the Quick start.
- Quick start — install & run niva, in QGIS or as a CLI on QGIS's own Python
- User Guide — install & run niva inside QGIS and standalone, configuration, scratch space, troubleshooting
- Reference — every verb, alias, option, type, env var, CLI command, and Python entry point · Algorithm appendix — all 878 QGIS algorithms with parameters & descriptions
- Cookbook — 50 worked recipes, including spatial SQL for SpatiaLite and PostGIS
- FAQ — what libraries you need, how to run niva, scratch space, databases
- Template projects — author a QGIS project once (layout + styles), reuse it against fresh data with
project from-template= - Testing — platform support (QGIS 4.0.3 & 3.44 LTR), running the suite, and the test
.niva-companion rule (per-run detail:tests/TESTING_LOG.md) - About & goals · Plugin · Publishing a QGIS plugin — a reusable playbook · Verb ↔ algorithm map
- Design & risk docs — PRD, architecture, grammar, security, the
Oscarfailure register - CHANGELOG
📘 The whole guide (User Guide + Reference + Cookbook + FAQ + the 878-algorithm appendix) is also one PDF: niva-guide.pdf (also attached to the latest release; rebuild with python3 scripts/build_guide_pdf.py, which needs pandoc + a LaTeX engine).
License
GPLv3 — consistent with the QGIS ecosystem (niva builds on PyQGIS, a GPL library). Not yet on PyPI; install from source or the plugin zip.
Project details
Release history Release notifications | RSS feed
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 qgis_niva-0.63.2.tar.gz.
File metadata
- Download URL: qgis_niva-0.63.2.tar.gz
- Upload date:
- Size: 16.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41481e303eb3d372d60087d64d0058fa7bf60926acfba6767107babf4da1afdd
|
|
| MD5 |
2e2fa83860ce1820764b61e9edb1ac07
|
|
| BLAKE2b-256 |
96ba41a64c29c90e119c58e04058a2a8f90e7cb55f79b80cceded4105a359a69
|
File details
Details for the file qgis_niva-0.63.2-py3-none-any.whl.
File metadata
- Download URL: qgis_niva-0.63.2-py3-none-any.whl
- Upload date:
- Size: 422.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc4a2914a48e56668d090ffe113a516a9eb55a6b8d95c2650b0819ffd0983991
|
|
| MD5 |
819b43d0e92332a13fba95c9cad7655d
|
|
| BLAKE2b-256 |
0739e0b4dab5166fe625f3f4873c6f659e6c0a94545d9a70458615074372c37e
|