Documentation
This page explains how packages work on TPIX — from creating and publishing a package to downloading and using it in your Typst projects.
Getting Started
To interact with TPIX packages you need:
- A TPIX account — sign up for free or subscribe to a plan for additional features.
- The TPIX CLI or Typstify — Typst does not download packages from TPIX automatically; only the official Typst Universe is supported natively.
See the TPIX Client page for installation and authentication instructions.
Workflow Overview
The typical workflow for TPIX packages is:
Create package → Bundle → Upload → Browse / Search → Download → Use in Typst
1. Create Your Package
A TPIX package is a directory containing Typst source files and a typst.toml manifest. At minimum you need:
my-package/
typst.toml # Package manifest (required)
lib.typ # Entrypoint file
README.md # Documentation (recommended)
LICENSE # License file (recommended)
2. Write the Manifest
The manifest follows the same typst.toml format as official Typst packages:
[package]
name = "my-package"
version = "1.0.0"
entrypoint = "lib.typ"
authors = ["Your Name"]
license = "MIT"
description = "A brief description of the package."
You can also specify files to exclude from the archive:
[package]
# ... other fields
exclude = [".git", "*.test", "node_modules/"]
For the full manifest specification, refer to the official Typst packaging docs.
3. Bundle the Package
Use the TPIX CLI to create a .tar.gz archive:
tpix bundle ./my-package
This validates the manifest and produces an archive ready for upload. You can also specify an output path or additional exclusions:
tpix bundle ./my-package -o my-package.tar.gz -e ".git" -e "node_modules/"
4. Upload to TPIX
Push the archive to a namespace you have write access to:
tpix push my-package.tar.gz mynamespace
After upload, TPIX validates the package (structure, manifest fields, and security checks) and makes it available in the namespace.
5. Download and Use
Other users in the namespace can download the package:
tpix get @mynamespace/my-package:1.0.0
The CLI downloads the package and its transitive dependencies to the local Typst package cache. Once cached, you can use it in your Typst files:
#import "@mynamespace/my-package:1.0.0": *
You can also scan an entire project and fetch every dependency at once:
tpix pull
This recursively scans all .typ files in the current directory for #import statements and downloads any missing packages. Use --dry-run to preview what would be fetched.
TPIX Packages vs Official Typst Packages
TPIX packages share the same typst.toml manifest format as official Typst Universe packages, but there are important differences:
| Official Typst Universe | TPIX | |
|---|---|---|
| Manifest format | typst.toml |
Same typst.toml format |
| Categories & disciplines | Predefined lists (max 3 categories) | Same categories and disciplines as official Typst packages |
| Namespace | @preview only |
Custom namespaces (@myteam, @company, etc.) |
| Visibility | Public only | Configurable (public or private) |
| Fonts | Allowed; users need to configure font paths | Allowed — ship font files directly in your package |
| Package size | Recommended to be small | More generous size limits |
| Licensing | Follows specific guidelines (OSI-approved or CC licenses) | Flexible license options |
| Auto-download | Typst compiler fetches automatically | Requires TPIX CLI or Typstify to download first |
| Publishing | Submit via GitHub PR to typst/packages |
Upload directly with tpix push |
| Access control | None (everything is public) | Namespace-level permissions (read/write/owner) |
| Naming rules | Cannot use "obvious" names (e.g., slides), cannot contain "typst" |
Same naming rules as official Typst packages |
Fonts
The official Typst packaging docs allow shipping fonts in packages — they can be placed in the project directory or configured via --font-path to be detected. On TPIX, shipping fonts in your package is fully supported without restriction, making it straightforward to distribute self-contained templates with custom typography.
Supported Licenses
TPIX supports a wide range of licenses. While the official Typst Universe follows specific license guidelines, TPIX offers more flexibility. When specifying the license field in your typst.toml, you can use:
SPDX License Identifiers
Most common open-source licenses are supported via SPDX identifiers:
[package]
name = "my-package"
version = "1.0.0"
license = "MIT" # MIT License
# license = "Apache-2.0" # Apache License 2.0
# license = "GPL-3.0" # GNU General Public License v3.0
# license = "BSD-3-Clause" # BSD 3-Clause
# license = "ISC" # ISC License
# license = "MPL-2.0" # Mozilla Public License 2.0
TPIX validates your license against the official SPDX list. If the license identifier is not recognized, you'll see a warning but the package can still be uploaded.
Proprietary and Unlicensed
For private or commercial packages, you can use:
[package]
# For proprietary/closed-source packages
license = "Proprietary"
# For packages with no license (all rights reserved)
license = "UNLICENSED"
Custom Licenses with LicenseRef
For non-standard or custom licenses, use the SPDX LicenseRef- prefix followed by your license name:
[package]
# For a custom or proprietary license
license = "LicenseRef-MyCompany-Internal"
# Or combine with standard licenses using SPDX expressions
# license = "MIT AND LicenseRef-MyCompany-Internal"
This is the official SPDX way to reference custom licenses. Include the full license text in a LICENSE file in your package so users can understand your terms.
License File
While the license field in typst.toml is required, we also recommend including a LICENSE file in your package archive for clarity:
my-package/
typst.toml
lib.typ
LICENSE # Full license text (recommended)
This makes it easier for users to understand your terms when they download and use your package.
Key Difference: Manual Download
Typst does not resolve TPIX packages automatically. You must use the TPIX CLI (or Typstify) to download packages to your local cache before Typst can use them. The CLI handles transitive dependencies automatically — when you tpix get a package or run tpix pull in a project, all required packages are fetched. Once downloaded, #import statements work exactly the same way.
Namespaces
Packages on TPIX are organized into namespaces. Each namespace has its own package index and access control. TPIX does not distinguish between user and team namespaces — any namespace can have multiple members with different permission levels.
@preview— mirrors the official Typst Universe (read-only, updated automatically).- Custom namespaces — created by users for personal or team use. Invite members and assign read, write, or owner permissions as needed.
Free-tier users can create one public namespace, with the name set to their username (or username plus a short suffix if the name is already taken). Subscribed users can create additional namespaces (including private namespaces) without restriction and invite members with read, write, or owner permissions. You can manage namespaces from the Namespaces page or via the TPIX CLI.
Package Versions
By default, package versions are immutable. Once a version is published, it cannot be overwritten or deleted. To make changes, publish a new version with an incremented version number following semantic versioning.
Namespace owners can enable version overwriting in the namespace settings page. When enabled, uploading a package with an existing version number will replace the previous release. This can be useful during early development, but immutable versions are recommended for production namespaces to ensure reproducible builds.
Subscription Plans
TPIX offers a free tier and paid subscription plans.
Free Tier
All registered users start on the free tier:
- Create one public namespace, with the name set to your username (or username plus a short suffix if the name is already taken). The namespace name cannot be changed once created.
- Upload packages to your own public namespace.
- Browse, search, and download packages from all public namespaces via the website or the TPIX CLI.
- You cannot create private namespaces or access private namespaces.
- You cannot invite members to your namespace.
Subscribed Users
With an active subscription, you get full access to TPIX:
- Create unlimited namespaces, including private namespaces with access control.
- Invite members to your namespaces (public or private) with read, write, or owner permissions.
- Members with write permission can upload packages to your namespaces as long as your subscription is active.
- Enable audit logging on your namespaces to track package publishing, deletions, and member changes.
- Use the TPIX CLI and Typstify for all operations.
- Use the Zotero sync feature to export bibliographies in BibTeX, BibLaTeX, or Hayagriva format.
Visit Typstify to subscribe, or go to your account settings to link an existing subscription.
Zotero Sync
See the Zotero Sync page for documentation on syncing your Zotero bibliographies.