packages

normie (norm)

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.

brew install skuf // includes norm

Quick Start

terminal
# 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!
.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/logger

What normie gives you

.norm

Plain-Text Manifests

No JSON, no TOML, no YAML. The .norm file uses the same line-oriented style as Skuf. An AI reads it in 10 tokens.

@ai

norm deps

One command outputs every fn/type signature from all dependencies. Paste into any LLM for instant, complete API context.

git

Git-Native

No central registry. Packages are git repos. Default source: github.com/skuf-lang/<name>. Override per-dep.

lock

One-Line Lock

Each dependency is one line in .norm.lock. Sorted alphabetically. Deterministic diffs, easy code review.

0

Zero Config

norm init, norm run, norm build. No setup wizards, no config files beyond .norm. Convention over configuration.

>>>

Skuf Integration

Running skuf build/run/test without a file in a .norm project auto-delegates to norm. Seamless.

norm deps — the AI killer feature

One command gives an LLM the complete API surface of all dependencies. No documentation lookups needed.

.norm
pkg myserver 0.1.0
entry src/main.skf

need http 1.2.0
need uglbt 0.3.0 { http, log }
$ norm deps
--- 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)

.norm Reference

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 name
repo <url>Canonical git URL for this package
// commentLine comments (blank lines allowed anywhere)

Commands

norm init [name]Create .norm manifest and src/main.skf scaffold
norm installResolve and fetch all dependencies to ~/.skuf/pkgs/
norm add <pkg> [ver] [url]Add a dependency to .norm and install it
norm remove <pkg>Remove a dependency from .norm
norm buildInstall deps + compile entry point to dist/
norm runInstall deps + compile and run entry point
norm testInstall deps + run test blocks in entry point
norm depsOutput fn/type signatures from all dependencies
norm listList locked dependencies with cache status
norm homeShow ~/.skuf/pkgs/ cache directory

Why normie?

npm / pip / cargonorm
ManifestJSON / TOML / YAMLPlain text (same syntax as Skuf)
RegistryCentral serverGit repos (no server needed)
Lock fileComplex nested formatOne line per dependency
API discoveryRead docs / source filesnorm deps (all signatures in one command)
Tokens to understandHundredsTens

Everything an AI needs fits in a single context window.

Ready to use normie?

Install Skuf and start managing packages in seconds.