Unroll is the package manager, build system, and developer tooling ecosystem for the Oite language. It manages Rolls dependencies, handles compilation, and provides developer experience features like LSP support.
┌─────────────────────────────────────────┐
│ User App Code │
└──────────────────┬──────────────────────┘
│
┌──────────────────▼──────────────────────┐
│ Rolls (official system libs) │
│ @rolls/http, @rolls/tls, @rolls/db │
└──────────────────┬──────────────────────┘
│
┌──────────────────▼──────────────────────┐
│ Unroll (runtime + tooling) │ ← THIS REPO
│ pkg manager, lockfiles, bundler, LSP │
└──────────────────┬──────────────────────┘
│
┌──────────────────▼──────────────────────┐
│ Oite (language core) │
│ compiler, type system, ABI, bootstrap │
└─────────────────────────────────────────┘
- Dependency Management - Add, update, and remove Rolls with lockfile support
- Build System - Compile Oite projects to native binaries with LTO
- Cross-Compilation - Target multiple platforms from a single machine
- Language Server - Full LSP support for IDE integration
- Code Formatting - Built-in formatter (
unroll fmt) - Linting - Static analysis and best practices (
unroll lint) - Testing - Integrated test runner with coverage support
- Documentation - Auto-generate docs from code comments
# Build from source (requires Rust)
cargo install --path .
# Or download prebuilt binary
curl -fsSL https://oite-lang.org/install-unroll.sh | sh# Create a new application
unroll new my-app
cd my-app
# Or create a library
unroll new my-lib --libmy-app/
├── unroll.toml # Project manifest
├── unroll.lock # Lockfile (auto-generated)
├── src/
│ ├── main.ot # Entry point
│ └── lib.ot # Library root (for --lib projects)
├── tests/
│ └── integration_test.ot
├── benches/
│ └── perf_bench.ot
├── examples/
│ └── basic_usage.ot
└── target/
├── debug/
│ └── my-app # Debug binary
└── release/
└── my-app # Release binary
unroll new <name> # Create new project
unroll new <name> --lib # Create library project
unroll init # Initialize in existing directoryunroll add @rolls/http # Add dependency
unroll add @rolls/tls --optional # Add optional dependency
unroll add --dev @rolls/test # Add dev dependency
unroll remove @rolls/http # Remove dependency
unroll update # Update all dependencies
unroll update @rolls/http # Update specific dependencyunroll build # Debug build
unroll build --release # Release build with ThinLTO
unroll build --dist # Distribution build with Full LTO
unroll build --target wasm32 # Cross-compile to WebAssembly
unroll run # Build and run
unroll run --release # Run release build
unroll watch # Watch mode (rebuild on changes)
unroll clean # Clean build artifactsunroll test # Run all tests
unroll test --filter "http*" # Run filtered tests
unroll test --coverage # Run with coverage reportunroll fmt # Format code
unroll fmt --check # Check formatting (CI)
unroll lint # Run linter
unroll lint --fix # Auto-fix issues
unroll check # Type check only
unroll doc # Generate documentation
unroll doc --open # Generate and open in browserunroll search <query> # Search for packages
unroll info @rolls/http # View package info
unroll info @rolls/http --versions # List all versions
unroll login # Authenticate with registry
unroll publish # Publish a Roll
unroll deprecate <version> # Deprecate a version[package]
name = "my-app"
version = "0.1.0"
edition = "2026"
license = "MIT"
description = "My awesome app"
repository = "https://github.com/example/my-app"
keywords = ["web", "server"]
[dependencies]
"@rolls/http" = "0.1"
"@rolls/json" = "0.1"
[dev-dependencies]
"@rolls/test" = "0.1"
[features]
default = ["json"]
json = ["@rolls/json"]
full = ["json", "@rolls/tls"]
[build]
target = "native" # native | wasm32
optimization = "release" # debug | release
lto = true # Link-time optimization
[profile.release]
opt-level = 3
lto = "thin"
[profile.dev]
opt-level = 0
debug = true
[profile.dist]
opt-level = 3
lto = "fat"
strip = trueUnroll automatically generates and maintains a lockfile for reproducible builds:
# This file is auto-generated by Unroll. Do not edit.
# unroll.lock format version 1
[[package]]
name = "@rolls/http"
version = "0.1.5"
source = "registry+https://registry.oite.org"
checksum = "sha256:abcd1234..."
dependencies = [
"@rolls/async 0.1.2",
"@rolls/tls 0.1.0 (optional)",
]
[[package]]
name = "@rolls/async"
version = "0.1.2"
source = "registry+https://registry.oite.org"
checksum = "sha256:efgh5678..."Unroll includes a full-featured LSP server for IDE integration.
- Auto-completion for types, functions, and imports
- Hover information with types and documentation
- Go to definition / Find references
- Rename symbol refactoring
- Real-time diagnostics
- Code actions and quick fixes
- Integrated formatting
// .vscode/settings.json
{
"unroll.path": "/usr/local/bin/unroll",
"unroll.trace.server": "verbose",
"unroll.inlayHints.enabled": true,
"unroll.checkOnSave": true
}| Target | Description |
|---|---|
x86_64-unknown-linux-gnu |
Linux x64 (glibc) |
x86_64-unknown-linux-musl |
Linux x64 (static) |
aarch64-unknown-linux-gnu |
Linux ARM64 |
x86_64-apple-darwin |
macOS x64 |
aarch64-apple-darwin |
macOS ARM64 (Apple Silicon) |
x86_64-pc-windows-msvc |
Windows x64 |
wasm32-unknown-unknown |
WebAssembly |
wasm32-wasi |
WASM + WASI |
# Install target toolchain
unroll target add aarch64-unknown-linux-gnu
# Cross-compile
unroll build --target aarch64-unknown-linux-gnuThe default registry is at https://registry.oite.org.
Configure private registries for enterprise use:
# ~/.unroll/config.toml
[registries]
default = "https://registry.oite.org"
company = "https://rolls.company.internal"
[registries.company]
token = "env:COMPANY_REGISTRY_TOKEN"| Metric | Target |
|---|---|
| Cold start | <100ms |
| Incremental build | <500ms |
| LSP response | <50ms |
| Dependency resolution | <1s (cached) |
- Project structure design
- Core CLI framework
- Manifest parsing (unroll.toml)
- Lockfile generation
- Dependency resolver
- Registry client
- Build system integration
- LSP server
- Code formatter
- Linter
- Test runner
- Documentation generator
- Workspace support
- Plugin system
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Unroll is distributed under the terms of the Apache License (Version 2.0).
See LICENSE for details.