Esc
Start typing to search...

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

SyntaxMeaning
1.2.3Exact version
^1.2Compatible (1.2.0 <= v < 2.0.0)
~1.2Patch updates (1.2.0 <= v < 1.3.0)
>=1.0Minimum 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

  1. Update version in keel.toml
  2. Run keel publish --dry-run to verify
  3. Run keel publish to publish

Requirements:

  • Valid keel.toml with 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