livesplit-core is an open-source Rust library that provides all the building blocks needed to create a fully-featured speedrun timer. It is the engine behind LiveSplit One and several other community tools. The library is designed to be embedded into any application — desktop, mobile, web, or embedded — without imposing any particular user interface.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/LiveSplit/livesplit-core/llms.txt
Use this file to discover all available pages before exploring further.
livesplit-core is a library, not a UI application. It handles all of the
timer logic, file parsing, rendering, and auto splitting — but it does not
ship a window, widget toolkit, or GUI of its own. You are responsible for
building the interface on top of it, whether that is a native desktop app, a
web frontend, an OBS plugin, or anything else.
Key Capabilities
- Timer control — start, split, skip, undo, pause, resume, and reset an attempt; query the current phase and elapsed time at any moment via an immutable snapshot.
- Splits file parsing — read and write run files in 15+ formats, including
LiveSplit (
.lss), Flitter, FaceSplit, LibreSplit, Llanfair (and Gered’s fork), OpenSplit, Portal 2 Live Timer, ShitSplit, Source Live Timer, SpeedrunIGT, Splitterino, SplitterZ, Splitty, Time Split Tracker, and WSplit. - Comparison generators — automatically compute Best Segments, Average Segments, Median Segments, Worst Segments, Balanced PB, and more against historical attempt data.
- Layout components — a rich set of timer, splits list, detail, and graph components whose state can be serialised and rendered.
- Auto splitting — load WebAssembly auto splitter modules at runtime via the
auto-splittingfeature. A built-in watchdog unloads unresponsive scripts automatically. - Hotkeys — cross-platform global hotkey support through the bundled
livesplit-hotkeycrate. - Software rendering — a fully CPU-based renderer powered by
tiny-skia that works even in
no_stdenvironments, plus an SVG renderer and a WebAssembly/Canvas renderer for the browser.
Supported Platforms
livesplit-core targets a wide range of operating systems and execution environments. The CI matrix covers all of the following:| Category | Targets |
|---|---|
| Desktop | Windows (x86, x86_64, ARM64), macOS (x86_64, Apple Silicon), Linux (x86, x86_64, ARM, AArch64, RISC-V, PowerPC, s390x, SPARC64, and musl variants) |
| Mobile | Android, iOS |
| Web | WebAssembly (browser via wasm-bindgen, WASI, and unknown WASM targets) |
| Bare metal / no_std | ARM Cortex-M (thumbv7em, thumbv8m, …), RISC-V 32/64, Nvidia PTX |
Language Bindings
The library is written in Rust and can be used directly from Rust. A C API (livesplit-core-capi) exposes the full surface area and serves as the
foundation for generated bindings in every other supported language:
| Language | Notes |
|---|---|
| Rust | Native crate — no FFI overhead |
| C | Generated header + shared/static library |
| C++ | Generated header wrapping the C API |
| C# | P/Invoke bindings |
| Java | JNA (Java Native Access) and JNI variants |
| Kotlin | JNI variant |
| Swift | Module map + generated Swift wrappers |
| Ruby | FFI bindings |
| Python | ctypes bindings |
| JavaScript / TypeScript | Node.js (native addon) and WebAssembly (via wasm-bindgen) |
Projects Using livesplit-core
livesplit-core is already powering a variety of community tools:- LiveSplit One Web — the official browser-based timer built on the WebAssembly bindings.
- LiveSplit One Desktop Prototype — an experimental native desktop timer.
- LiveSplit One OBS Plugin — embed a live timer directly inside OBS.
- chronos Terminal Timer — a terminal-based timer for the command line.
- annelid — a splits tool for SNES games.
License
livesplit-core is dual-licensed under MIT OR Apache-2.0. You may choose either license at your option.Next Steps
Quickstart
Build a working timer in Rust in five steps.
Building from Source
Compile the C library, generate bindings, and explore Cargo features.
Language Bindings
Use livesplit-core from C, Swift, Python, JavaScript, and more.
Runs & Segments
Understand the core data model: Run, Segment, and Time.