Unofficial Typst Package Manager
UTPM is a powerful command-line package manager for Typst. Create, manage, and share Typst packages with ease β whether for local development or publishing to Typst Universe.
typst-community - utpm
stars - utpm
forks - utpm
GitHub tag
License
issues - utpm
# Install UTPM (see [Installation](#-installation) for all options) cargo install utpm # Create a new package utpm prj init # Link it for local development utpm prj link # Use it in Typst! # #import "@local/my-package:0.1.0": *
Note
UTPM is actively developed and growing! Some features are still in progress.
Contributions are welcome β check out our contributing guide!
- π Rapid Development - Create and link packages instantly for local testing
- π¦ Smart File Management - Respects
.gitignore,.typstignore, and custom exclude patterns - π Dependency Management - Sync dependencies and bump versions with ease
- π Metadata Extraction - Extract package info for scripts and CI/CD pipelines
- π¨ Flexible Output - JSON, HJSON, YAML, TOML, or human-readable text
- π‘οΈ Try Features without Risk - Dry-run mode for all destructive operations
- β‘ Fast & Lightweight - Written in Rust for speed and reliability
- β¨ Initialize packages with interactive prompts (
utpm prj init) - π Link packages for local development (
utpm prj link) - β¬οΈ Bump versions with semantic versioning (
utpm prj bump) - π Extract metadata for automation (
utpm prj metadata)
- π₯ Clone packages from Typst Universe (
utpm prj clone) - π Sync dependencies to latest versions (
utpm prj sync) - π¦ Install from git repositories (
utpm pkg install)
- ποΈ List local packages with tree view (
utpm pkg list --tree) - iοΈ Get package info from remote (
utpm pkg get) - π Check for updates without applying (
utpm prj sync -c)
- π Publish directly to Typst Universe (in development)
# Using cargo-binstall (fastest) cargo binstall utpm # Or build from source cargo install utpm
# Using an AUR helper (yay, paru, etc.) yay -S utpm-bin # Pre-built binaries # or yay -S utpm-git # Build from latest git
# Coming soon - waiting for tap approval
brew install typst-community/utpm/utpmπ¦ Nix Installation Options
Temporary shell:
nix shell github:typst-community/utpm
Permanent installation in flake.nix:
{ inputs.utpm.url = "github:typst-community/utpm"; outputs = { self, nixpkgs, ... }@inputs: { nixosConfigurations.yourhostname = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [{ environment.systemPackages = [ inputs.utpm.packages.${system}.default ]; }]; }; }; }
git clone https://github.com/typst-community/utpm.git
cd utpm
nix-build
./result/bin/utpmUTPM is being packaged for multiple package managers:
- π¦ Snap -
sudo snap install utpm(automated publishing) - π¦ Flatpak - Available on Flathub (semi-automated)
- π¦ Debian/Ubuntu -
.debpackages (manual, see docs/PUBLISHING.md) - π¦ Fedora/RHEL - RPM packages (manual, see docs/PUBLISHING.md)
- π¦ Arch/AUR - AUR packages (manual, see docs/PUBLISHING.md)
For maintainers: See docs/PACKAGING.md for technical details and docs/SECRETS.md for automation setup.
Note: Windows builds are generated here but scoop is managed by an another user. See Scoop bucket for typst for more infos.
git clone https://github.com/typst-community/utpm.git cd utpm cargo install --path .
Use UTPM in your CI/CD workflows:
- name: Setup UTPM uses: Thumuss/setup-utpm@v1
See the setup-utpm repository for complete documentation and examples.
# Create a new package utpm prj init # Link for local development utpm prj link # Clone from Typst Universe utpm prj clone @preview/example:1.0.0 # Bump version utpm prj bump 1.2.0 # List installed packages utpm pkg list --tree # Get metadata for scripts VERSION=$(utpm prj metadata -f version)
| Command | Alias | Description |
|---|---|---|
init |
n |
Create a new typst.toml manifest interactively |
link |
l |
Link package for local development (respects ignore files) |
clone |
c |
Clone a package from Typst Universe |
bump |
b |
Bump package version (supports semantic versioning) |
sync |
s |
Sync dependencies to latest versions |
metadata |
m |
Extract metadata for scripts and automation |
publish |
p |
π§ Publish to Typst Universe (coming soon) |
| Command | Alias | Description |
|---|---|---|
list |
l |
List installed packages (supports tree view) |
path |
p |
Show package directory path |
unlink |
u |
Remove a linked package |
get |
g |
Get package info from remote |
install |
i |
Install package from git repository |
utpm generate(g) - Generate shell completion scripts
utpm [OPTIONS] <COMMAND> Options: -v, --verbose <LEVEL> Logging level (trace, debug, info, warn, error) -o, --output <FORMAT> Output format (text, json, yaml, toml, hjson) -D, --dry-run Preview changes without writing to disk -h, --help Show help information -V, --version Show version
π‘ Tip: Use
utpm <command> --helpfor detailed command-specific help
UTPM extends the standard typst.toml with a [tool.utpm] section for package-specific settings.
Control which files are included when linking or publishing:
[package] name = "my-package" version = "0.1.0" # ... other standard fields [tool.utpm] exclude = [ ".git", ".github", "*.md", # Exclude all Markdown files "tests/", # Exclude tests directory "examples/", # Exclude examples "**/*.bak", # Exclude backup files recursively ]
Pattern Syntax:
*- Match files in current directory (e.g.,*.md)**- Match recursively (e.g.,**/*.tmp)!pattern- Negate/include pattern- Patterns ending with
/match directories only
Ignore Files Respected:
.gitignore(default: enabled).typstignore(default: enabled).ignore(optional, enable with--ignore)- Custom patterns in
[tool.utpm]
Extract package metadata for scripts and CI/CD:
# Get specific field (outputs plain text) VERSION=$(utpm prj metadata -f version) NAME=$(utpm prj metadata -f name) # Use in automation echo "Building $NAME version $VERSION" git tag "v$VERSION" # Get all metadata as JSON utpm -o json prj metadata | jq '.authors'
Available fields: name, version, entrypoint, authors, license, description, repository, homepage, keywords, categories, disciplines, compiler, exclude
π Example: See assets/typst.toml.example for a complete configuration reference.
| Document | Description |
|---|---|
| π Complete Guide | Comprehensive guide for users, package authors, and contributors |
| π€ Contributing | Code standards, testing, and contribution process |
| π οΈ Development | Development setup, workflow, and tools |
| π§ͺ Testing | Testing guide, running tests, and writing new tests |
We welcome contributions of all kinds! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.
# 1. Install development tools cargo install just # 2. Setup git hooks (optional but recommended) just setup-hooks # 3. Before committing just fix # Auto-format and fix linting issues just ci # Run all checks (format, lint, test)
- π Report bugs - Open an issue with details
- π‘ Suggest features - Share your ideas in discussions
- π Improve docs - Help make documentation clearer
- π§ Fix issues - Pick up a "good first issue"
- β¨ Add features - Implement new functionality
See CONTRIBUTING.md for detailed guidelines on code standards, testing, and the PR process.
MIT License - see LICENSE for details.
Built with β€οΈ by the Typst Community
Key Dependencies:
- Typst - The amazing typesetting system
- Rust - Systems programming language
- Clap - Command-line argument parsing
Made with β€οΈ for the Typst community