<!-- <a href="https://crates.io/crates/ltx"><img src="https://img.shields.io/crates/v/ltx.svg?color=B5603A&label=crates.io" alt="crates.io"></a> -->
<!-- <a href="https://docs.rs/ltx"><img src="https://img.shields.io/docsrs/ltx?color=1C1B1A" alt="docs.rs"></a> -->
<!-- <a href="https://github.com/abderrahmanbenani/ltx/actions"><img src="https://img.shields.io/github/actions/workflow/status/abderrahmanbenani/ltx/ci.yml?branch=main&label=CI" alt="CI status"></a> -->
<!-- <a href="https://github.com/abderrahmanbenani/ltx/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT%2FApache--2.0-1C1B1A" alt="license"></a> -->
<!-- <a href="https://crates.io/crates/ltx"><img src="https://img.shields.io/crates/d/ltx?color=B5603A" alt="downloads"></a> -->
ltx is a project manager for LaTeX documents. It resolves your document graph, drives latex/xelatex/lualatex and biber/bibtex in the right order, watches your sources for changes, and gets out of your way — built for people who'd rather be writing than babysitting a build.
Status: pre-1.0. The CLI surface is stabilizing; expect minor breaking changes between minor versions until
1.0. See CHANGELOG.md.
Most LaTeX workflows are stitched together from shell scripts, latexmk, and muscle memory. ltx treats your document the way a modern build tool treats a codebase:
- Correct by construction — dependency-aware compilation means bibliographies, indices, and multi-pass cross-references resolve without manual re-runs.
- Fast — incremental builds, parallel auxiliary passes, and a Rust core mean large multi-file theses and papers compile in a fraction of the time.
- Predictable — one
ltx.tomldescribes your project; builds behave the same on your machine, your co-author's machine, and in CI.
- 🚀 Incremental builds — only recompiles what changed, including transitive
\input/\includegraphs - 🔁 Automatic multi-pass resolution — handles
biber/bibtex,makeindex, and repeatedpdflatexpasses until the document is stable - 👀 Watch mode — rebuilds on save for a tight write–compile–preview loop
- 📦 Project scaffolding —
ltx newgenerates a clean, opinionated project structure - 🧹 Clean workspace — auxiliary files are isolated to a build directory, never scattered next to your
.texsources - 🔌 Engine-agnostic — works with
pdflatex,xelatex, andlualatex - 🧵 Parallel-friendly — designed to slot into CI pipelines and pre-commit hooks
cargo install ltxgit clone https://github.com/abderrahmanbenani/ltx.git
cd ltx
cargo install --path .ltx requires a working TeX distribution (TeX Live, MiKTeX, or MacTeX) on your PATH.
# Scaffold a new project
ltx new my-paper
cd my-paper
# Build once
ltx build
# Rebuild on every save
ltx watchltx build [--engine pdflatex|xelatex|lualatex] [--release]
ltx watch [--open]
ltx clean
ltx new <name> [--template article|report|beamer]
ltx doctor # verify your TeX toolchain and diagnose common issuesRun ltx --help or ltx <command> --help for the full reference.
Every ltx project is described by an ltx.toml at its root:
[project]
name = "my-paper"
main = "src/main.tex"
engine = "pdflatex"
[build]
output-dir = "build"
bibliography = true
[watch]
open-viewer = trueltx |
latexmk |
Plain shell scripts | |
|---|---|---|---|
| Incremental builds | ✅ | ❌ | |
| Dependency-aware graph resolution | ✅ | ❌ | |
| Project scaffolding | ✅ | ❌ | ❌ |
| Config format | TOML | Perl | shell |
| Written in | Rust | Perl | — |
.
├── src/
│ ├── main.tex
│ └── sections/
├── bib/
│ └── references.bib
├── build/ # generated, git-ignored
└── ltx.toml