Quickstart
odpkg is an unofficial Odin package manager focused on simplicity and vendoring. Get up and running in under a minute.
Current version: odpkg v0.6.1 |
Odin used for build/tests: dev-2026-01:f7901cffc
$ odpkg init
$ odpkg add github.com/owner/repo@v1.0.0
$ odpkg install
That's it! Your dependencies are now in vendor/ and tracked in
odpkg.lock.
Patch Notes (v0.6.1)
- Fixed a startup crash in some Linux environments (segmentation fault on
--help/ normal launch) caused by incorrect temporary string cleanup in update-check formatting. odpkg initnow records the Odin compiler version inodpkg.tomlasodin_version.odpkg add,odpkg install, andodpkg updatenow show a soft warning when your current Odin version does not match the project'sodin_version.odpkg installnow also warns when an installed package declares a differentodin_versionin its ownodpkg.toml.- odpkg now checks for newer releases on startup and shows a soft update notice when a newer version is available.
Installation
Download the latest binary for your platform:
VERSION=v0.6.1
ASSET=odpkg-ubuntu-latest
curl -L -o odpkg "https://github.com/bymehul/odpkg/releases/download/${VERSION}/${ASSET}"
chmod +x odpkg
./odpkg --help
$version = "v0.6.1"
$asset = "odpkg-windows-latest.exe"
Invoke-WebRequest -Uri "https://github.com/bymehul/odpkg/releases/download/$version/$asset" -OutFile "odpkg.exe"
.\odpkg.exe --help
Requirements
odpkg uses native HTTP for plain HTTP and libcurl (with TLS deps like mbedtls) for HTTPS registry fetches.
gitin PATHlibcurlinstalled (with TLS deps likembedtls)
odpkg init
Initialize a new project with odpkg.toml.
$ odpkg init [name]
Creates a configuration file in the current directory:
[odpkg]
name = "my-project"
version = "0.1.0"
odin_version = "dev-2026-01:f7901cffc"
vendor_dir = "vendor"
[dependencies]
odpkg add
Add a dependency to your project.
From Repository
$ odpkg add github.com/owner/repo@v1.0.0 [alias]
$ odpkg add owner/repo # shorthand
From Registry
$ odpkg add --registry tempo # looks up slug in registry
$ odpkg add --registry raylib rl # with custom alias
odpkg search to find package slugs!
odpkg remove
Remove a dependency by its alias name.
$ odpkg remove raylib
odpkg install
Install all dependencies into vendor/.
$ odpkg install
- Uses
odpkg.lockif present (reproducible builds) - Otherwise resolves from
odpkg.toml - Automatically installs transitive dependencies
- Shows a soft warning when recorded
odin_versiondoes not match your current Odin version - Verifies SHA256 hashes for integrity
odpkg update
Re-resolve refs and update odpkg.lock.
$ odpkg update
Use this when you want to pull the latest commits for dependencies.
odpkg list
List dependencies or browse the registry.
$ odpkg list # local deps or registry
$ odpkg list --deps # force local deps
$ odpkg list --registry # browse registry
$ odpkg list --registry --refresh # re-fetch
odpkg search
Search the package registry by name, slug, or description.
$ odpkg search json
$ odpkg search template --refresh
odpkg version
Print the current version of odpkg.
$ odpkg version
odpkg 0.6.1
Also available as odpkg -v or odpkg --version.
odpkg help
Show usage information and available commands.
$ odpkg help
odpkg - Unofficial Odin package manager
Usage:
odpkg init [name]
odpkg add <repo[@ref]> [alias]
odpkg add --registry <slug> [alias]
odpkg remove <alias>
odpkg install
odpkg update
odpkg list [--registry | --deps] [--refresh]
odpkg search <query> [--refresh]
odpkg version
Also available as odpkg -h or odpkg --help.
odpkg.toml
The configuration file defines your project and dependencies.
[odpkg]
name = "my-game"
version = "1.0.0"
odin_version = "dev-2026-01:f7901cffc"
vendor_dir = "vendor"
[dependencies]
raylib = { repo = "raysan5/raylib", ref = "v5.0" }
tempo = { repo = "kalsprite/tempo", ref = "main" }
odpkg.lock
The lockfile records exact commit hashes and SHA256 hashes for reproducible builds.
The lockfile is auto-generated. Commit it to version control.
Dependency Syntax
Structured (preferred)
raylib = { repo = "raysan5/raylib", ref = "v5.0" }
Short form
raylib = "github.com/raysan5/raylib@v5.0"
| Field | Description |
|---|---|
repo |
owner/repo, github.com/owner/repo, or full URL |
ref |
Tag, branch, or commit hash |
Package Registry
odpkg fetches packages from the official Odin registry:
https://api.pkg-odin.org/packages
Registry data is cached locally:
- Linux:
~/.cache/odpkg/packages.json - macOS:
~/Library/Caches/odpkg/packages.json - Windows:
%LOCALAPPDATA%\odpkg\packages.json
Transitive Dependencies
odpkg automatically installs nested dependencies!
If a package you install has its own odpkg.toml, those dependencies are installed
too.
Integrity Verification
odpkg computes SHA256 hashes of installed packages and stores them in odpkg.lock.
On subsequent installs, hashes are verified to detect corruption or tampering.
[[deps]]
name = "raylib"
repo = "raysan5/raylib"
ref = "v5.0"
commit = "abc123..."
hash = "sha256:e3b0c44298fc1c149..."
Security Notes
- Dependency names are validated (no path separators).
- Installs are restricted to the configured
vendor_dir. - Lockfile commits are validated and verified after checkout.
- HTTPS registry fetch uses libcurl with certificate verification enabled.