# ashlar > A Rust application framework on egui: documents with undo and autosave, commands that drive menus, shortcuts, a palette, a CLI and an MCP server, background jobs, files and settings, native OS features, UI components, and a runtime with crash safety, telemetry and agent control. The full text of every page is in https://ashlar.himanshuat.com/llms-full.txt, and each page's markdown is at its URL plus `.md`. The API reference is on https://docs.rs/ashlar-rs. ## User guide - [Introduction](https://ashlar.himanshuat.com/introduction): ashlar is a Rust library for building desktop apps (and, for its headless core, web apps) on [egui](https://github.com/emilk/egui). - [Installation](https://ashlar.himanshuat.com/guide/installation): The package is published as ashlar-rs; the library is imported as ashlar: - [Your first app](https://ashlar.himanshuat.com/guide/first-app): This is the example from the README: a list of notes with one command. - [Documents and undo](https://ashlar.himanshuat.com/guide/documents): A command runs on a Session, and a view reaches the same session through Cx. - [Commands](https://ashlar.himanshuat.com/guide/commands): A command is a named action with typed parameters. - [Views and components](https://ashlar.himanshuat.com/guide/views): The view is a closure FnMut(&mut egui::Ui, &mut Cx<'_, D>) that draws the whole window each frame. - [Background jobs](https://ashlar.himanshuat.com/guide/jobs): Long work (an export, an import, indexing) runs as a job on a worker thread, so the UI never blocks. - [Files and settings](https://ashlar.himanshuat.com/guide/files-settings): Each app gets four folders, in the places the OS expects: config, data, cache and logs. - [Native OS features](https://ashlar.himanshuat.com/guide/native): ashlar::native (the ashlar-native crate) wraps OS features behind one API. - [Agents and automation](https://ashlar.himanshuat.com/guide/agents): Because every action is a command, an ashlar app can be driven from outside in four ways, all with one vocabulary of methods: - [Testing apps](https://ashlar.himanshuat.com/guide/testing): An ashlar app can be tested at three levels: commands on a headless session, the whole UI on a virtual clock with no window, and the real binary from the command line. - [Web](https://ashlar.himanshuat.com/guide/web): ashlar's headless core (commands, documents, files, jobs, logging) builds for wasm32-unknown-unknown, and CI checks it. - [Crash safety and telemetry](https://ashlar.himanshuat.com/guide/crash-telemetry): Every panic is written to a crash log in the app's logs folder by a panic hook that chains to any hook installed before it. - [Building with an AI assistant](https://ashlar.himanshuat.com/guide/ai-assistant): ashlar apps are easy for a coding agent to check: the agent can build the app, run it with no window, look at a PNG of it, read its UI tree, and drive it through the same commands a user runs. - [Cookbook](https://ashlar.himanshuat.com/guide/cookbook): Short recipes for common tasks. - [FAQ and troubleshooting](https://ashlar.himanshuat.com/guide/faq): Install the system libraries (Debian and Ubuntu names): ## Developer guide - [Contributing](https://ashlar.himanshuat.com/CONTRIBUTING): Thanks for your interest in ashlar. - [Gates, commits and parallel work](https://ashlar.himanshuat.com/docs/contributing): Read [AGENTS.md](../AGENTS.md) first; its rules apply to people and agents alike. - [Rules for agents and developers](https://ashlar.himanshuat.com/AGENTS): ashlar is a Rust library for building fast desktop and web apps: documents and undo, commands, background jobs, files and settings, native OS features, UI components (egui), and a runtime that give... - [Architecture](https://ashlar.himanshuat.com/docs/architecture): ashlar is a workspace of small crates stacked in ranks. - [ADR 0001: unsafe FFI in ashlar-native](https://ashlar.himanshuat.com/docs/adr/0001-native-ffi): The workspace sets unsafe_code = "forbid" (AGENTS.md ยง0). - [Benchmarks](https://ashlar.himanshuat.com/docs/benchmarks): How fast ashlar is, how that was measured, and how to reproduce it. - [Control protocol](https://ashlar.himanshuat.com/docs/control-protocol): Every ashlar app can be driven by an agent in three ways, all speaking one method vocabulary: - [Testing and debugging UIs](https://ashlar.himanshuat.com/docs/debugging-uis): You can drive any ashlar app that serves a control port from outside the process, the way a browser automation tool drives a page. - [Panel docking](https://ashlar.himanshuat.com/docs/ui/ui-docking): ashlar_ui::docking arranges an app's panels: it moves one panel at a time between docked tab groups, side-by-side splits and floating groups. - [Visual regressions](https://ashlar.himanshuat.com/docs/ui/ui-visual-regressions): crates/ui/tests/visual_regression.rs renders real components and independent reference painters with the same offscreen wgpu renderer and compares the results. - [Telemetry](https://ashlar.himanshuat.com/docs/trace/): Crash, performance and usage telemetry for Rust desktop apps, with a backend you host yourself. - [Integration](https://ashlar.himanshuat.com/docs/trace/integration): This guide walks through adding ashlar-trace to an application. - [Privacy](https://ashlar.himanshuat.com/docs/trace/privacy): This page lists everything the SDK can send. - [Self-hosting](https://ashlar.himanshuat.com/docs/trace/self-hosting): ashlar-trace-server is one binary and one data folder. - [Architecture](https://ashlar.himanshuat.com/docs/trace/architecture): This is the spec. - [Wire format](https://ashlar.himanshuat.com/docs/trace/wire-format): Schema version 1. - [Roadmap](https://ashlar.himanshuat.com/docs/trace/roadmap): Status, 2026-09-09: release candidate, load-tested. - [Releasing](https://ashlar.himanshuat.com/docs/releasing): Every crate in crates/ is published to crates.io with the same version (the workspace version in the root Cargo.toml). - [Security policy](https://ashlar.himanshuat.com/SECURITY): ashlar is in early development. ## Changelog - [Changelog](https://ashlar.himanshuat.com/CHANGELOG): All notable changes to ashlar are documented in this file.