Interactive wizard — new project or migrate an existing one
texforge build
Compile to PDF
texforge build --watch
Watch for changes and rebuild automatically
texforge build --watch --delay <s>
Custom debounce delay (default: 2s)
texforge build --reproducible
Pin SOURCE_DATE_EPOCH to a fixed epoch so identical source yields an identical PDF
texforge build --reproducible=<epoch>
Reproducible build with an explicit epoch (seconds since the Unix epoch)
texforge clean
Remove build artifacts
Quality
Command
Description
texforge check
Lint without compiling (includes spell-check)
texforge check --deny-warnings
Treat warnings as errors
texforge fmt
Format .tex files in place
texforge fmt --check
Check formatting without modifying (CI-friendly)
Templates
Command
Description
texforge template list
List installed + available in the registry
texforge template list --installed
List only locally installed templates
texforge template add <name>
Download a template from the registry
texforge template remove <name>
Remove an installed template
texforge template validate <name>
Verify template compatibility
texforge template refresh
Refresh all cached templates (bypass TTL)
texforge template refresh <name>
Refresh one cached template (bypass TTL)
Spell-Check
Command
Description
texforge spell add <words>...
Add word(s) to personal dictionary
texforge spell add <words>... --local
Add to project-local dictionary instead of global
texforge spell list
List all words in personal dictionary
texforge spell list --local
List project-local dictionary
texforge spell remove <words>...
Remove word(s) from personal dictionary
texforge spell remove <words>... --local
Remove from project-local dictionary
Default scope is global (~/.texforge/spell-words). Both scopes are unioned at check time.
PDF Inspection
Command
Description
texforge pdf text
Extract text as seen by readers and accessibility tools
texforge pdf text --raw
Keep ligature codepoints as separate characters
texforge pdf info
Report pages, fonts, embedding status, metadata
texforge pdf pages
List which section opens each page (diff-friendly)
texforge pdf check
Verify significant source words appear in the PDF text
Document Analysis
Command
Description
texforge outline
Print the section tree
texforge outline --json
Output as JSON
texforge stats
Count words by section (default)
texforge stats --by file
Count words by .tex file
texforge stats --json
Output as JSON
Preview
Command
Description
texforge preview
Rasterize all PDF pages to PNG (writes to ./preview/)
texforge preview --page <N>
Rasterize page N only (1-based)
texforge preview --scale <SCALE>
Scale factor for rasterization (default: 1.0)
texforge preview --out <DIR>
Output directory (default: ./preview/)
Diagnostics
Command
Description
texforge doctor
Diagnose Tectonic, cache, fonts, dictionaries, and project
Maintenance
Command
Description
texforge update
Update to the latest stable release (always asks first; the prompt’s default is NO)
texforge update --check
Read-only check: exit 1 if an update is available, 0 if up to date, 2 if the check could not be completed
texforge update --yes
Install the update without asking
texforge update fetches the latest stable GitHub release (drafts and prereleases excluded), downloads the asset for your platform, verifies its SHA256 checksum when the release ships one, and replaces the binary that is running — atomically, in place. It never updates silently.
A cargo install binary is refused: cargo owns that file, so run cargo install --force texforge instead (exits 0), printing installed with cargo — run: cargo install --force texforge.
A network, API, or parse failure prints its cause as one line on stderr and exits 2 — for --check and plain update alike — so a script never reads an outage as a new release. Failures after a successful check (download, checksum, permissions) exit 1.
--check never prompts, never downloads, and never touches local paths.
Exit codes of texforge update [--check]:
Code
Meaning
0
Up to date (or update installed / declined / cargo-managed refusal)
1
--check: an update is available; in plain update, a failure after a successful check (download, checksum, permissions)
2
The release check could not be completed (network, DNS, TLS, HTTP ≥ 400, unparsable response); the cause is the single line printed on stderr. Applies to --check and plain update alike.
The version arrow line prints versions without the v prefix: texforge 0.0.1 → 0.9.0.
Uninstall
Command
Description
texforge uninstall
Remove everything texforge manages under ~/.texforge
texforge uninstall --yes
Skip the confirmation prompt
texforge uninstall --dry-run
Print the plan without removing anything
texforge uninstall --include-spell-words
Also remove the personal spell dictionary (preserved by default)
The texforge binary itself is never removed by this command. The personal spell dictionary (~/.texforge/spell-words) contains your own writing and is preserved unless --include-spell-words is passed.