Skip to content

typst-community/utpm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

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

πŸ“¦ Nix Installation Options
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)

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

About

A package manager for local and remote Typst packages.

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 11