Package Manager
Note: This feature is planned but not yet implemented. This page describes the intended design.
Keel will include a built-in package manager for dependency management.
Adding Dependencies
Add packages with keel add:
keel add json # Latest version
keel add http@2.0 # Specific version
keel add --dev test # Development dependency
This updates keel.toml:
[dependencies]
json = "1.2"
http = "2.0"
[dev-dependencies]
test = "1.0"
Version Syntax
| Syntax | Meaning |
|---|---|
1.2.3 | Exact version |
^1.2 | Compatible (1.2.0 <= v < 2.0.0) |
~1.2 | Patch updates (1.2.0 <= v < 1.3.0) |
>=1.0 | Minimum version |
* | Any version |
Lock File
keel.lock records exact resolved versions:
[[package]]
name = "json"
version = "1.2.3"
checksum = "sha256:abc123..."
[[package]]
name = "http"
version = "2.0.1"
checksum = "sha256:def456..."
dependencies = ["json"]
Commit keel.lock for reproducible builds.
Updating Dependencies
keel update # Update all packages
keel update json # Update specific package
keel update --major # Allow major version bumps
Removing Dependencies
keel remove json
Viewing Dependencies
keel deps # List direct dependencies
keel deps --tree # Show dependency tree
keel deps --outdated # Show available updates
Private Registries
Configure in ~/.kl/config.toml:
[[registries]]
name = "company"
url = "https://packages.company.com"
token = "..."
Use in keel.toml:
[dependencies]
internal-lib = { version = "1.0", registry = "company" }
Git Dependencies
Reference packages directly from git:
[dependencies]
my-lib = { git = "https://github.com/user/repo", branch = "main" }
my-lib = { git = "https://github.com/user/repo", tag = "v1.0" }
my-lib = { git = "https://github.com/user/repo", rev = "abc123" }
Local Dependencies
For development:
[dependencies]
my-lib = { path = "../my-lib" }
Publishing Packages
- Update version in
keel.toml - Run
keel publish --dry-runto verify - Run
keel publishto publish
Requirements:
- Valid
keel.tomlwith name, version, license - README.md in project root
- Authenticated with registry (
keel login)
Creating a Library
keel new my-lib --lib
Structure:
my-lib/
├── keel.toml
├── src/
│ └── lib.kl # Library entry point
└── tests/
└── lib_test.kl
Export public API in src/lib.kl:
module MyLib
export (parse, format, Config)
-- Public functions and types