Getting started¶
EscapeVelocity ships as a native desktop app built with Tauri (a Rust backend + a web front‑end). The LaTeX engine, Tectonic, is embedded in the app, so you do not need a separate TeX installation.
This page covers running the app from source. If you have a packaged build (a .app / .dmg / installer), just launch it and skip to The workspace.
Prerequisites¶
| Tool | Version | Notes |
|---|---|---|
| Node.js | ≥ 18 | Front‑end build (Vite) |
| Rust | stable | Backend + Tectonic (rustup recommended) |
| Xcode Command Line Tools | current | macOS only — C toolchain for Tectonic |
On macOS, Tectonic also needs a few native libraries. Install them once with Homebrew:
You usually don’t need PKG_CONFIG_PATH
The repo’s .cargo/config.toml already points the build at the Homebrew libraries.
Install & run¶
From the app folder (EscapeVelocity-native-tauri):
# 1. Install front-end dependencies
npm install
# 2. Launch the app in development mode
npm run tauri dev
The first launch compiles the Rust + Tectonic stack, which can take a few minutes. Subsequent launches are fast. A native window titled EscapeVelocity opens, and within a second or two the Preview pane shows the bundled sample book, typeset in EB Garamond.
To stop the app, press Ctrl+C in the terminal or close the window.
First run: warming the offline cache¶
EscapeVelocity compiles in cache‑only mode — it never reaches out to the network at typeset time. The app ships a pre‑warmed font/format cache for exactly the LaTeX its generator emits, so it works fully offline.
If the very first compile shows:
Compile failed — halted on a potentially‑recoverable error
…the offline cache is cold. Warm it once (this step needs network), then restart npm run tauri dev:
prewarm runs the real generator over every bundled font and body size, pulling each font’s OTF and the fontspec machinery into the cache so future compiles are instant and offline.
Building a release installer¶
npm run prewarm # warm the bundled cache (needs network once, ~1 min)
npm run tauri build # produces a .app / .dmg under
# src-tauri/target/release/bundle/
The packaged app carries the warmed cache as a bundled resource and seeds a per‑user copy on first run, so end users get offline typesetting with no setup.
Verify your setup (optional)¶
# Rust: golden, compile, SyncTeX and export tests (offline, ~30s)
cargo test --manifest-path src-tauri/Cargo.toml
# Rust lint
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets
# Front-end type-check + bundle
npm run build
All tests should pass, clippy should be clean, and the build should succeed.
Next: The workspace →