A package manager for local and remote Typst packages.
Rust
149
393 commits
updated Sep 26, 2026
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!
.gitignore, .typstignore, and custom exclude patternsutpm prj init)utpm prj link)utpm prj bump)utpm prj metadata)utpm prj clone)utpm prj sync)utpm pkg install)utpm pkg list --tree)utpm pkg get)utpm prj sync -c)# 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
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/utpm
UTPM is being packaged for multiple package managers:
sudo snap install utpm (automated publishing).deb 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)
utpm prj)| 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) |
utpm pkg)| 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 scriptsutpm [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/ match directories onlyIgnore Files Respected:
.gitignore (default: enabled).typstignore (default: enabled).ignore (optional, enable with --ignore)[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)
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:
Made with ❤️ for the Typst community
1,445 followers · starred May 2026
37 followers · starred Mar 2024
55 followers · starred Aug 2024
69 followers · starred Feb 2026
A package manager for local and remote Typst packages.
Rust
149
393 commits
updated Sep 26, 2026
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!
.gitignore, .typstignore, and custom exclude patternsutpm prj init)utpm prj link)utpm prj bump)utpm prj metadata)utpm prj clone)utpm prj sync)utpm pkg install)utpm pkg list --tree)utpm pkg get)utpm prj sync -c)# 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
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/utpm
UTPM is being packaged for multiple package managers:
sudo snap install utpm (automated publishing).deb 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)
utpm prj)| 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) |
utpm pkg)| 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 scriptsutpm [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/ match directories onlyIgnore Files Respected:
.gitignore (default: enabled).typstignore (default: enabled).ignore (optional, enable with --ignore)[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)
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:
Made with ❤️ for the Typst community
1,445 followers · starred May 2026
37 followers · starred Mar 2024
55 followers · starred Aug 2024
69 followers · starred Feb 2026