A functional language with invisible types, safe ownership, and algebraic effects.
.oois the primary source file extension (from l-oo-n).loonis supported as a backward-compatible fallback- Manifest:
pkg.oo(falls back topkg.loon) - Lockfile:
lock.oo(falls back tolock.loon)
loon/
├── crates/
│ ├── loon-lang/ # Core: parser, type checker, interpreter
│ ├── loon-cli/ # CLI: run, repl, fmt, explain
│ ├── loon-lsp/ # Language server protocol
│ └── loon-wasm/ # WASM bindings for browser
├── web/ # Website (written in Loon, uses .loon files)
│ ├── public/ # Static assets, WASM bootstrap
│ └── src/ # Loon source: pages, components, router
├── tree-sitter-loon/ # Tree-sitter grammar
├── samples/ # Example programs (.oo files)
└── docs/ # Documentation
- Version is derived from git tags at build time (
build.rsin loon-cli) loon --versionshows the git-described version (e.g.0.4.20,0.4.20-3-gabcdef0)- To release:
git tag v0.X.Y && git push --tags Cargo.tomlworkspace version is a fallback only- The web changelog at
web/src/pages/blog.loonis the user-facing changelog
cargo test --workspace # Run all tests
cargo run -p loon-cli -- run samples/hello.oo # Run a sample
cargo run -p loon-cli -- fmt samples/ # Format files
cargo run -p loon-cli -- new test-proj # Creates pkg.oo + src/main.oo- Module resolution: tries
.oofirst, falls back to.loon - Manifest/lockfile loading: tries
.oofirst, falls back to.loon - New file creation always uses
.oo collect_loon_filesin CLI accepts both.ooand.loonextensions- web/src/ files remain
.loon(separate concern, large rename)