Modules and Separate Compilation
use "path" imports a source module or a source-elided .sdi interface.
Declarations are private unless marked pub.
use "math_library"
pub struct measurement {
pub value: i64
}
pub fn double(value: i64) -> i64 {
value * 2
}
The clean compiler resolves relative source/interfaces, local manifest path
dependencies, and installed target/ABI-qualified packages. .sdi preserves
public types, generic templates/common
instances, effects, ownership, provenance, destructor/clone contracts,
dependency hashes, target, and ABI identity. Private implementation changes can
leave consumer identity stable; public semantic/ABI changes invalidate it.
Package layout
package/
├── seed.toml
├── src/main.sd
├── src/lib.sd
└── tests/*.sd
The repository launcher supports new, check, format, incremental build,
run, test, doc, lint, package commands, LSP, and publish --check. Local
compiled libraries can be installed using the direct compiler's
--install-library, --install-interface, and --package options. Dynamic
seed dependencies are the hosted default; --static selects installed static
archives.
seed pkg resolve/add/update/prune provides deterministic semantic-version
selection, seed.lock, SHA-256 immutable objects, HTTPS/file registries,
path/git overrides, offline reuse, atomic publication, and defensive archive
extraction. Resolved sources are exposed under .seed/deps; compiled artifacts
remain target/ABI-qualified in the compiler library store. Actual remote
publication is deliberately separate; seed publish --check validates a
package locally without executing unrestricted build scripts.
Do not treat legacy Grove names or llvm-v1 built-ins as automatically visible.
An ordinary library API exists only when imported source/.sdi declares it.