{"id":28712415,"url":"https://github.com/typst-community/utpm","last_synced_at":"2025-12-14T23:46:54.525Z","repository":{"id":177363234,"uuid":"655267390","full_name":"typst-community/utpm","owner":"typst-community","description":"A package manager for local and remote Typst packages. ","archived":false,"fork":false,"pushed_at":"2025-08-15T15:51:57.000Z","size":2934,"stargazers_count":80,"open_issues_count":10,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-15T17:44:23.644Z","etag":null,"topics":["package-manager","typst","utpm"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typst-community.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-06-18T11:53:56.000Z","updated_at":"2025-08-15T15:52:01.000Z","dependencies_parsed_at":"2023-09-07T11:18:30.113Z","dependency_job_id":"7d6abc52-f2ea-4162-b218-6a1bb883ccb4","html_url":"https://github.com/typst-community/utpm","commit_stats":null,"previous_names":["thumuslive/unofficial-typst-package-manager","thumuslive/utpm","thumuss/utpm","typst-community/utpm"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/typst-community/utpm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typst-community%2Futpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typst-community%2Futpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typst-community%2Futpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typst-community%2Futpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typst-community","download_url":"https://codeload.github.com/typst-community/utpm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typst-community%2Futpm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271760492,"owners_count":24816430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["package-manager","typst","utpm"],"created_at":"2025-06-14T23:05:46.601Z","updated_at":"2025-12-14T23:46:54.519Z","avatar_url":"https://github.com/typst-community.png","language":"Rust","funding_links":[],"categories":["Integrations \u0026 Tools"],"sub_categories":["CLI Tools"],"readme":"\u003cdiv align=\"center\"\u003e\n\n![UTPM logo](./assets/logo.svg)\n\n\u003e _Unofficial Typst Package Manager_\n\n**UTPM** is a powerful command-line package manager for [Typst](https://typst.app/). Create, manage, and share Typst packages with ease — whether for local development or publishing to **Typst Universe**.\n\n[![typst-community - utpm](https://img.shields.io/static/v1?label=typst-community\u0026message=utpm\u0026color=blue\u0026logo=github)](https://github.com/typst-community/utpm \"Go to GitHub repo\")\n[![stars - utpm](https://img.shields.io/github/stars/typst-community/utpm?style=social)](https://github.com/typst-community/utpm)\n[![forks - utpm](https://img.shields.io/github/forks/typst-community/utpm?style=social)](https://github.com/typst-community/utpm)\n\u003cbr/\u003e\n[![GitHub tag](https://img.shields.io/github/tag/typst-community/utpm?include_prereleases=\u0026sort=semver\u0026color=blue)](https://github.com/typst-community/utpm/releases/)\n[![License](https://img.shields.io/badge/License-MIT-blue)](#license)\n[![issues - utpm](https://img.shields.io/github/issues/typst-community/utpm)](https://github.com/typst-community/utpm/issues)\n\n\u003c/div\u003e\n\n---\n\n## ✨ Quick Start\n\n```bash\n# Install UTPM (see [Installation](#-installation) for all options)\ncargo install utpm\n\n# Create a new package\nutpm prj init\n\n# Link it for local development\nutpm prj link\n\n# Use it in Typst!\n# #import \"@local/my-package:0.1.0\": *\n```\n\n\u003e [!NOTE]\n\u003e **UTPM** is actively developed and growing! Some features are still in progress. \\\n\u003e Contributions are welcome — check out our [contributing guide](docs/CONTRIBUTING.md)!\n\n\n## 🔥 Why UTPM?\n\n- **🚀 Rapid Development** - Create and link packages instantly for local testing\n- **📦 Smart File Management** - Respects `.gitignore`, `.typstignore`, and custom exclude patterns\n- **🔄 Dependency Management** - Sync dependencies and bump versions with ease\n- **📊 Metadata Extraction** - Extract package info for scripts and CI/CD pipelines\n- **🎨 Flexible Output** - JSON, HJSON, YAML, TOML, or human-readable text\n- **🛡️ Try Features without Risk** - Dry-run mode for all destructive operations\n- **⚡ Fast \u0026 Lightweight** - Written in Rust for speed and reliability\n\n## 🎯 Features\n\n### Package Development\n- ✨ **Initialize** packages with interactive prompts (`utpm prj init`)\n- 🔗 **Link** packages for local development (`utpm prj link`)\n- ⬆️ **Bump** versions with semantic versioning (`utpm prj bump`)\n- 📋 **Extract metadata** for automation (`utpm prj metadata`)\n\n### Dependency Management\n- 📥 **Clone** packages from Typst Universe (`utpm prj clone`)\n- 🔄 **Sync** dependencies to latest versions (`utpm prj sync`)\n- 📦 **Install** from git repositories (`utpm pkg install`)\n\n### Package Discovery\n- 🗃️ **List** local packages with tree view (`utpm pkg list --tree`)\n- ℹ️ **Get** package info from remote (`utpm pkg get`)\n- 🔍 **Check** for updates without applying (`utpm prj sync -c`)\n\n### Coming Soon\n- 🚀 **Publish** directly to Typst Universe (in development)\n\n\n---\n\n## 📦 Installation\n\n### Quick Install\n\n#### Cargo (Cross-platform)\n\n```bash\n# Using cargo-binstall (fastest)\ncargo binstall utpm\n\n# Or build from source\ncargo install utpm\n```\n\n#### Arch Linux\n\n```bash\n# Using an AUR helper (yay, paru, etc.)\nyay -S utpm-bin      # Pre-built binaries\n# or\nyay -S utpm-git      # Build from latest git\n```\n\n#### Homebrew (macOS/Linux)\n\n```bash\n# Coming soon - waiting for tap approval\nbrew install typst-community/utpm/utpm\n```\n\n#### Nix\n\n\u003cdetails\u003e\n\u003csummary\u003e📦 Nix Installation Options\u003c/summary\u003e\n\n##### With Flakes\n\nTemporary shell:\n```bash\nnix shell github:typst-community/utpm\n```\n\nPermanent installation in `flake.nix`:\n```nix\n{\n  inputs.utpm.url = \"github:typst-community/utpm\";\n  \n  outputs = { self, nixpkgs, ... }@inputs: {\n    nixosConfigurations.yourhostname = nixpkgs.lib.nixosSystem {\n      system = \"x86_64-linux\";\n      modules = [{\n        environment.systemPackages = [ \n          inputs.utpm.packages.${system}.default \n        ];\n      }];\n    };\n  };\n}\n```\n\n##### Without Flakes\n\n```bash\ngit clone https://github.com/typst-community/utpm.git\ncd utpm\nnix-build\n./result/bin/utpm\n```\n\n\u003c/details\u003e\n\n### More Package Managers\n\nUTPM is being packaged for multiple package managers:\n\n- 📦 **Snap** - `sudo snap install utpm` (automated publishing)\n- 📦 **Flatpak** - Available on Flathub (semi-automated)\n- 📦 **Debian/Ubuntu** - `.deb` packages (manual, see [docs/PUBLISHING.md](docs/PUBLISHING.md))\n- 📦 **Fedora/RHEL** - RPM packages (manual, see [docs/PUBLISHING.md](docs/PUBLISHING.md))\n\n**For maintainers:** See [docs/PACKAGING.md](docs/PACKAGING.md) for technical details and [docs/SECRETS.md](docs/SECRETS.md) for automation setup.\n\n**Note:** Windows builds are generated here but scoop is managed by an another user. See [Scoop bucket for typst](https://github.com/typst-community/scoop-bucket) for more infos.\n\n### From Source\n\n```bash\ngit clone https://github.com/typst-community/utpm.git\ncd utpm\ncargo install --path .\n```\n\n---\n\n## 🚀 Usage\n\n### GitHub Actions\n\nUse UTPM in your CI/CD workflows:\n\n```yaml\n- name: Setup UTPM\n  uses: Thumuss/setup-utpm@v1\n```\n\nSee the [setup-utpm repository](https://github.com/Thumuss/setup-utpm) for complete documentation and examples.\n\n### Basic Commands\n\n```bash\n# Create a new package\nutpm prj init\n\n# Link for local development\nutpm prj link\n\n# Clone from Typst Universe\nutpm prj clone @preview/example:1.0.0\n\n# Bump version\nutpm prj bump 1.2.0\n\n# List installed packages\nutpm pkg list --tree\n\n# Get metadata for scripts\nVERSION=$(utpm prj metadata -f version)\n```\n\n### Command Overview\n\n#### Project Management (`utpm prj`)\n\n| Command | Alias | Description |\n|---------|-------|-------------|\n| `init` | `n` | Create a new `typst.toml` manifest interactively |\n| `link` | `l` | Link package for local development (respects ignore files) |\n| `clone` | `c` | Clone a package from Typst Universe |\n| `bump` | `b` | Bump package version (supports semantic versioning) |\n| `sync` | `s` | Sync dependencies to latest versions |\n| `metadata` | `m` | Extract metadata for scripts and automation |\n| `publish` | `p` | 🚧 Publish to Typst Universe _(coming soon)_ |\n\n#### Package Management (`utpm pkg`)\n\n| Command | Alias | Description |\n|---------|-------|-------------|\n| `list` | `l` | List installed packages (supports tree view) |\n| `path` | `p` | Show package directory path |\n| `unlink` | `u` | Remove a linked package |\n| `get` | `g` | Get package info from remote |\n| `install` | `i` | Install package from git repository |\n\n#### Other Commands\n\n- `utpm generate` (`g`) - Generate shell completion scripts\n\n### Global Options\n\n```bash\nutpm [OPTIONS] \u003cCOMMAND\u003e\n\nOptions:\n  -v, --verbose \u003cLEVEL\u003e     Logging level (trace, debug, info, warn, error)\n  -o, --output \u003cFORMAT\u003e     Output format (text, json, yaml, toml, hjson)\n  -D, --dry-run             Preview changes without writing to disk\n  -h, --help                Show help information\n  -V, --version             Show version\n```\n\n\u003e 💡 **Tip**: Use `utpm \u003ccommand\u003e --help` for detailed command-specific help\n\n---\n\n## ⚙️ Configuration\n\nUTPM extends the standard `typst.toml` with a `[tool.utpm]` section for package-specific settings.\n\n### Excluding Files\n\nControl which files are included when linking or publishing:\n\n```toml\n[package]\nname = \"my-package\"\nversion = \"0.1.0\"\n# ... other standard fields\n\n[tool.utpm]\nexclude = [\n  \".git\",\n  \".github\",\n  \"*.md\",           # Exclude all Markdown files\n  \"tests/\",         # Exclude tests directory\n  \"examples/\",      # Exclude examples\n  \"**/*.bak\",       # Exclude backup files recursively\n]\n```\n\n**Pattern Syntax:**\n- `*` - Match files in current directory (e.g., `*.md`)\n- `**` - Match recursively (e.g., `**/*.tmp`)\n- `!pattern` - Negate/include pattern\n- Patterns ending with `/` match directories only\n\n**Ignore Files Respected:**\n- `.gitignore` (default: enabled)\n- `.typstignore` (default: enabled)\n- `.ignore` (optional, enable with `--ignore`)\n- Custom patterns in `[tool.utpm]`\n\n### Metadata Extraction\n\nExtract package metadata for scripts and CI/CD:\n\n```bash\n# Get specific field (outputs plain text)\nVERSION=$(utpm prj metadata -f version)\nNAME=$(utpm prj metadata -f name)\n\n# Use in automation\necho \"Building $NAME version $VERSION\"\ngit tag \"v$VERSION\"\n\n# Get all metadata as JSON\nutpm -o json prj metadata | jq '.authors'\n```\n\n**Available fields:** `name`, `version`, `entrypoint`, `authors`, `license`, `description`, `repository`, `homepage`, `keywords`, `categories`, `disciplines`, `compiler`, `exclude`\n\n📄 **Example**: See [`assets/typst.toml.example`](assets/typst.toml.example) for a complete configuration reference.\n\n---\n\n## 📖 Documentation\n\n| Document | Description |\n|----------|-------------|\n| **[📘 Complete Guide](docs/GUIDE.md)** | Comprehensive guide for users, package authors, and contributors |\n| **[🤝 Contributing](docs/CONTRIBUTING.md)** | Code standards, testing, and contribution process |\n| **[🛠️ Development](docs/DEVELOPMENT.md)** | Development setup, workflow, and tools |\n| **[🧪 Testing](docs/TESTING.md)** | Testing guide, running tests, and writing new tests |\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions of all kinds! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.\n\n### Quick Start for Contributors\n\n```bash\n# 1. Install development tools\ncargo install just\n\n# 2. Setup git hooks (optional but recommended)\njust setup-hooks\n\n# 3. Before committing\njust fix    # Auto-format and fix linting issues\njust ci     # Run all checks (format, lint, test)\n```\n\n### What You Can Do\n\n- 🐛 **Report bugs** - Open an issue with details\n- 💡 **Suggest features** - Share your ideas in discussions\n- 📝 **Improve docs** - Help make documentation clearer\n- 🔧 **Fix issues** - Pick up a \"good first issue\"\n- ✨ **Add features** - Implement new functionality\n\nSee [CONTRIBUTING.md](docs/CONTRIBUTING.md) for detailed guidelines on code standards, testing, and the PR process.\n\n---\n\n## 📝 License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n---\n\n## 🙏 Acknowledgments\n\nBuilt with ❤️ by the [Typst Community](https://github.com/typst-community)\n\n**Key Dependencies:**\n- [Typst](https://typst.app/) - The amazing typesetting system\n- [Rust](https://www.rust-lang.org/) - Systems programming language\n- [Clap](https://github.com/clap-rs/clap) - Command-line argument parsing\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**[⬆ Back to Top](#)**\n\nMade with ❤️ for the Typst community\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypst-community%2Futpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypst-community%2Futpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypst-community%2Futpm/lists"}