Skip to main content

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 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.
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-splitting feature. A built-in watchdog unloads unresponsive scripts automatically.
  • Hotkeys — cross-platform global hotkey support through the bundled livesplit-hotkey crate.
  • Software rendering — a fully CPU-based renderer powered by tiny-skia that works even in no_std environments, 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:
CategoryTargets
DesktopWindows (x86, x86_64, ARM64), macOS (x86_64, Apple Silicon), Linux (x86, x86_64, ARM, AArch64, RISC-V, PowerPC, s390x, SPARC64, and musl variants)
MobileAndroid, iOS
WebWebAssembly (browser via wasm-bindgen, WASI, and unknown WASM targets)
Bare metal / no_stdARM 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:
LanguageNotes
RustNative crate — no FFI overhead
CGenerated header + shared/static library
C++Generated header wrapping the C API
C#P/Invoke bindings
JavaJNA (Java Native Access) and JNI variants
KotlinJNI variant
SwiftModule map + generated Swift wrappers
RubyFFI bindings
Pythonctypes bindings
JavaScript / TypeScriptNode.js (native addon) and WebAssembly (via wasm-bindgen)

Projects Using livesplit-core

livesplit-core is already powering a variety of community tools:

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.

Build docs developers (and LLMs) love