{"id":14525303,"url":"https://github.com/voila-dashboards/voici","last_synced_at":"2025-06-19T14:10:46.907Z","repository":{"id":97887964,"uuid":"604527969","full_name":"voila-dashboards/voici","owner":"voila-dashboards","description":"Voici turns any Jupyter Notebook into a static web application","archived":false,"fork":false,"pushed_at":"2025-06-02T08:29:14.000Z","size":3226,"stargazers_count":195,"open_issues_count":23,"forks_count":13,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-06-02T17:36:37.032Z","etag":null,"topics":["dashboards","data-science","emscripten","jupyter","jupyterlite","voila-dashboard","wasm"],"latest_commit_sha":null,"homepage":"https://voici.readthedocs.io/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/voila-dashboards.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":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-02-21T08:50:13.000Z","updated_at":"2025-06-02T08:29:17.000Z","dependencies_parsed_at":"2023-11-29T09:48:25.857Z","dependency_job_id":"340ce6e0-71d2-47cf-8131-82b93950172c","html_url":"https://github.com/voila-dashboards/voici","commit_stats":{"total_commits":109,"total_committers":5,"mean_commits":21.8,"dds":"0.39449541284403666","last_synced_commit":"8d310fe41105114dac94dd1007e664c7acb32327"},"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/voila-dashboards/voici","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voila-dashboards%2Fvoici","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voila-dashboards%2Fvoici/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voila-dashboards%2Fvoici/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voila-dashboards%2Fvoici/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/voila-dashboards","download_url":"https://codeload.github.com/voila-dashboards/voici/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voila-dashboards%2Fvoici/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260765618,"owners_count":23059311,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dashboards","data-science","emscripten","jupyter","jupyterlite","voila-dashboard","wasm"],"created_at":"2024-09-04T14:01:37.479Z","updated_at":"2025-06-19T14:10:41.899Z","avatar_url":"https://github.com/voila-dashboards.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Data Dashboards and Web Applications"],"sub_categories":["Data Visualization Frameworks with Interactive Jupyter Integrations"],"readme":"# ![voici](docs/voici-logo.svg)\n\n![Github Actions Status](https://github.com/voila-dashboards/voici/actions/workflows/main.yml/badge.svg)\n[![JupyterLite](https://jupyterlite.rtfd.io/en/latest/_static/badge-launch.svg)](https://voici.readthedocs.io/en/latest/_static/lite)\n[![Documentation Status](https://readthedocs.org/projects/voici/badge/?version=latest)](https://voici.readthedocs.io/en/latest/?badge=latest)\n\nVoici is a tool for generating static dashboards from Jupyter Notebooks. It can be used as a drop-in replacement for [Voilà](https://github.com/voila-dashboards/voila) and it has the same commands and supports most of Voila's configuration options.\n\nUnlike Voila, which renders interactive dashboards using server-side execution, Voici uses [WebAssembly](https://developer.mozilla.org/en-US/docs/WebAssembly) (Wasm) kernels to render notebooks in the browser, making the resulting dashboard entirely self-contained and distributable.\n\nThis is made possible thanks to the amazing work done in the [JupyterLite project](https://github.com/jupyterlite/jupyterlite).\n\nhttps://user-images.githubusercontent.com/591645/222892327-2a5b1341-640d-49c2-9e95-1f2d3ec122be.mp4\n\n## Features 🚀\n\n- Generates self-contained HTML files with embedded Wasm kernels.\n- Works offline, without requiring a server to run the dashboard.\n- Supports custom templates for styling dashboards, powered by Jinja2.\n- Supports all programming languages that have JupyterLite kernels available. _e.g._ the default JavaScript and Python kernels JupyterLite provides, and [xeus kernels](https://github.com/jupyterlite/xeus)\n\n## Python packages provided by voici:\n\nVoici is split between two Python packages:\n\n- The `voici-core` package provides the core functionalities of voici, mainly the voici CLI.\n- The `voici` package is a meta-package that depends on both `voici-core` and [`jupyterlite-xeus`](https://github.com/jupyterlite/xeus).\n\n`jupyterlite-xeus` allows you to pre-install packages for running your dashboard. For example, if your dashboard requires Matplotlib you can provide an `environment.yml` file in the folder where you run the voici command, containing the following:\n\n```yml\nname: my-dashboard-env\nchannels:\n  - https://repo.mamba.pm/emscripten-forge\n  - conda-forge\ndependencies:\n  - xeus-python\n  - matplotlib\n```\n\nIt has been decided that `voici` would depend on `jupyterlite-xeus` for convenience, **allowing to easily switch from voila to voici without the need to update the Notebook code.**.\n\nNote that you can install multiple xeus kernels like [xeus-python](https://github.com/jupyter-xeus/xeus-python), [xeus-lua](https://github.com/jupyter-xeus/xeus-lua) or [xeus-javascript](https://github.com/jupyter-xeus/xeus-javascript).\n\n```{note}\nSee the [jupyterlite-xeus documentation](https://jupyterlite-xeus.readthedocs.io/en/latest/) for more information\n```\n\nIf you would like to use https://github.com/jupyterlite/pyodide-kernel or another non-xeus kernel, you may want to depend on `voici-core` and `jupyterlite-pyodide-kernel` instead.\n\n## Getting Started 🏁\n\nTo use Voici, you'll need to install it first:\n\n```bash\npip install voici\n\n# OR BETTER\n\nconda install -c conda-forge voici\n\n# OR EVEN FASTER\n\nmamba install -c conda-forge voici\n```\n\nThen, you can generate static dashboards from a notebook or a directory of Notebooks like this:\n\n```bash\n# Build a single dashboard\nvoici my-notebook.ipynb\n# Build a directory of notebooks\nvoici notebooks/\n```\n\nOnce your dashboards are built, you can simply serve them with a simple static server, _e.g._:\n\n```bash\ncd _output\npython -m http.server\n```\n\n## Advanced usage\n\nThe `voici` command line interface is a mix between `voila` and `jupyter lite`. For most cases, users can rely on the `voici` command by using the `voila` CLI syntax.\n\nVoici runs the `build` sub-command by default, the `voici my-notebook.ipynb` command is a shortcut for `voici build --contents my-notebook.ipynb`\nFor advanced usage, users can invoke `voici` with the `jupyter lite` CLI syntax, _e.g._:\n\n```bash\nvoici build --contents my-notebook.ipynb\n```\n\nThe difference between `voici build` and `jupyter lite build` commands is that the voici one will only generate Voici dashboards, excluding the full JupyterLab interface from the output. Running `voici build --contents .` is equivalent to running `jupyter lite build --contents . --apps voici`.\n\nYou can generate the classic `jupyter lite` output alongside your dashboards by specifying the additional apps you want:\n\n```bash\nvoici build --contents . --apps lab --apps retro\n```\n\nIn order to get some help on how to use the `voici` command, you can run:\n\n```bash\nvoici --help\n```\n\nWe'd also suggest looking into the [JupyterLite documentation](https://jupyterlite.readthedocs.io/en/latest/howto/index.html) for more insights on how to configure your `voici` deployment.\n\n## Build the demo site yourself\n\nYou will need either [micromamba](https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html), [mamba](https://mamba.readthedocs.io/en/latest) or conda installed in order to build the emscripten environment.\n\nThe [demo directory](https://github.com/voila-dashboards/voici/tree/main/demo) contains:\n\n- `notebooks/`: The directory of Notebooks that will be served by Voici\n- `environment.yml`: The file specifying the Emscripten environment that will be used for rendering the dashboards, this must contain all your Notebook dependencies\n\nRun the following command to build the demo site:\n\n```bash\ngit clone https://github.com/voila-dashboards/voici\ncd voici/demo\n\nvoici notebooks\n```\n\nThen serve it!\n\n```bash\ncd _output\npython -m http.server\n```\n\n### Make your own Github pages deployment\n\nPlease follow [this guide](https://github.com/voila-dashboards/voici-demo#-how-to-make-your-own-deployment) for making your own Github pages deployment.\n\n## Limitations ⚠️\n\nBecause Voici uses Wasm kernels to execute notebooks, there are some limitations to the types of notebooks that can be rendered: Some notebook features may not work correctly or may have limited functionality when rendered in Voici.\n\n## Contributing 👋\n\nIf you find a bug or have a feature request, please open an issue on the [GitHub repository](https://github.com/voila-dashboards/voici). If you'd like to contribute code, please fork the repository and submit a pull request. We welcome contributions from anyone!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoila-dashboards%2Fvoici","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoila-dashboards%2Fvoici","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoila-dashboards%2Fvoici/lists"}