Skip to content

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:

brew install harfbuzz graphite2 freetype libpng fontconfig icu4c

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:

npm run prewarm

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 →