Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

wandelbots-nova (Python SDK)

PyPI version License Build status Ask DeepWiki

📚 New to the SDK? Explore the DeepWiki documentation for architecture guides and tutorials. You can also chat with it to get code examples, detailed explanations, and answers to your questions.

This library provides an SDK for the Wandelbots NOVA API.

The SDK will help you to build your own apps and services using Python on top of Wandelbots NOVA and makes programming a robot as easy as possible.

417768496-f6157e4b-eea8-4b96-b302-1f3864ae44a9.webm

Table of Contents

Overview

Wandelbots NOVA OS is a robot-agnostic operating system that enables developers to plan, program, control, and operate fleets of six-axis industrial robots through a unified API, across all major robot brands. It integrates modern development tools like Python and JavaScript APIs with AI-based control and motion planning, allowing developers to build automation tasks such as gluing, grinding, welding, and palletizing without needing to account for hardware differences. The software offers a powerful set of tools that support the creation of custom automation solutions throughout the entire automation lifecycle.

Prerequisites

  • A running NOVA instance (Get a Wandelbots NOVA account on wandelbots.com)
  • Valid NOVA API credentials
  • Python >=3.12

Quickstart

  1. Install the SDK using pip or set up a local uv project with extras for visualization. Refer to the Installation section for both options.
  2. Copy .env.template to .env and fill in the base URL and access token for your NOVA deployment. Details are covered in Configure environment variables.
  3. Run an example to validate the setup, e.g. uv run python examples/start_here.py. Install the rerun extras and execute uv run download-models if you want interactive 3D visualization out of the box.

Installation

Install with pip

Install the library using pip:

pip install wandelbots-nova

Install a nightly build

Every commit on main is published as a prerelease package. Install the newest nightly build:

pip install --pre --upgrade wandelbots-nova

Nightly versions use the format 5.11.0.post20260914.dev123. Pin a specific build when you need reproducible results:

pip install wandelbots-nova==5.11.0.post20260914.dev123

Browse all available versions on the PyPI release history or download wheel and source-distribution files from the GitHub Releases page.

Install with uv and rerun visualization

Install uv on your system.

Initialize a new uv project with the following command.

uv init

Install the library with the nova-rerun-bridge extra to use the visualization tool rerun. See extension README.md for further details.

uv add wandelbots-nova --extra nova-rerun-bridge

Download the robot models to visualize them in the rerun viewer.

uv run download-models

Configure Environment Variables

Copy the provided .env.template file and rename it to .env:

cp .env.template .env

Open the .env file in a text editor and fill in the values. Here's what each variable does:

Variable Description Required Default Example
NOVA_API Base URL or hostname of the Wandelbots NOVA server instance Yes None https://nova.example.com or http://172.0.0.1
NOVA_ACCESS_TOKEN Pre-obtained access token for Wandelbots NOVA (cloud or self-hosted deployments) Yes* None eyJhbGciOi...

Note:

  • NOVA_API is mandatory in every deployment. Always point it to the NOVA base URL you are targeting.
  • NOVA_ACCESS_TOKEN is the supported authentication mechanism. It is mandatory for the Wandelbots Cloud environment; for self-hosted deployments generate and supply a token with the required permissions.
  • Username/password authentication (NOVA_USERNAME/NOVA_PASSWORD) is deprecated and no longer supported.

Using the SDK

API essentials

Import the library in your code to get started.

from nova import Nova

You can access the automatically generated NOVA API client using the api module.

from nova import api

Curated examples in this repository showcase typical SDK workflows:

  1. Basic usage: start_here.py
  2. Robot movement and I/O control: plan_and_execute.py
  3. Collision-free movement: collision_setup.py
collision_free
  1. Multiple robot coordination: move_multiple_robots.py
  2. 3D visualization with rerun: welding.py

Note: Install rerun extras to enable visualization

pointcloud
  1. Custom TCPs (Tool Center Points): visualize_tool.py
trajectory
  1. Custom mounting with multiple robots: robocore.py
thumbnail
  1. Merge trajectories with blending: merge_trajectories.py

  2. Kinematic configuration: kinematic_configuration.py

NOVAx

NOVAx is an app framework for building server applications on top of Wandelbots NOVA. It provides common core concepts like the handling of programs and their execution.

You can create a new NOVAx app using the NOVA CLI generator:

nova app create "your-nova-app" -g python_app

For more information on using NOVAx see the README. Explore this example to use the NOVAx entry point.

Important: A @nova.program function is registered once the module that defines it is imported. NOVAx handles this for you when you enable directory scanning via programs_dir — see Registering programs below.

Registering programs

Programs register themselves with a global registry when decorated with @nova.program, so NOVAx just needs the modules that define them to be imported. There are three ways to get them registered, and they can be combined:

  • Directory scanning: when you pass programs_dir, NOVAx scans that directory and imports every .py file under it (recursively), so dropping a new file in is enough — no manual import needed. Files whose name starts with _ (e.g. __init__.py) are skipped, and a missing directory is ignored. It is off by default; configure it via the constructor:

    from nova import Novax
    
    Novax(app)  # no scanning (default)
    Novax(app, programs_dir="my_pkg/robot_programs")  # scan a directory
    Novax(app, programs_dir=None)  # explicit: no scanning
    
  • Plain import: any program imported elsewhere (inside or outside programs/) is still registered.

    import my_pkg.special_program  # noqa: F401  (registers on import)
    
  • Explicit: novax.register_module("my_pkg.programs") imports a module/file and registers its programs on demand.

For local development you can serve everything from a short script without any FastAPI boilerplate:

from nova import Novax

Novax(programs_dir="programs").serve(port=3000)  # scan ./programs and serve

Development

To install development dependencies, run

uv sync --extra "nova-rerun-bridge"

Formatting

uv run ruff format
uv run ruff check --select I --fix

Yaml linting

docker run --rm -it -v $(pwd):/data cytopia/yamllint -d .yamllint .

Branch versions for testing

When working with feature branches or forks, it can be helpful to test the library as a dependency in other projects before merging. You can specify custom sources in your pyproject.toml to pull the library from a specific branch:

Using PEP 621-style table syntax:

wandelbots-nova = { git = "https://github.com/wandelbotsgmbh/wandelbots-nova.git", branch = "fix/http-prefix" }

Using PEP 508 direct URL syntax:

wandelbots-nova @ git+https://github.com/wandelbotsgmbh/wandelbots-nova.git@fix/http-prefix

Release process

Branch behaviour overview

Branch Purpose Published to Example version
main Stable releases and a nightly for every commit PyPI and GitHub Releases 5.11.0.post20260914.dev123
release/* LTS-releases, pre-releases or hotfixes for older lines PyPI (labeled with release suffix) v1.8.7-release-1.x
any other Development builds GitHub Actions e4c8af0647839...

Stable releases from main

Releases are managed by release-please:

  1. On every push to main, release-please opens/updates a release PR that bumps the version (derived from Conventional Commits) and updates the changelog.
  2. Merging that release PR tags the release, then a source distribution and wheel are built and uploaded to PyPI.
  3. A GitHub release is created with the release assets.

Nightly builds from main

Every commit pushed to main also produces a uniquely versioned nightly package. The nightly workflow publishes the wheel and source distribution to PyPI, stores them as a GitHub Actions artifact for 30 days, and creates an immutable GitHub prerelease linked to the source commit.

Use the GitHub Releases page to list nightly builds and download their files, or use the PyPI release history to see stable and nightly package versions together.

LTS releases from release/\*

If you're on older major versions or under a special LTS contract:

  1. Use (or create) a branch like release/1.x, release/customer-foo, etc.
  2. Every commit to these branches triggers the release-branch build workflow, which publishes an alpha build to PyPI.
  3. Versions include a date/commit suffix to prevent collisions, e.g. v1.8.7.a2026072803

Create a dev build (manual)

Need a temporary test build? Use GitHub actions:

  1. Go to the actions tab.

  2. Find Nova SDK: Build dev wheel and click Run workflow.

  3. Select a branch and trigger the job.

  4. After completion, open the Installation step to copy the ready-to-use pip install command:

        pip install "wandelbots-nova @ git+https://github.com/wandelbotsgmbh/wandelbots-nova.git@<commit>"
    

Alternatively, trigger the same workflow from your terminal and wait for the install string. This requires the authenticated GitHub CLI (gh auth login) and a pushed feature branch (not main or release/*):

uv run dev-wheel

It dispatches the workflow for the current branch, watches the run to completion, and prints the ready-to-use pip install command pinned to the built commit.

Additional resources

Release files for wandelbots-nova 6.0.0.post20260925.dev13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wandelbots-nova 6.0.0.post20260925.dev13
File Size Uploaded
wandelbots_nova-6.0.0.post20260925.dev13.tar.gz 13.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for wandelbots-nova 6.0.0.post20260925.dev13
File Interpreter ABI Platform
wandelbots_nova-6.0.0.post20260925.dev13-py3-none-any.whl Python 3 none any Details

Total release size: 26.1 MB

Release files / wandelbots_nova-6.0.0.post20260925.dev13.tar.gz

Download URL wandelbots_nova-6.0.0.post20260925.dev13.tar.gz
Size 13.0 MB
Tags Source
SHA-256 checksum
How to use checksums
edcf8b774ab50030f9e938bfd841383d97c5c6495be57caf87a2803c892b4bb9
BLAKE2b-256 checksum
How to use checksums
db8452630e2d4abd169c2d33c2cd9e5df8ee78c01d385cb120b545b3fe593cfd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wandelbots_nova-6.0.0.post20260925.dev13-py3-none-any.whl

Download URL wandelbots_nova-6.0.0.post20260925.dev13-py3-none-any.whl
Size 13.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
161ffca9fb54d50e8d3c2e0590f5a0e4f6942ed300dfff4c044bd502904ed21b
BLAKE2b-256 checksum
How to use checksums
b7b19821a2fbad5eb69017c2d643c288f83d33c8eb30330d41d28bca7340993c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

6.0.0

2 release files

5.11.0

2 release files

5.10.0

2 release files

5.9.0

2 release files

5.8.1

2 release files

5.8.0

2 release files

5.7.6

2 release files

5.7.5

2 release files

5.7.4

2 release files

5.7.3

2 release files

5.7.2

2 release files

5.7.1

2 release files

5.7.0

2 release files

5.6.3

2 release files

5.6.2

2 release files

5.6.1

2 release files

5.6.0

2 release files

5.5.0

2 release files

5.4.2

2 release files

5.4.1

2 release files

5.4.0

2 release files

5.3.0

2 release files

5.2.0

2 release files

5.1.4

2 release files

5.1.3

2 release files

5.1.2

2 release files

5.1.1

2 release files

5.1.0

2 release files

5.0.1

2 release files

5.0.0

2 release files

4.13.0

2 release files

4.12.1

2 release files

4.12.0

2 release files

4.11.3

2 release files

4.11.2

2 release files

4.11.1

2 release files

4.11.0

2 release files

4.10.1

2 release files

4.10.0

2 release files

4.9.0

2 release files

4.8.1

2 release files

4.8.0

2 release files

4.7.1

2 release files

4.7.0

2 release files

4.6.2

2 release files

4.6.1

2 release files

4.6.0

2 release files

4.5.1

2 release files

4.5.0

2 release files

4.4.0

2 release files

4.3.2

2 release files

4.3.1

2 release files

4.3.0

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.4

2 release files

4.1.3

2 release files

4.1.2

2 release files

4.1.1

2 release files

4.1.0

2 release files

4.0.3

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.6.7

2 release files

3.6.6

2 release files

3.6.5

2 release files

3.6.4

2 release files

3.6.3

2 release files

3.6.2

2 release files

3.6.1

2 release files

3.6.0

2 release files

3.5.4

2 release files

3.5.3

2 release files

3.5.2

2 release files

3.5.1

2 release files

3.5.0

2 release files

3.4.3

2 release files

3.4.2

2 release files

3.4.1

2 release files

3.4.0

2 release files

3.3.4

2 release files

3.3.3

2 release files

3.3.2

2 release files

3.3.1

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.19.1

2 release files

2.19.0

2 release files

2.18.3

2 release files

2.18.2

2 release files

2.18.1

2 release files

2.18.0

2 release files

2.17.1

2 release files

2.17.0

2 release files

2.16.3

2 release files

2.16.2

2 release files

2.16.1

2 release files

2.14.1

2 release files

2.14.0

2 release files

2.13.0

2 release files

2.12.2

2 release files

2.12.1

2 release files

2.12.0

2 release files

2.11.0

2 release files

2.10.0

2 release files

2.9.0

2 release files

2.8.7

2 release files

2.8.6

2 release files

2.8.5

2 release files

2.8.4

2 release files

2.8.3

2 release files

2.8.2

2 release files

2.8.1

2 release files

2.8.0

2 release files

2.7.4

2 release files

2.7.3

2 release files

2.7.2

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.3

2 release files

2.6.2

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.24.0

2 release files

1.23.0

2 release files

1.22.0

2 release files

1.21.0

2 release files

1.20.0

2 release files

1.19.0

2 release files

1.18.4

2 release files

1.18.3

2 release files

1.18.2

2 release files

1.18.1

2 release files

1.18.0

2 release files

1.17.1

2 release files

1.17.0

2 release files

1.16.0

2 release files

1.15.3

2 release files

1.15.2

2 release files

1.15.1

2 release files

1.15.0

2 release files

1.14.2

2 release files

1.14.1

2 release files

1.14.0

2 release files

1.10.0

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.4

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.53.1

2 release files

0.53.0

2 release files

0.52.0

2 release files

0.51.0

2 release files

0.50.3

2 release files

0.50.2

2 release files

0.50.1

2 release files

0.50.0

2 release files

0.49.0

2 release files

0.48.1

2 release files

0.48.0

2 release files

0.47.9

2 release files

0.47.8

2 release files

0.47.7

2 release files

0.47.6

2 release files

0.47.5

2 release files

0.47.4

2 release files

0.47.3

2 release files

0.47.2

2 release files

0.47.1

2 release files

0.47.0

2 release files

0.42.1

2 release files

0.42.0

2 release files

0.41.0

2 release files

0.40.1

2 release files

0.40.0

2 release files

0.39.1

2 release files

0.39.0

2 release files

0.38.3

2 release files

0.38.2

2 release files

0.38.1

2 release files

0.38.0

2 release files

0.37.1

2 release files

0.37.0

2 release files

0.36.2

2 release files

0.36.1

2 release files

0.36.0

2 release files

0.35.0

2 release files

0.34.0

2 release files

0.33.1

2 release files

0.33.0

2 release files

0.32.1

2 release files

0.32.0

2 release files

0.31.0

2 release files

0.30.1

2 release files

0.30.0

2 release files

0.29.0

2 release files

0.28.0

2 release files

0.27.2

2 release files

0.27.1

2 release files

0.27.0

2 release files

0.26.2

2 release files

0.26.1

2 release files

0.26.0

2 release files

0.25.3

2 release files

0.25.2

2 release files

0.25.1

2 release files

0.25.0

2 release files

0.24.1

2 release files

0.24.0

2 release files

0.23.0

2 release files

0.22.0

2 release files

0.16.0

2 release files

0.15.1

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page