utpm 0.3.0

UTPM is a package manager for local and remote Typst packages. Quickly create and manage projects and templates on your system, and publish them directly to Typst Universe.
Documentation

UTPM logo

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


โœจ Quick Start

# 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!

๐Ÿ”ฅ Why UTPM?

  • ๐Ÿš€ 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

๐ŸŽฏ Features

Package Development

  • โœจ 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)

Dependency Management

  • ๐Ÿ“ฅ Clone packages from Typst Universe (utpm prj clone)
  • ๐Ÿ”„ Sync dependencies to latest versions (utpm prj sync)
  • ๐Ÿ“ฆ Install from git repositories (utpm pkg install)

Package Discovery

  • ๐Ÿ—ƒ๏ธ 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)

Coming Soon

  • ๐Ÿš€ Publish directly to Typst Universe (in development)

๐Ÿ“ฆ Installation

Quick Install

Cargo (Cross-platform)

# Using cargo-binstall (fastest)
cargo binstall utpm

# Or build from source
cargo install utpm

Arch Linux

# Using an AUR helper (yay, paru, etc.)
yay -S utpm-bin      # Pre-built binaries
# or
yay -S utpm-git      # Build from latest git

Homebrew (macOS/Linux)

# Coming soon - waiting for tap approval
brew install typst-community/utpm/utpm

Nix

With Flakes

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 
        ];
      }];
    };
  };
}
Without Flakes
git clone https://github.com/typst-community/utpm.git
cd utpm
nix-build
./result/bin/utpm

More Package Managers

UTPM is being packaged for multiple package managers:

  • ๐Ÿ“ฆ Snap - sudo snap install utpm (automated publishing)
  • ๐Ÿ“ฆ Flatpak - Available on Flathub (semi-automated)
  • ๐Ÿ“ฆ Debian/Ubuntu - .deb packages (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.

From Source

git clone https://github.com/typst-community/utpm.git
cd utpm
cargo install --path .

๐Ÿš€ Usage

GitHub Actions

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.

Basic Commands

# 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 Overview

Project Management (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)

Package Management (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

Other Commands

  • utpm generate (g) - Generate shell completion scripts

Global Options

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> --help for detailed command-specific help


โš™๏ธ Configuration

UTPM extends the standard typst.toml with a [tool.utpm] section for package-specific settings.

Excluding Files

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]

Metadata Extraction

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.


๐Ÿ“– Documentation

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

๐Ÿค Contributing

We welcome contributions of all kinds! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.

Quick Start for Contributors

# 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)

What You Can Do

  • ๐Ÿ› 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.


๐Ÿ“ License

MIT License - see LICENSE for details.


๐Ÿ™ Acknowledgments

Built with โค๏ธ by the Typst Community

Key Dependencies:

  • Typst - The amazing typesetting system
  • Rust - Systems programming language
  • Clap - Command-line argument parsing

โฌ† Back to Top

Made with โค๏ธ for the Typst community