Git-native package manager for Skuf. Plain-text manifests, one-line lock files, and an AI-killer feature: norm deps outputs the full API surface of every dependency.
# Create a project
$ norm init myapp
created .norm
created src/main.skf
$ cd myapp
# Build and run
$ norm run
Hello from norm!
# Build to binary
$ norm build
built dist/myapp
$ ./dist/myapp
Hello from norm!pkg myapp 0.1.0
by alexone
repo github.com/alexone/myapp
entry src/main.skf
// dependencies
need http 1.2.0
need uglbt 0.3.0 { http, log }
need logger 0.1.0 github.com/user/loggerNo JSON, no TOML, no YAML. The .norm file uses the same line-oriented style as Skuf. An AI reads it in 10 tokens.
One command outputs every fn/type signature from all dependencies. Paste into any LLM for instant, complete API context.
No central registry. Packages are git repos. Default source: github.com/skuf-lang/<name>. Override per-dep.
Each dependency is one line in .norm.lock. Sorted alphabetically. Deterministic diffs, easy code review.
norm init, norm run, norm build. No setup wizards, no config files beyond .norm. Convention over configuration.
Running skuf build/run/test without a file in a .norm project auto-delegates to norm. Seamless.
norm deps — the AI killer featureOne command gives an LLM the complete API surface of all dependencies. No documentation lookups needed.
pkg myserver 0.1.0
entry src/main.skf
need http 1.2.0
need uglbt 0.3.0 { http, log }--- http@1.2.0 ---
MODULE http
FN get(url: string) -> Response
FN post(url: string, body: string) -> Response
TYPE Response = Data(status, body, headers)
--- uglbt@0.3.0 ---
MODULE uglbt
FN serve(port: int) -> void !io
FN route(method, path, handler) -> void
TYPE Request = Data(method, path, body)pkg <name> <version>Package name and semver version (required, must be first)entry <path>Entry point file (default: src/main.skf)need <pkg> <version> [url] [{ imports }]Declare a dependency (default source: github.com/skuf-lang/<pkg>)by <author>Author or organization namerepo <url>Canonical git URL for this package// commentLine comments (blank lines allowed anywhere)norm init [name]Create .norm manifest and src/main.skf scaffoldnorm installResolve and fetch all dependencies to ~/.skuf/pkgs/norm add <pkg> [ver] [url]Add a dependency to .norm and install itnorm remove <pkg>Remove a dependency from .normnorm buildInstall deps + compile entry point to dist/norm runInstall deps + compile and run entry pointnorm testInstall deps + run test blocks in entry pointnorm depsOutput fn/type signatures from all dependenciesnorm listList locked dependencies with cache statusnorm homeShow ~/.skuf/pkgs/ cache directory| npm / pip / cargo | norm | |
|---|---|---|
| Manifest | JSON / TOML / YAML | Plain text (same syntax as Skuf) |
| Registry | Central server | Git repos (no server needed) |
| Lock file | Complex nested format | One line per dependency |
| API discovery | Read docs / source files | norm deps (all signatures in one command) |
| Tokens to understand | Hundreds | Tens |
Everything an AI needs fits in a single context window.