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

Terminal
$ 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 init now records the Odin compiler version in odpkg.toml as odin_version.
  • odpkg add, odpkg install, and odpkg update now show a soft warning when your current Odin version does not match the project's odin_version.
  • odpkg install now also warns when an installed package declares a different odin_version in its own odpkg.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:

Bash
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
PowerShell
$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

â„šī¸
git is required; libcurl is required for registry features.

odpkg uses native HTTP for plain HTTP and libcurl (with TLS deps like mbedtls) for HTTPS registry fetches.

  • git in PATH
  • libcurl installed (with TLS deps like mbedtls)

odpkg init

Initialize a new project with odpkg.toml.

$ odpkg init [name]

Creates a configuration file in the current directory:

odpkg.toml
[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
💡
Tip: Use 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.lock if present (reproducible builds)
  • Otherwise resolves from odpkg.toml
  • Automatically installs transitive dependencies
  • Shows a soft warning when recorded odin_version does 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 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.toml
[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.

âš ī¸
Do not edit manually!

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.

🔄
Cycle protection: Maximum depth of 10 to prevent infinite loops.

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.

odpkg.lock excerpt
[[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.

odpkg is licensed under the zlib License. Made with â¤ī¸ for the Odin community.