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.
# 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) - βΉοΈ 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/utpmPermanent 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)
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@v1See 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