Getting started
Just use it
Nothing here is needed to use Videola. The downloads page works out which system you are on, offers that build first, and lists the others; the browser version needs no installation at all. What follows is for building it yourself.
Prerequisites
| Tool | Version | Needed for |
|---|---|---|
| Rust | stable, as pinned by rust-toolchain.toml | the core, the WASM build, the Tauri shell |
wasm-pack | any recent release | compiling the core to WASM |
| Node.js | 22 or newer | the web app and the docs site |
| pnpm | 11 or newer | the workspace; the root package.json pins pnpm@11.20.0 |
The Tauri shell additionally needs a platform WebView and toolchain. On Linux that means libwebkit2gtk-4.1-dev, libappindicator3-dev, librsvg2-dev and patchelf; Windows and macOS use the WebView shipped with the system.
Install
pnpm install
pnpm wasmWhy pnpm wasm comes first
pnpm wasm runs wasm-pack build crates/videola-core-wasm --target web and writes the result to packages/core/src/wasm. That directory is generated and not committed, and packages/core/src/index.ts imports from it. Until it exists, @videola/core has an unresolvable import, and dev, typecheck, test and build all fail — for the web app as well, because it depends on the facade.
CI treats the artifact the same way: a separate wasm job builds it, uploads it, and every job that needs it downloads it and checks that packages/core/src/wasm/videola_core.js is present before it runs pnpm install.
If wasm-opt crashes on your machine, run the wasm script from package.json by hand with --no-opt appended. That only changes the size of the output; CI builds without the flag.
Run the web app
pnpm --filter videola-web devVite serves on http://localhost:5173. The app loads the WASM core, then offers New, Open, Add track, Save, Undo and Redo, plus the theme and language toggles.
The checks the repository runs:
pnpm typecheck
pnpm test
pnpm build
cargo test --workspaceRun the desktop app
The desktop build opens with its window hidden behind a small splash screen and shows the editor the moment the core is up. That is not decoration: the first thing a cold start does is compile a WASM module, and a window showing an empty grey editor while that runs looks like a program that has crashed. The shell carries a ten-second timer that shows the window regardless, so a build whose core never loads is a visible problem rather than a process with no window.
pnpm --filter videola-desktop devThe Tauri configuration points beforeDevCommand at the web app's dev server and devUrl at http://localhost:5173, so the shell wraps the same front end. To produce an installer instead:
pnpm --filter videola-desktop bundlebeforeBuildCommand builds the web app first and Tauri bundles apps/web/dist. The configured bundle targets are nsis, deb, appimage and dmg; a local build only produces the ones your platform can make, so pass --bundles if you want to be explicit. The shell it packages is the web app, unchanged.
Run the Docker image
docker build -f docker/Dockerfile -t videola:dev .
docker run --rm -p 8080:80 videola:devThe image is built in three stages: a Rust stage compiles the core to WASM, a Node stage installs the workspace and builds the web app, and the final stage copies apps/web/dist into nginx:alpine. docker/nginx.conf serves .wasm with the correct MIME type, marks the content-hashed JavaScript and CSS as immutable, keeps index.html uncached, and falls back to index.html for unknown paths.
The image serves static files only. The HTTP API and the MCP server are a separate process, apps/server — see The API and the MCP server. A render worker needs FFmpeg and a compositor, neither of which exists yet.