{"id":13422190,"url":"https://github.com/datoviz/datoviz","last_synced_at":"2026-01-19T22:06:27.380Z","repository":{"id":41953919,"uuid":"281501204","full_name":"datoviz/datoviz","owner":"datoviz","description":"⚡ Datoviz: high-performance GPU rendering for scientific data visualization","archived":false,"fork":false,"pushed_at":"2026-01-14T16:06:14.000Z","size":43589,"stargazers_count":757,"open_issues_count":8,"forks_count":39,"subscribers_count":23,"default_branch":"main","last_synced_at":"2026-01-14T19:07:49.546Z","etag":null,"topics":["c","cpp","data-visualization","data-viz","gpu","graphics","python","rendering","scientific-computing","scientific-visualization","visualization","vulkan"],"latest_commit_sha":null,"homepage":"https://datoviz.org","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datoviz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2020-07-21T20:48:09.000Z","updated_at":"2026-01-11T21:09:31.000Z","dependencies_parsed_at":"2024-01-03T06:42:34.217Z","dependency_job_id":"16dcc292-ba23-41bf-92f4-961873e902de","html_url":"https://github.com/datoviz/datoviz","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/datoviz/datoviz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datoviz%2Fdatoviz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datoviz%2Fdatoviz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datoviz%2Fdatoviz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datoviz%2Fdatoviz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datoviz","download_url":"https://codeload.github.com/datoviz/datoviz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datoviz%2Fdatoviz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28441315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cpp","data-visualization","data-viz","gpu","graphics","python","rendering","scientific-computing","scientific-visualization","visualization","vulkan"],"created_at":"2024-07-30T23:00:38.811Z","updated_at":"2026-01-15T02:32:18.679Z","avatar_url":"https://github.com/datoviz.png","language":"C","readme":"# Datoviz: high-performance GPU rendering for scientific data visualization\n\n[**[Installation]**](#%EF%B8%8F-installation-instructions) \u0026nbsp;\n[**[Usage]**](#-usage) \u0026nbsp;\n[**[User guide]**](https://datoviz.org/guide/) \u0026nbsp;\n[**[Gallery]**](https://datoviz.org/gallery/) \u0026nbsp;\n\n\n\n**⚡️ Datoviz** is an open-source, cross-platform, **high-performance rendering library for scientific data visualization** making extensive use of the graphics processing unit (GPU).\n\nUp to **10,000x faster than matplotlib**, it delivers highly efficient **high-quality GPU rendering** of 2D and 3D graphical primitives—markers, paths, images, text, meshes, volumes, and more—that scale to millions of elements. Datoviz also supports **graphical user interfaces (GUIs)** for interactive visualization.\n\n[![](https://raw.githubusercontent.com/datoviz/data/master/hero.jpg)](https://raw.githubusercontent.com/datoviz/data/master/hero.jpg)\n\nBuilt from the ground up with performance in mind, Datoviz is written primarily in **C** and **C++**, leveraging the [**Khronos Vulkan graphics API**](https://www.vulkan.org/). It offers a C API, low-level Python bindings via `ctypes`, and a higher-level, idiomatic **Python API 🐍**.\n\nWritten by one of the original creators of [VisPy](https://vispy.org), a GPU-based Python scientific visualization library, Datoviz aims to serve as the default backend for the upcoming **VisPy 2.0**.\n\nThe library is lightweight with minimal dependencies: mostly Vulkan, [**GLFW**](https://www.glfw.org/) for windowing, and [Dear ImGui](https://github.com/ocornut/imgui/) for GUIs.\n\n\u003e [!WARNING]\n\u003e Datoviz is a young library. The API is stabilizing, but breaking changes may still occur as the project evolves with broader usage.\n\n\n\n## ✨ Current features\n\n* **📊 2D visuals**: antialiased points, markers, line segments, paths, text, images\n* **📈 2D axes**\n* **🌐 3D visuals**: meshes, volumes, volume slices\n* **🌈 150 colormaps** included (from matplotlib, colorcet, MATLAB)\n* **🖱️ High-level interactivity**: pan \u0026 zoom for 2D, arcball for 3D (more later)\n* **🎥 Manual control of cameras**: custom interactivity\n* **𓈈 Figure subplots** (aka \"panels\")\n* **🖥️ GUIs** using [Dear ImGui](https://github.com/ocornut/imgui/)\n\n\n## 🧩 API philosophy\n\nDatoviz does **not** use high-level plotting functions like `plot()`, `scatter()`, or `imshow()`. Instead, it exposes flexible visual primitives—markers, images, meshes, and more—that can be added to a scene and customized directly with data. This approach offers fine-grained control and high performance, while remaining concise enough for quick plots.\n\nA [higher-level plotting interface is under development as part of **VisPy 2.0**](https://github.com/vispy/vispy/discussions/2661), which will use Datoviz as its rendering backend. An intermediate layer called **GSP** (Graphics Specification Protocol) will provide a backend-agnostic API for declarative plotting.\n\n\n\n## 🔍 Comparison with other libraries\n\n### 🐍 Matplotlib\n\n**Matplotlib** is the gold standard for static, publication-quality figures, with a mature, feature-rich API. But it's not optimized for interactivity or large datasets.\n\n**Datoviz**, in contrast, is a younger, GPU-based library designed for fast, interactive visualization. It lacks Matplotlib’s high-level API but excels at rendering millions of points in real time.\n\nUse **Matplotlib** for polished static plots, **Datoviz** for responsive data exploration.\n\n#### Preliminary performance benchmark\n\nThe figure below shows a preliminary [**performance benchmark**](https://github.com/datoviz/datoviz/blob/main/examples/benchmarks/benchmark_mpl.py) comparing Datoviz and Matplotlib on an interactive 2D scatter plot, with increasing numbers of points and a simulated zoom interaction (on a high-end Linux desktop PC):\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/datoviz/data/master/screenshots/benchmark.png\" alt=\"Datoviz vs Matplotlib benchmark\" width=\"800\"\u003e\n\u003c/p\u003e\n\nIn this benchmark, **Datoviz outperforms Matplotlib by a factor of up to 10,000×**, maintaining interactive framerates even with millions of points. Matplotlib, in contrast, becomes sluggish or fails entirely as the dataset size increases.\n\n\n\n### 🧊 VTK\n\nDatoviz is lighter, simpler, and easier to install than VTK. It compiles in seconds, has minimal dependencies, and focuses exclusively on real-time rendering of visual primitives. Unlike VTK, it does not include data file I/O (except minimal test loaders like `.obj`), computational geometry, or data processing.\n\nVTK is a powerful, heavyweight toolkit for 3D visualization, simulation, and scientific computing workflows. In contrast, Datoviz is designed for fast, high-quality 2D and 3D rendering.\n\n\n\n## 🕐 Current status [July 2025]\n\n**The current version is v0.3.x**\nThis release introduces major updates over v0.2, including 2D axes and a new Pythonic API.\n\n\n\n## 🕐 Roadmap\n\nLooking ahead, the upcoming v0.4 release (2026) will focus on foundational improvements to the low-level engine, paving the way for the following key features in future versions:\n\n* 🧊 Correct transparency in 3D mesh and volume rendering\n* ✨ Multisample anti-aliasing (MSAA)\n* 🎯 Object picking\n* 📈 Nonlinear coordinate transforms\n* ⚡ CUDA interoperability\n* 🧮 Vulkan compute shaders (similar to CUDA kernels)\n* 🖌️ Dynamic and customizable shaders\n* 🎛️ Combined GPGPU compute and graphics workflows\n* 🔗 GPU memory sharing across visuals\n* 🐍 IPython integration\n* 🖥️ Qt backend support\n* 🌐 WebGPU backend\n\n\n\n## 🛠️ Installation instructions\n\n### Requirements\n\n* Supported operating systems:\n\n  * **Linux x86\\_64** (e.g. Ubuntu 22.04 or later, as the Linux build requires glibc 2.34+)\n  * **macOS 12 or later** (x86\\_64 and arm64, i.e. Apple silicon M1–M4)\n  * **Windows 10 or later** (x86\\_64)\n* Python environment:\n\n  * Python 3.8+ (64-bit)\n  * NumPy\n  * requests\n  * platformdirs\n* Up-to-date graphics drivers with Vulkan support (most integrated or dedicated GPUs from the last ten years are supported)\n\n### Install with pip\n\n```bash\npip install datoviz\n```\n\nThis installs a Python wheel that includes the C library, precompiled for your system.\n\nIf the installation fails, you may need to [build from source](BUILD.md) or [open an issue](https://github.com/datoviz/datoviz/issues) to request support for your configuration.\n\n\n### Nightly builds\n\n[Nightly builds](https://github.com/datoviz/datoviz/releases/tag/nightly) are automatically generated from the [`dev`](https://github.com/datoviz/datoviz/tree/dev) branch via [GitHub Actions](https://github.com/datoviz/datoviz/actions/workflows/wheels.yml). These builds contain the latest experimental features and bug fixes that have not yet been released.\n\n\u003e [!WARNING]\n\u003e Nightly wheels are untested and may be unstable. Use at your own risk, and please [report issues](https://github.com/datoviz/datoviz/issues) if you encounter any problems.\n\nYou can find the latest builds on the **[Nightly Release Page](https://github.com/datoviz/datoviz/releases/tag/nightly)**.\nEach wheel file is tagged by platform (e.g. `manylinux`, `macosx`, `win_amd64`) and build date (`devYYYYMMDD`).\n\n\n## 🚀 Usage\n\nHere’s a simple 2D scatter plot example with axes in Python, displaying points with random positions, colors, and sizes.\n\n```python\nimport numpy as np\nimport datoviz as dvz\n\nn = 1000\nx = np.random.normal(scale=0.2, size=n)\ny = np.random.normal(scale=0.2, size=n)\n\ncolor = np.random.randint(size=(n, 4), low=100, high=240, dtype=np.uint8)\ncolor[:, 3] = 255\n\nsize = np.random.uniform(low=10, high=30, size=n)\n\napp = dvz.App(background='white')\nfigure = app.figure(800, 600)\npanel = figure.panel()\n\nxmin, xmax = -1, +1\nymin, ymax = -1, +1\naxes = panel.axes((xmin, xmax), (ymin, ymax))\n\nvisual = app.point(\n    position=axes.normalize(x, y),\n    color=color,\n    size=size,\n)\npanel.add(visual)\n\napp.run()\napp.destroy()\n```\n\n![](https://raw.githubusercontent.com/datoviz/data/main/gallery/quickstart.png)\n\n\n## 📚 Documentation\n\n* [**📖 User guide**](https://datoviz.org/guide/)\n* [**🐍 Examples**](https://datoviz.org/gallery/)\n* [**📚 API** reference](https://datoviz.org/reference/api_py/)\n* [**🏛️ Architecture** overview](https://datoviz.org/discussions/ARCHITECTURE/)\n* [**🏗️ Build** instructions](https://datoviz.org/discussions/BUILD/)\n* [**👥 Contributors** instructions](https://datoviz.org/discussions/CONTRIBUTING/)\n* [**🛠️ Maintainers** instructions](https://datoviz.org/discussions/MAINTAINERS/)\n\n\n\n## 🕰️ History\n\nDatoviz builds on more than a decade of open-source GPU-based scientific visualization work:\n\n- **2012** — Developers of several GPU visualization libraries (Galry, Glumpy, pyqtgraph, visvis) joined forces to create [**VisPy**](https://vispy.org/), a high-performance OpenGL-based visualization library for Python.\n\n- **2015** — The [**Vulkan API**](https://www.khronos.org/vulkan/) was introduced as a modern low-level successor to OpenGL, [inspiring early ideas](https://cyrille.rossant.net/compiler-data-visualization/) for a future visualization library built on Vulkan.\n\n- **2019** — [Cyrille Rossant](https://cyrille.rossant.net/), a VisPy cofounder, began experimenting with Vulkan as the foundation for a new graphics engine tailored to scientific visualization.\n\n- **2021** — The first experimental release of **Datoviz v0.1** laid the foundation for future development. That same year, a [Chan Zuckerberg Initiative (CZI)](https://chanzuckerberg.com/eoss/proposals/) grant to VisPy helped support the ecosystem.\n\n- **2024** — Datoviz **v0.2** was released with a full redesign. It introduced a modular architecture focused on stability and extensibility, paving the way for cross-platform rendering (including WebGPU) with support from a second [CZI grant](https://chanzuckerberg.com/eoss/proposals/).\n\n- **2025** — Datoviz **v0.3** added 2D axes, a more Pythonic API, and core improvements in usability and flexibility.\n\nDatoviz remains closely tied to **VisPy** and is being developed by one of its original authors. As part of the **VisPy 2.0** initiative (led by Cyrille Rossant and Nicolas Rougier, two of the original creators of VisPy), Datoviz will act as a low-level backend beneath a unified scientific visualization layer called the **Graphics Server Protocol (GSP)**, enabling frontends to target multiple renderers (Datoviz, Matplotlib, etc.).\n\nThe long-term vision is to enable high-performance 2D/3D scientific visualization across platforms (desktop, web, cloud) and languages (C/C++, Python, Julia, Rust).\n\n\n\n## 🤝 Contributing\n\nSee the [contributing notes](CONTRIBUTING.md).\n\n\n\n## 📄 License\n\nSee the [MIT license](LICENSE).\n\n\n\n## 🙏 Credits\n\n**Datoviz** is developed by [Cyrille Rossant](https://cyrille.rossant.net) at the [International Brain Laboratory](http://internationalbrainlab.org/), a global consortium of neuroscience research labs.\n\n### 💸 Funding\n\nDatoviz is supported by:\n\n- \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/5/58/Wellcome_Trust_logo.svg\" alt=\"Wellcome Trust\" width=\"100\"\u003e [Wellcome Trust](https://wellcome.org/)\n- \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/c/c5/Simons_Foundation_logo.png\" alt=\"Simons Foundation\" width=\"100\"\u003e [Simons Foundation](https://www.simonsfoundation.org/)\n- \u003cimg src=\"https://upload.wikimedia.org/wikipedia/fr/f/f0/Chan_Zuckerberg_Initiative_Logo.png\" alt=\"Chan Zuckerberg Initiative\" width=\"100\"\u003e [Chan Zuckerberg Initiative](https://chanzuckerberg.com/), through the [Essential Open Source Software for Science program](https://chanzuckerberg.com/eoss/)\n\n\n\n## 📚 References\n\n- Khronos Group (2025). [Datoviz: Ultra-fast, high-performance GPU scientific visualization library built on Vulkan](https://www.khronos.org/blog/datoviz-ultra-fast-high-performance-gpu-scientific-visualization-library-built-on-vulkan)\n- Rossant, C. \u0026 Rougier, N. (2021). [Datoviz: A GPU Scientific Visualization Library Based on Vulkan](https://ieeexplore.ieee.org/document/9500108). *2021 IEEE Visualization Conference (VIS)*.\n- Rossant, C. (2015). [A compiler for data visualization](https://cyrille.rossant.net/compiler-data-visualization/)\n- Campagnola, L., Klein, A., Larson, E., Rossant, C., \u0026 Rougier, N. P. (2015, July). [VisPy: harnessing the GPU for fast, high-level visualization.](https://inria.hal.science/hal-01208191/) In Proceedings of the 14th Python in Science Conference.\n- Rougier, N. P. (2014). [Antialiased 2d grid, marker, and arrow shaders.](https://hal.science/hal-01081592/) Journal of Computer Graphics Techniques, 3(4), 52.\n- Rougier, N. P. (2013). [Shader-based antialiased dashed stroked polylines.](https://inria.hal.science/hal-00907326/) Journal of Computer Graphics Techniques, 2(2), 91-107.\n- Rougier, N. P. (2013). [Higher quality 2D text rendering.](https://inria.hal.science/hal-00821839/) Journal of Computer Graphics Techniques, 2(1), 50-64.\n","funding_links":[],"categories":["C","Libraries","Visualization"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatoviz%2Fdatoviz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatoviz%2Fdatoviz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatoviz%2Fdatoviz/lists"}