odpkg is an unofficial Odin package manager focused on simplicity and vendoring. It installs dependencies into a local vendor/ folder and keeps a lockfile for reproducible builds.
odpkg init
odpkg add github.com/owner/repo@v1.0.0
odpkg installgitin PATHlibcurlinstalled (and TLS deps likembedtls) for registry list/search andodpkg add --registry
- Dependency names are validated and must be simple (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 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 versionodpkg initcreatesodpkg.tomlin the current folder.odpkg initstores the current Odin compiler version inodpkg.tomlasodin_version.odpkg addadds or updates a dependency entry inodpkg.toml.odpkg add --registry <slug>looks up a package in the registry by slug.odpkg removeremoves a dependency by alias name.odpkg installinstalls intovendor/and writesodpkg.lock.odpkg updatere-resolves refs and updatesodpkg.lock.odpkg listdefaults to registry output when no local deps exist.odpkg list --depsforces local deps output fromodpkg.toml.odpkg list --registryforces registry output.odpkg list --registry --refreshre-fetches registry data.odpkg search <query>filters registry by name/slug/description.- odpkg checks for newer releases on startup and shows a soft update notice.
[odpkg]
name = "my-project"
version = "0.1.0"
odin_version = "dev-2026-01:f7901cffc"
vendor_dir = "vendor"
[dependencies]
raylib = { repo = "raysan5/raylib", ref = "v5.0" }Preferred (structured):
[dependencies]
raylib = { repo = "raysan5/raylib", ref = "v5.0" }Short form (accepted):
[dependencies]
raylib = "github.com/raysan5/raylib@v5.0"Notes:
repocan beowner/repo,github.com/owner/repo, or a fullhttps://URL.refcan be a tag, branch, or commit hash.
Order of alias resolution:
- Explicit alias argument in
odpkg add - Dependency key name in
odpkg.toml - Repo name (last path segment)
- Records exact commit hashes for every dependency.
- Must not be edited manually.
- Used automatically by
odpkg installwhen present.
odpkg installusesodpkg.lockif present, otherwise resolves fromodpkg.toml.odpkg updatere-resolves refs and updatesodpkg.lock.
The registry is fetched from:
https://api.pkg-odin.org/packages
Registry data is cached in your OS cache directory:
- Linux:
~/.cache/odpkg/packages.json - macOS:
~/Library/Caches/odpkg/packages.json - Windows:
%LOCALAPPDATA%\odpkg\packages.json
Add a dependency:
odpkg add github.com/kalsprite/tempoInstall all deps:
odpkg installList registry packages:
odpkg list --registryForce refresh:
odpkg list --registry --refresh- GitHub-only sources (no GitLab/Bitbucket/self-hosted yet).
- Vendoring-first installs into
vendor/(no global cache). - No subdir packages (repo root only).
- Minimal TOML parsing.
- No private repo auth flows yet.
- If
odpkg list --registryfails, check your network connection. - If
odpkg installfails, verifygitis installed and the repo URL is correct.
odpkg is licensed under the zlib License.