ltx is a project manager for LaTeX documents. It scaffolds structured projects, resolves your document graph, drives tectonic, pdflatex/xelatex/lualatex, and biber/bibtex in the right order, lints your source, watches 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.
- Why ltx
- Features
- Installation
- Quick start
- Usage
- Configuration
- How it compares
- Project layout
- Contributing
- License
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 - 🔍 Linting — catches common LaTeX mistakes and style issues before you compile
- 👀 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 - 🦀 Tectonic support — a self-contained, native-Rust TeX engine as a first-class target, no system TeX distribution required
- 🔌 Engine-agnostic — also works with
pdflatex,xelatex, andlualatexfor full TeX Live/MiKTeX compatibility - 🧵 Parallel-friendly — designed to slot into CI pipelines and pre-commit hooks
cargo install ltxgit clone https://github.com/Abdogouhmad/ltx.git
cd ltx
cargo install --path .By default, ltx compiles with Tectonic, a self-contained, native-Rust TeX engine — no separate TeX distribution to install. If you'd rather use pdflatex, xelatex, or lualatex instead (or need a package not yet supported by Tectonic), install a traditional distribution (TeX Live, MiKTeX, or MacTeX) and put it 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 tectonic|pdflatex|xelatex|lualatex]
ltx watch [--open]
ltx lint
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] # for metadata
name = "Rust Memory effeciency"
version = "0.1.0"
author = ["John Deo <johnd@email.com>"]
main = "src/main.tex"
[build]
name = "rust_mem"
engine = "tectonic"
engine_args = [""]ltx |
latexmk |
Plain shell scripts | |
|---|---|---|---|
| Incremental builds | ✅ | ❌ | |
| Dependency-aware graph resolution | ✅ | ❌ | |
| Linting | ✅ | ❌ | ❌ |
| Native Rust engine (Tectonic) | ✅ | ❌ | ❌ |
| Project scaffolding | ✅ | ❌ | ❌ |
| Config format | TOML | Perl | shell |
| Written in | Rust | Perl | — |
.
├── src/
│ ├── main.tex
│ └── sections/
├── bib/
│ └── references.bib
├── target/ # generated, git-ignored
└── ltx.toml
Contributions are welcome. Please open an issue before starting on a large change so we can align on direction first.
git clone https://github.com/Abdogouhmad/ltx.git
cd ltx
cargo test
cargo clippy --all-targets -- -D warningsSee CONTRIBUTING.md for the full guide.
Licensed under either of
at your option.
