texforge
Self-contained LaTeX to PDF compiler — one curl, zero friction. No TeX Live, no MiKTeX, no Perl, no Node. A single install sets up everything you need.
Installation
Quick install (recommended)
Linux / macOS:
|
Windows (PowerShell):
irm https://raw.githubusercontent.com/JheisonMB/texforge/main/install.ps1 | iex
This downloads and installs texforge. No Rust toolchain required. Tectonic (the LaTeX engine) is installed automatically on first build.
You can customize the install:
# Pin a specific version
VERSION=0.1.0 |
# Install to a custom directory
INSTALL_DIR=/usr/local/bin |
# Pin a specific version (PowerShell)
$env:VERSION="0.1.0"; irm https://raw.githubusercontent.com/JheisonMB/texforge/main/install.ps1 | iex
Via cargo
Tectonic (the LaTeX engine) is installed automatically on first build. No extra steps needed.
Available on crates.io.
From source
# Binary at target/release/texforge
GitHub Releases
Check the Releases page for precompiled binaries (Linux x86_64, macOS x86_64/ARM64, Windows x86_64).
Uninstall
Quick Start
# Create a new project from a template
# Check for errors without compiling
# Format your .tex files
# Build to PDF
# Remove build artifacts
Commands
| Command | Description |
|---|---|
texforge new <name> |
Create new project from template |
texforge new <name> -t <template> |
Create with specific template |
texforge init |
Initialize texforge in an existing LaTeX project |
texforge build |
Compile to PDF |
texforge clean |
Remove build artifacts |
texforge fmt |
Format .tex files |
texforge fmt --check |
Check formatting without modifying |
texforge check |
Lint without compiling |
texforge template list |
List installed templates |
texforge template list --all |
List installed + available in registry |
texforge template add <name> |
Download template from registry |
texforge template remove <name> |
Remove installed template |
texforge template validate <name> |
Verify template compatibility |
Project Structure
texforge new generates this structure:
mi-tesis/
├── project.toml # Project configuration
├── main.tex # Entry point
├── sections/ # Document sections
│ └── body.tex
├── bib/
│ └── references.bib # Bibliography
└── assets/
└── images/ # Images and resources
project.toml
[]
= "mi-tesis"
= "Author"
= "general"
[]
= "main.tex"
= "bib/references.bib"
Templates
Templates are managed through the texforge-templates registry. The general template is embedded in the binary and works offline.
| Template | Description |
|---|---|
general |
Generic article (default, embedded) |
apa-general |
APA 7th edition report |
apa-unisalle |
Universidad de La Salle thesis |
ieee |
IEEE journal paper |
letter |
Formal Spanish correspondence |
# List installed templates
# Download a template
# Create project with specific template
Templates are cached locally in ~/.texforge/templates/ after first download.
Diagrams
texforge build intercepts embedded diagram environments before compilation. Originals are never modified — diagrams are rendered in build/ copies.
Mermaid
% Default: width=\linewidth, pos=H, no caption
\begin{mermaid}
flowchart LR
A[Input] --> B[Process] --> C[Output]
\end{mermaid}
% With options
\begin{mermaid}
flowchart TD
X --> Y --> Z
\end{mermaid}
Graphviz / DOT
\begin{graphviz}
digraph G
\end{graphviz}
Both rendered to PNG via pure Rust — no browser, no Node.js, no dot binary required.
| Option | Default | Description |
|---|---|---|
width |
\linewidth |
Image width |
pos |
H |
Figure placement (H, t, b, h, p) |
caption |
(none) | Figure caption |
Linter
texforge check runs static analysis without compiling:
\input{file}— verifies file exists\includegraphics{img}— verifies image exists\cite{key}— verifies key exists in.bib\ref{label}/\label{label}— verifies cross-reference consistency\begin{env}/\end{env}— detects unclosed environments
ERROR [main.tex:47]
\includegraphics{missing.png} — file not found
ERROR [main.tex:12]
\cite{smith2020} — key not found in .bib
ERROR [main.tex:23]
\begin{figure} never closed
suggestion: Add \end{figure}
Formatter
texforge fmt applies opinionated formatting inspired by rustfmt:
- Consistent indentation (2 spaces) inside environments
- Collapsed multiple blank lines
- Aligned
\begin{}/\end{}blocks
One canonical output regardless of input style. Git diffs stay clean.
Runtime Directory
~/.texforge/
bin/
tectonic # LaTeX engine (auto-installed on first build)
templates/
general/ # Cached templates
apa-general/
...
Platform Support
| Platform | Architecture | Status |
|---|---|---|
| Linux | x86_64 | ✅ |
| macOS | x86_64 | ✅ |
| macOS | ARM64 (Apple Silicon) | ✅ |
| Windows | x86_64 | ✅ |
Tech Stack
| Concern | Crate |
|---|---|
| CLI parsing | clap (derive) |
| Error handling | anyhow |
| Serialization | serde + toml |
| HTTP client | reqwest (blocking) |
| Archive extraction | flate2 + tar |
| File traversal | walkdir |
| LaTeX engine | tectonic (external binary) |
| Mermaid renderer | mermaid-rs-renderer |
| Graphviz renderer | layout-rs |
| SVG → PNG | resvg |
License
MIT