Garnet — half mechanical-rust lattice, half faceted ruby gem, glowing neural-graph core

GARNET

Rust Rigor. Ruby Velocity. One Coherent Language.

A project by Island Development Crew

The Three Pillars

Two languages, one grammar.

Rust gives you mathematical rigor at the cost of cognitive load. Ruby gives you conversational beauty at the cost of runtime surprise. Garnet gives you both — within a single coherent language whose mode boundary is the reconciliation.

Rust

Rigor

Mathematical correctness. Memory discipline. Zero-cost abstractions. Performance to the metal.

But — cognitive load, lifetimes-as-mental-stack, ceremony.

Garnet

Reconciliation

Managed mode (def + ARC + exceptions) feels Ruby-like. Safe mode (@safe + fn + ownership + Result) feels Rust-like.

The mode boundary auto-bridges errors and ARC ↔ affine.

Ruby

Velocity

Conversational beauty. High velocity. Joyful to read, fast to write. DSLs flow.

But — ambient authority, runtime surprise, no compile-time net.

Every team eventually picks: Rust for the hot path, Ruby for the orchestration, and writes a painful FFI between them. Or picks one language and swallows its weakness.

Garnet's dual-mode design makes the same source file velocity-first at the top level and rigor-first in the safe modules — with no FFI in between.
— The Reconciliation, Paper III §1

Built for code agents write and humans accept

Capability security, bounded execution, and signed provenance are well-precedented — Pony and Austral, Wasmtime and eBPF, Sigstore and SLSA each do a piece well. Garnet's bet is the integration, not the parts: no existing language combines capability annotations, bounded execution, sealed provenance, and capability-surface diffing, targeted at agent-authored code.

The headline is diff-caps: when a dependency or an agent's PR changes what authority the code can exercise, Garnet answers "what new authority am I granting?" in one screen — turning the review bottleneck (the binding constraint on accepting AI-written code) into a machine-checkable diff. That is the part with no cross-language equivalent, and the reason a new language — not a linter — is warranted.
— Positioning, honest: integration over pillar-by-pillar novelty

Side By Side

Same logic. Three cognitive profiles.

Switch between examples to see how Garnet inherits Rust's shape and Ruby's brevity. The keyword chooses the register: def = managed, fn = safe.

RUST
fn greet(name: &str)
    -> String {
  format!(
    "Hello, {}!", name)
}
RUBY
def greet(name)
  "Hello, #{name}!"
end
GARNET
# Managed — Ruby feel
def greet(name) {
  "Hello, #{name}!"
}

# Safe — Rust rigor
@safe
fn greet(
  borrow name: String)
  -> String {
  "Hello, #{name}!"
}
RUST
fn read_config(
  path: &Path)
  -> Result<Config, io::Error> {
  let content =
    fs::read_to_string(path)?;
  toml::from_str(&content)
    .map_err(convert_err)
}
RUBY
def read_config(path)
  content = File.read(path)
  TOML.parse(content)
rescue Errno::ENOENT
  nil
end
GARNET
@caps(fs)
def read_config(path) {
  try {
    TOML.parse(
      fs::read_file(path))
  } rescue e: FileNotFound {
    nil
  }
}
RUST
let names: Vec<String> =
  users.iter()
    .filter(|u| u.active)
    .map(|u| u.name.clone())
    .collect();
RUBY
names = users
  .select(&:active)
  .map(&:name)
GARNET
# Pipeline style
let names = users
  |> filter(|u| u.active)
  |> map(|u| u.name)

# Ruby block style
let names = users
  .filter do |u| u.active end
  .map    do |u| u.name  end
RUST
use some_vector_db::*;
use some_episodic_log::*;

struct Agent {
  events:
    EventLog<Event>,
  facts:
    VectorStore<Fact>,
}

impl Agent {
  // ...setup ceremony...
}
RUBY
class Agent
  def initialize
    @events = []
    @facts  = {}
  end

  def remember(e)
    @events << e
  end
end
GARNET
actor Agent {
  memory episodic
    events : EpisodeStore<Event>
  memory semantic
    facts  : VectorIndex<Fact>

  protocol remember(e: Event)
    -> Bool
  protocol recall(q: String)
    -> Array<Fact>

  on remember(e) {
    events.append(e); true
  }
}

Six Pillars

What Garnet adds at the language layer.

These are not libraries. They are first-class language constructs — checked at compile time, integrated through the whole toolchain, designed to compose.

def · fn

Dual-Mode Reconciliation

Same grammar, two registers. Managed mode (def) reads like Ruby. Safe mode (@safe fn) reads like Rust. The boundary auto-bridges errors + ownership.

@safe

Visible Mode Boundary

Every managed↔safe call is logged via ModeAuditLog. Reviewers read one file to enumerate every trust crossing in the program.

@caps(fs)

Capability Model

Every function declares its OS-authority budget. CapCaps propagator verifies transitively at compile time — no ambient authority, ever.

memory · 4

Agent-Native Memory

First-class memory working|episodic|semantic|procedural keywords. The runtime picks the allocator. Paper VI Contribution 4.

Ed25519

Signed Hot-Reload

actor.reload_signed(&sig, ...) with BLAKE3 schema fingerprint catches type mismatches. Zero message loss at 1000 cycles.

--sign

Deterministic Signed Manifests

garnet build --deterministic --sign emits a byte-identical manifest plus Ed25519 signature. Verify any binary you downloaded.

Positioning

Rust, Ruby, Garnet — honestly side by side.

Garnet is not claiming to replace either parent. This table is positioning, not a benchmark: where each language sits, and what Garnet's dual-mode design buys you. The last row stays deliberately honest.

Axis Rust Ruby Garnet
Memory safetyCompile-time ownershipRuntime GCSafe mode: ownership · Managed mode: ARC-managed
Cognitive loadHigh (lifetimes)LowProgressive — low in managed, Rust-like in safe
Error modelResult<T,E>ExceptionsBoth, auto-bridged at the mode boundary
ConcurrencyThreads/async, Send+SyncGVL-limitedActors + Sendable checking
Agent/memory primitivesLibraryLibraryLanguage-level (working/episodic/semantic/procedural)
Capability controlExternal cratesExternal gems@caps(...) in the language
Reproducible buildsTooling-dependentNot a goalManifest + Ed25519 signature contract
MaturityProductionProductionResearch-grade prototype (v0.x.x) — not production-complete

The Capability Model

Read one token. Know the function's authority.

@caps(fs) is a semantic beacon: a single annotation that front-loads the function's OS-authority budget. Both humans and language models can scan a file and reason about what it can — and cannot — do.

GARNET
@caps(fs)
def get_user_summary(path, id) {
  let data = JSON.parse(
    fs::read_file(path))
  let user = data["users"][id]
  "#{user.name}: #{user.email}"
}

# compile-time error: caps coverage:
# function `bad` does not declare
# `fs` but transitively calls
# `read_file` which requires it
@caps()
def bad() {
  fs::read_file("/etc/passwd")
}
@caps(fs)
Filesystem read/write/list. Required by every fs::* primitive.
@caps(net)
Outbound TCP/UDP. NetDefaults gate denies RFC1918 / loopback / link-local by default.
@caps(time)
Wall + monotonic clocks, sleep.
@caps(proc)
Subprocess spawn.
@caps(ffi)
C FFI. Always logged.
@caps(*)
Wildcard trust. Managed mode only — safe-mode wildcard is a hard error.

Migrate at Your Pace

Convert Rust · Ruby · Python · Go source to Garnet.

The garnet convert tool is a migration assistant, not a full transpiler: it reads four deterministic source lanes and emits sandboxed Garnet with lineage, metrics, and a human migration checklist.

TierWhat it means
Active conversion
Rust · Ruby · Python · Go
Deterministic frontends — carries ownership-like shape, module boundaries, and migration evidence with deterministic behavior.
Advisory planning
JS · TS · Swift · Java · Perl · Kotlin · Shell · SQL · …
Risk-first migration planning + inventory until deterministic parser/lineage support lands; explicit and human-gated.
Native boundary
C · C++ · Obj-C · Asm · CUDA · platform
Explicit modules or FFI with CapCaps + sandbox policy where ABI and hardware behavior are source-of-truth.

Backend Wasm/LLVM-style lowering is planned (pending backend evidence). The fit rule, LLM-advisory review path, and machine-readable adoption surface are detailed in the full conversion policy →

RUBY — source
def parse_config(text)
  text.split("\n").map do |line|
    k, v = line.split("=", 2)
    [k.strip, v.strip]
  end.to_h
end
GARNET — converted
@sandbox
@caps()
module Config {

def parse_config(text) {
  let out = {}
  for line in text.split("\n") {
    let parts = line.split("=", 2)
    out.insert(
      parts[0].trim(),
      parts[1].trim())
  }
  out
}

}
Active conversion: Rust · Ruby · Python · Go
Advisory planning: JS · TS · Swift · Java · C · C++ · C# · Perl · Kotlin · Shell · SQL · Other
Native boundary: C · C++ · Objective-C · Assembly · CUDA · platform-specific code
Backend lowering: Wasm · LLVM-style native targets planned
Adoption surface: evidence-backed

Adoption surface evidence is machine-readable through scripts/garnet_adoption_surface_status.py. It keeps the provider-neutral prompt pack, provider-option registry, and advisory flow bounded: source classifier -> risk inventory -> Garnet context -> advisory plan -> review handoff -> human-approved candidate -> garnet check/test/dogfood.

Get Garnet

Install with one curl command.

The universal installer now targets the v0.8.1 release path. It pulls release packages when they exist, verifies them against SHA256SUMS, and falls back to a source install through cargo install --locked only when no matching release asset exists. The v0.8.1 GitHub Release ships signed garnet-0.8.1-* CLI binaries + a CycloneDX SBOM; detailed productization gates live on the readiness status page.

Before you install. Prebuilt release packages need no toolchain. The source install needs Rust 1.75+. The latest tagged release is v0.8.1, a research-grade milestone; it ships signed garnet-0.8.1-* binaries shown below (re-cut 2026-06-07; SHA256SUMS GPG-signed, verify per docs/release-signing.md), and v0.4.2 remains an older release if you need to pin older behavior:
Platformv0.8.1 assetCurrent path
macOS · Apple Silicongarnet-0.8.1-aarch64-apple-darwin.tar.gzrelease tarball; signed .pkg not claimed
macOS · Intelgarnet-0.8.1-x86_64-apple-darwin.tar.gzrelease tarball; signed .pkg not claimed
Linux x86_64garnet_0.8.1-1_amd64.deb · garnet-0.8.1-1.x86_64.rpmrelease package
Linux aarch64— no package claimed —source install
Windows— no package claimed —source install
Verify any manual download before running it (from the folder containing the asset and SHA256SUMS):
shasum -a 256 --ignore-missing -c SHA256SUMS
# Universal installer:
curl --proto '=https' --tlsv1.2 -sSf https://garnet-lang.org/install.sh | sh

# Force native release package only:
curl --proto '=https' --tlsv1.2 -sSf https://garnet-lang.org/install.sh | GARNET_INSTALL_MODE=release sh

# Force source install:
curl --proto '=https' --tlsv1.2 -sSf https://garnet-lang.org/install.sh | GARNET_INSTALL_MODE=source sh
# Recommended — universal installer:
# uses v0.8.1 CLI tarballs when available and otherwise falls back
# to source install. Signed .pkg/notarization is not claimed yet.
curl --proto '=https' --tlsv1.2 -sSf https://garnet-lang.org/install.sh | sh

# Source install (any arch, needs a Rust toolchain):
git clone https://github.com/Island-Dev-Crew/garnet && cd garnet/garnet-cli && cargo install --path .

# For Apple distribution evidence, see status.html.
# Recommended — universal installer (SHA256SUMS-verified):
curl --proto '=https' --tlsv1.2 -sSf https://garnet-lang.org/install.sh | sh

# Published v0.8.1 release assets:
#   https://github.com/Island-Dev-Crew/garnet/releases/tag/v0.8.1

# Debian/Ubuntu:
sudo apt install ./garnet_0.8.1-1_amd64.deb

# Fedora/RHEL:
sudo dnf install ./garnet-0.8.1-1.x86_64.rpm

# Source install (any arch, needs a Rust toolchain):
git clone https://github.com/Island-Dev-Crew/garnet && cd garnet/garnet-cli && cargo install --path .
# Supported today — source install (needs a Rust toolchain):
git clone https://github.com/Island-Dev-Crew/garnet && cd garnet/garnet-cli && cargo install --path .

# Windows package evidence is tracked on status.html.

See it run — the real first-project loop:

After install, scaffold a project:

garnet new --template cli my_app
cd my_app
garnet test           # 2 starter tests pass green
garnet run src/main.garnet

New here? Follow the Getting Started walkthrough →

Keeping Garnet updated:

Today, update by re-running the universal installer (it replaces the installed binary), or git pull then cargo install --path . for a source build. A first-class toolchain manager — garnet update, stable/nightly channels, and garnet self uninstall — is planned and not yet available. This section will change when it ships; it is listed here so the roadmap is honest, not so the commands look real.

Garnet Studio workbench

Open the language as an app, not just a terminal.

The macOS Studio surface is a source-checkout workbench for real Garnet flows — not a separate product. It runs:

In Codex Desktop, a Codex Run action wires script/build_and_run.sh to build SwiftPM, stage dist/Garnet Studio.app, and launch it.

The Windows/Linux lane now has a separate Tauri v2 shell scaffold under apps/garnet-studio. Windows local proof covers the Vite frontend build, Tauri backend tests, release executable, unsigned NSIS bundle, --studio-smoke Desktop evidence, a Release / Readiness panel wired to the repo-native v0.5 reporters, verified x64 clean-VM installer proof, WSL package/window portability evidence, Studio Domain Proof Matrix shell output, and Release / Readiness shell reporter output. It is still not signed MSI, winget, clean/non-WSL Linux desktop GUI launch, live Release / Readiness GUI screenshot proof, Windows ARM64 proof, or completed cross-platform package proof.

Run

One Local App Loop

Use the Codex Run action or ./script/build_and_run.sh --verify to build, launch, and prove the app process from the checkout.

Assist

Migration Planning

Studio exposes Assist Plan, Advisory Bundle, Advisory Review, and Advisory Handoff for TypeScript, JavaScript, Swift, Java, C, C++, C#, Perl, Kotlin, Shell, SQL, and Other as local planning, review, and source-free handoff evidence under ~/Desktop/dogfood/, not active conversion.

DMG

Objective Pulse

The Release panel can run the repo-native MIT/productization reporter and generate manifested demo-route, deck-outline, and browser-smokeable deck-preview bundles, keeping presentation rehearsal separate from the completed tracked-slice ledger and final acceptance. Detailed signing, notarization, clean-machine Gatekeeper evidence, and the machine-readable preflight status reporter stay on the readiness status page.

Next

Continuation Pulse

The Release panel can show which Mac-side lanes can still move from this checkout and which gates belong to Apple credentials or Windows/Linux runtime proof.

# From a source checkout:
./script/build_and_run.sh --verify

# Codex Desktop:
# click Run, which calls ./script/build_and_run.sh

# Output bundle:
dist/Garnet Studio.app

Public-site embedded

Thirty seconds of Garnet, backed by evidence.

The promo lane now carries the verified MP4/WebM render, automated visual-QA output, website export, and public-site sync evidence. It stays deliberately bounded: human/aesthetic acceptance remains open, and this is not full MIT/productization completion.

Public-site embedded means the repo has a synced site asset path and manifest-backed evidence. Detailed acceptance and distribution gates are tracked on status.html.

By the Numbers

Substance behind the surface.

1193
Workspace tests
136
Security tests
24
Stdlib registry primitives
10
MVP drafts
7
Research papers
0.93×
Expressiveness ratio
MIT/productization objective
92.3%

Latest local dogfood pulse from scripts/garnet_mit_readiness_status.py. This is not the same as tracked implementation completion.

Current pulse
  • 87/87 tracked slices are verified, but that is not full MIT/productization completion.
  • S15 adds a trivia-preserving CST with byte-identical example round trips; incremental/error-recovery parsing remains future work.
  • Windows now has a Tauri v2 Studio scaffold with local release build, unsigned NSIS bundle, smoke evidence, verified x64 clean-VM installer proof, WSL `.deb` / `.rpm` / Xvfb / WSLg system-install evidence, Studio Domain Proof Matrix shell output, and Release / Readiness shell reporter output; clean/non-WSL Linux desktop GUI launch, live Release / Readiness GUI screenshot proof, signing, winget, and Windows ARM64 proof remain open.
  • Promo video is public-site embedded at 95.0%; human/aesthetic acceptance remains open.
  • Web/PWA productization is verified; mobile distribution is still planned.
  • S16 advances Editor/LSP adoption to verified with document/workspace symbols, CST-precise rename, quick fixes, and semantic tokens over the release LSP protocol smoke.
  • Apple distribution, mobile, provider-backed LLM assist, and backend lowering each have their own readiness gates.
  • Detailed caveats and exact status evidence live on status.html.

Objective accounting keeps the landing page confident and the status page precise: the tracked implementation plan is complete, while platform distribution, provider-backed assist, backend lowering, proof, and empirical validation remain separately gated.

Documentation & Research

The work, the proofs, the honest scorecard.

Garnet ships seven research papers plus four addenda. Where claims are empirical, evidence is traceable to reproducible artifacts; empirical claims are labeled by confidence and status, with partial outcomes explicitly downgraded in the v4.0 revisions.

Community

Ask, report, contribute.

Garnet is early and the community surface is honest about it. GitHub Discussions are live as of v0.5.0 — that's where design conversations, show & tell, and RFCs happen. A Discord/chat server is not — chat will only appear here when contributor volume sustains it.

Pinned threads to start with: Welcome · Show & tell — what are you building · RFC — package registry shape.