Datoviz: high-performance rendering for scientific data visualization
Project description
Datoviz
Datoviz is a GPU-powered visualization engine for interactive scientific data. Use it when dense points, images, meshes, volumes, annotations, linked panels, or custom scientific scenes need more control and performance than an ordinary plotting library provides.
Datoviz v0.4 provides a retained scene model, native Vulkan rendering, desktop and offscreen
presentation, reproducible capture, and direct use from C or Python. Python users call the generated
binding with import datoviz as dvz and pass NumPy arrays directly to supported data-upload APIs.
v0.4 Release Status
The v0.4-dev branch is the first v0.4 release candidate. The native C and Python/NumPy paths are
release-facing; experimental and deferred surfaces remain explicitly labeled throughout the
documentation.
| Surface | v0.4 status |
|---|---|
| Native C scene/app API | supported, with feature-specific gaps |
| Python API with NumPy adaptation and exact raw calls | supported |
| Offscreen rendering and capture | supported |
| Qt/PyQt hosted rendering | supported, optional provider |
| Retained visual families | supported/experimental by family |
| WebGPU/WASM browser path | experimental |
| Scene compute-to-render integration | experimental |
| DRP2 command streams and runtime internals | advanced/unstable |
| High-level plotting API | external/GSP |
See the detailed feature status, platform support, and v0.3 capability disposition before relying on an experimental or backend-specific feature.
Install
Once a v0.4 release candidate is published on PyPI, use the exact command from its release notes. A pre-release install will normally look like:
python -m pip install --pre datoviz
After the final v0.4 release, the normal command will be:
python -m pip install datoviz
Until packages are published for your platform, use the source build below. The full installation guide covers macOS, Linux, Windows, Python, and C/C++ integration.
Minimal Python Example
This deterministic example creates the scatter plot shown in the documentation: 10,000 random points with random colors and sizes on a dark background.
import ctypes
import numpy as np
import datoviz as dvz
N = 10_000
rng = np.random.default_rng(12345)
pos = np.zeros((N, 3), dtype=np.float32)
pos[:, :2] = rng.uniform(-1, 1, (N, 2))
color = rng.integers(0, 255, (N, 4), dtype=np.uint8)
color[:, 3] = 200
diameter = rng.uniform(4, 12, N).astype(np.float32)
scene = dvz.dvz_scene()
figure = dvz.dvz_figure(scene, 1280, 720, 0)
panel = dvz.dvz_panel_full(figure)
dvz.dvz_panel_set_background_color(panel, dvz.DvzColor(13, 18, 25, 255))
panzoom = dvz.dvz_panzoom(scene, None)
dvz.dvz_panel_bind_controller(panel, panzoom, dvz.DvzDimMaskFlag.DVZ_DIM_MASK_XY)
points = dvz.dvz_point(scene, 0)
dvz.dvz_visual_set_data(points, "position", pos)
dvz.dvz_visual_set_data(points, "color", color)
dvz.dvz_visual_set_data(points, "diameter_px", diameter)
style = dvz.dvz_point_style_desc()
style.aspect = dvz.DVZ_SHAPE_ASPECT_FILLED
style.stroke_width_px = 0
dvz.dvz_point_set_style(points, ctypes.byref(style))
dvz.dvz_visual_set_depth_test(points, False)
dvz.dvz_visual_set_alpha_mode(points, dvz.DVZ_ALPHA_BLENDED)
dvz.dvz_panel_add_visual(panel, points, None)
dvz.run(scene, figure, title="Datoviz")
Continue with the annotated Quickstart or browse the example gallery.
C And C++
Datoviz is a native C library. Installed packages expose headers and a CMake package for C and C++ applications:
find_package(datoviz CONFIG REQUIRED)
target_link_libraries(my_app PRIVATE datoviz::datoviz)
The public API uses C linkage and can be called directly from C++. See C/C++ integration and the generated C API reference.
Build From Source
Source builds require Git, CMake 3.21+, Ninja, just, Python 3.10+, a supported C/C++ compiler,
shader tools, and a Vulkan-capable runtime. Clone the active branch with its submodules, then build
and test:
git clone --branch v0.4-dev --recursive https://github.com/datoviz/datoviz.git
cd datoviz
just build
just test
python -m pip install -e .
Platform packages, compiler versions, Vulkan/MoltenVK requirements, and native Windows guidance are maintained in the installation guide. Contributors should also read CONTRIBUTING.md and BUILD.md.
Which Layer Should I Use?
| Need | Use |
|---|---|
| Python with Datoviz visuals and NumPy arrays | import datoviz as dvz |
| Native application or C/C++ integration | C scene/app API |
| Exact pointer/count form of the Python binding | datoviz.raw |
| Browser rendering for promoted examples | experimental WebGPU/WASM subset |
High-level functions such as scatter() or imshow() |
GSP/VisPy2 when available |
Datoviz v0.4 is the explicit engine layer: scenes, visuals, data uploads, controllers, windows, captures, and integration surfaces. The old high-level Datoviz Python plotting API is not part of v0.4; that role belongs to the developing GSP/VisPy2 layer. See Choose Your Layer for the complete comparison.
Documentation
- Get Started
- Examples and Gallery
- How-To Guides
- Feature Status
- Platform Support
- Python API
- C API Reference
- WebGPU/WASM Subset
- Changelog
- Citation
License And Credits
Datoviz is released under the MIT license. It is developed by Cyrille Rossant at the International Brain Laboratory, with support from the Wellcome Trust, Simons Foundation, and Chan Zuckerberg Initiative.
If you use Datoviz in research, follow the current citation guidance and repository metadata in CITATION.cff. The final v0.4.0 release is planned for archival with Zenodo and a version-specific DOI.
Datoviz builds on earlier open-source GPU visualization work including VisPy, Glumpy, Galry, and the Vulkan-based Datoviz releases. Development of v0.4 was assisted by OpenAI Codex for implementation, review, testing, documentation, and release preparation. All changes were directed, reviewed, and validated by the project maintainer.
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 Distributions
Built Distributions
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 datoviz-0.4.0rc1-py3-none-win_arm64.whl.
File metadata
- Download URL: datoviz-0.4.0rc1-py3-none-win_arm64.whl
- Upload date:
- Size: 10.0 MB
- Tags: Python 3, Windows ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d4484ff35c4e4ef9f6cd1a12ddf804ea1628d6f4bb0a710d5f6803356982657
|
|
| MD5 |
f065d4e554be1fb9d97336cf1360e5d9
|
|
| BLAKE2b-256 |
1066deb1fd9ee967b102ada52ef1989fedc9ca73857f62459f2617bcd43aeced
|
File details
Details for the file datoviz-0.4.0rc1-py3-none-win_amd64.whl.
File metadata
- Download URL: datoviz-0.4.0rc1-py3-none-win_amd64.whl
- Upload date:
- Size: 10.6 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47fc52f93674ef36ff48aa779fe00ce2643ba9d77fb17d5cbcc01b27a9727a15
|
|
| MD5 |
1808472f98477d9d5c946ff1140f78db
|
|
| BLAKE2b-256 |
ea45e0935bfd09402e753021fe24bdb24e72643c419ed2a77beb0ecfaf1f3840
|
File details
Details for the file datoviz-0.4.0rc1-py3-none-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: datoviz-0.4.0rc1-py3-none-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 19.0 MB
- Tags: Python 3, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f310133c604ef0348ca17a24454f62cea3f9687e2faaacd7701ac187ab988a2
|
|
| MD5 |
aad2c77205f2d767597af769c5c39e8c
|
|
| BLAKE2b-256 |
b9097f370922ad449003ff93d87dd16247d2cf0f6b0909ab606ecf52ab94c367
|
File details
Details for the file datoviz-0.4.0rc1-py3-none-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: datoviz-0.4.0rc1-py3-none-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 18.6 MB
- Tags: Python 3, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50b6aee85fb389534f42c1fdf50e8c2401a71527f20ee00f2584e814188c2529
|
|
| MD5 |
62c320dd8aeb2d0a438b6578d4e8527c
|
|
| BLAKE2b-256 |
e20eb77ea851d5a4a761b9690b9e3509609b65a596de6a85f2b4111a8a5c9409
|
File details
Details for the file datoviz-0.4.0rc1-py3-none-macosx_15_0_x86_64.whl.
File metadata
- Download URL: datoviz-0.4.0rc1-py3-none-macosx_15_0_x86_64.whl
- Upload date:
- Size: 9.2 MB
- Tags: Python 3, macOS 15.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2876bad136b952bf45b15649b0740ecc35378731ba5b5917f7f3100c6b02d10c
|
|
| MD5 |
6e51137c61da0d784507e28f245d1f8f
|
|
| BLAKE2b-256 |
7181194f3ad1d94003cff240050dded63fa5ec0776915ca31c10c839639c689e
|
File details
Details for the file datoviz-0.4.0rc1-py3-none-macosx_15_0_arm64.whl.
File metadata
- Download URL: datoviz-0.4.0rc1-py3-none-macosx_15_0_arm64.whl
- Upload date:
- Size: 8.6 MB
- Tags: Python 3, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21c1f68e852d92c7a8134867c5f5455442a37f73dfb57b8b40752fce871a26e2
|
|
| MD5 |
b02f2c0277d3c7dce51763806948e691
|
|
| BLAKE2b-256 |
b45f505279a8938d8ea34570557f2dc02f6fa9fca0116ea336003c7037d9b1c1
|