- Zig 96.8%
- Shell 1.5%
- C++ 1.1%
- Python 0.2%
- Gherkin 0.1%
- Other 0.1%
|
Some checks failed
Forbidden Paths Guard / guard (push) Waiting to run
gRPC Smoke / smoke (push) Waiting to run
Validation / test (push) Waiting to run
gRPC Smoke / smoke-musl (push) Failing after 2s
Strategic Release Pipeline / 🧪 Sandbox - Experimental Innovation (push) Has been skipped
Strategic Release Pipeline / 🔥 Forge - Alpha Integration (push) Failing after 20s
Strategic Release Pipeline / 🛡️ Crucible - Beta Quality Assurance (push) Has been skipped
Strategic Release Pipeline / 🛡️ Crucible - Beta Quality Assurance-1 (push) Has been skipped
Strategic Release Pipeline / 🛡️ Crucible - Beta Quality Assurance-2 (push) Has been skipped
Strategic Release Pipeline / 🏰 Fortress - Production Release (push) Has been skipped
Strategic Release Pipeline / 🏰 Fortress - Production Release-2 (push) Has been skipped
Strategic Release Pipeline / 🏰 Fortress - Production Release-3 (push) Has been skipped
Strategic Release Pipeline / 🏰 Fortress - Production Release-1 (push) Has been skipped
Strategic Release Pipeline / 🗿 Bedrock - Enterprise LTS (push) Has been skipped
Strategic Release Pipeline / 🚀 Release Orchestration (push) Has been skipped
Closing the Gap 5/6/7/8/9/10/11 series surfaced sibling bugs that are
each independently tractable but out of scope for the fixes already
shipped. Landing the minimal repros here so they don't get lost in
scratch /tmp/ files — and so that whoever picks up each gap has a
ready-to-run starting point.
Files added (all under tests/regression/, not wired to any test step
— they are documentation and starting points, not CI-enforced):
bug_optional_void.jan — `?void` optional likely has the same
`{i8, void}` InsertValue bug that Gap 11
fixed for `!void`. Not yet verified
empirically.
bug_catch_return.jan — `catch return X` compiles and links but
doesn't return from the enclosing
function. Pre-existing; reproduced both
with and without the Gap 11 fix.
bug_nested_anon_struct.jan — Nested `.{p: .{…}}` fails because the
inner `.{}` has no type-context
propagation. Workaround: lift to
intermediate local.
bug_named_struct_literal.jan — `Type.{field: value}` parse error at
`{`. The lowerer already handles the
named shape; parser is missing the
postfix `Type.{…}` introducer.
bug_trait_multi_impl.jan — Multiple `impl Trait for T` variants,
each returning an error union, hit
`Lowering error: InvalidCall`. Single-
impl works (Gap 9 canonical repro);
this is the next layer.
Each file has a top comment that:
- Names the filed report (under Janus/.agents/reports/)
- States expected exit behavior after the fix
- States pre-fix symptom so regressions are obvious from compile
output alone
A sixth sibling bug (SemanticType.clone leak in
compiler/qtjir/graph.zig:322, unmasked by Gap 11's fix) has no
user-facing repro — it reproduces only under the DebugAllocator during
compiler self-test — so it is filed as a report but not added here.
Reports and ledger:
Janus/.agents/reports/2026-04-24-optional-void-insertvalue-gap.md
Janus/.agents/reports/2026-04-24-catch-return-does-not-propagate.md
Janus/.agents/reports/2026-04-24-semantictype-clone-leak.md
Janus/.agents/reports/2026-04-24-nested-anonymous-struct-no-context.md
Janus/.agents/reports/2026-04-24-named-struct-literal-parse-error.md
Janus/.agents/reports/2026-04-24-trait-multi-impl-error-union.md
Janus/.agents/COMPILER_GAPS.md — new "Sibling Bugs Filed 2026-04-24"
section with cross-references.
|
||
|---|---|---|
| .forgejo/workflows | ||
| .githooks | ||
| attic | ||
| bench | ||
| branding | ||
| build_support | ||
| cmd | ||
| compiler | ||
| daemon | ||
| demos/semantic-analysis | ||
| docs | ||
| doctrines | ||
| examples | ||
| features/transport | ||
| grafts/zig_proto/src | ||
| l2_session | ||
| legal | ||
| lsp | ||
| packaging | ||
| protocol | ||
| runtime | ||
| scripts | ||
| src | ||
| std | ||
| tests | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .grafignore | ||
| build.zig | ||
| build.zig.zon | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| hinge_cli | ||
| LICENSE.md | ||
| Makefile | ||
| NOTICE | ||
| QUICKSTART.md | ||
| README.md | ||
| SECURITY.md | ||
| struct_f64_simple | ||
| VERSION | ||
| WHAT_WORKS.md | ||
JANUS
A systems programming language that combines teaching simplicity with production power.
Status: Alpha -- in heavy development. Breaking changes expected.
Version: 2026.3.31
License: Libertaria Suite (LCL-1.0 / LSL-1.0 / LUL-1.0)
Repository: https://git.sovereign-society.org/janus/janus-lang
New here? Quickstart | What Works | Stdlib Guide
What Is Janus?
Janus is a systems language that compiles natively through Zig and LLVM. It uses a profile system for progressive disclosure -- you start with simple fundamentals (:core) and unlock concurrency, distributed systems, and hardware control as you advance.
The key idea: code you write on day one compiles to a native binary. No interpreter, no VM, no rewrites later.
func main() do
println("Hello, Janus!")
end
Why Janus Over Go?
Go popularized goroutines and channels. Janus takes the same model and fixes what Go got wrong:
| Concern | Go | Janus |
|---|---|---|
| Goroutine leaks | Common, silent, hard to debug | Impossible -- nurseries enforce structured concurrency |
| Error handling | if err != nil boilerplate everywhere |
!T error unions, fail, catch, ? propagation |
| Memory | GC pauses, unpredictable latency | Explicit allocators, zero GC, deterministic cleanup |
| Hidden costs | Runtime scheduler, GC, reflection -- all invisible | All costs visible -- Syntactic Honesty doctrine |
| Generics | Arrived late, limited | First-class monomorphization from day one |
| Pattern matching | None | Exhaustive match with compile-time coverage checks |
| Zig stdlib | N/A | Full access via use zig -- zero FFI overhead |
| FFI | cgo is slow and awkward | graft c / graft zig -- native integration |
Profile System
| Profile | Status | Scope |
|---|---|---|
| :core | Functionally complete | Types, control flow, structs, enums, generics, error handling, match, defer |
| :service | Functionally complete | Channels, select, nursery, spawn, structured concurrency, row polymorphism |
| :sovereign | WIP | Capabilities, pledges, distributed identity, hardware declarations |
| :compute | Planned | GPU/NPU kernels, tensor IR, data-parallel computation |
:core and :service pass their test suites and cover the language features listed above. They are not yet battle-tested in production deployments. Expect rough edges.
Language Features
Core Language
- Functions, closures, multi-function programs
let/var/constwith type inference- Control flow:
if/else,while,for..in matchwith exhaustiveness checking,elsefallback,.Variantpatterns- Error handling:
!Terror unions,fail,catch,?postfix propagation - Structs with
..defaultsinitialization, enums, arrays, slices, optionals - Generics with monomorphization (
func identity[T](x: T) -> T) deferfor deterministic cleanupgraft c/graft zigfor foreign function integration
Structured Concurrency (:service)
- Nurseries -- structured concurrency boundaries
- Spawn -- launch tasks within nursery scope
- Channels -- CSP-style buffered/unbuffered message passing
- Select -- multi-channel wait with timeout and default cases
Code Examples
// Error handling
error DivisionError { DivisionByZero }
func divide(a: i64, b: i64) !i64 do
if b == 0 do
fail DivisionByZero
end
return a / b
end
func main() do
let result = divide(10, 0) catch |err| do
println("Caught: division by zero")
0
end
println(result)
end
// Structured concurrency
func main() do
nursery do
spawn worker(1)
spawn worker(2)
spawn worker(3)
end
println("All workers done")
end
func worker(id: i64) do
println("Worker running")
end
Quick Start
Requirements: Zig 0.16.x, Linux x86_64
git clone https://git.sovereign-society.org/janus/janus-lang.git
cd janus-lang
zig build
./zig-out/bin/janus build examples/hello.jan
./hello
Important: Use ./scripts/zb instead of raw zig build test for the full test suite -- it throttles parallelism to prevent OOM on LLVM-linked tests.
If direct Zig commands fail with cache errors on this machine, use ./scripts/zigw ... for Zig commands and ./scripts/janusw ... for the compiler to force known-good cache directories.
Targeted regression commands for the current :compute migration: ./scripts/zb test-profile-manager and ./scripts/zb test-tensor-compile.
Compilation Pipeline
Source (.jan) -> Parser -> ASTDB -> Semantic Analysis -> QTJIR (SSA IR) -> LLVM -> Native Binary
- ASTDB -- Columnar semantic database; query code structure programmatically
- QTJIR -- SSA intermediate representation with sovereign string ownership
- Profile enforcement -- Compile-time gating of features by profile level
Toolchain
janus build <file.jan>-- compile to native binaryjanus build --profile=service <file.jan>-- compile with:servicefeaturesjanus doc <file.jan>-- generate documentationjanus query "<predicate>" <file.jan>-- semantic queries against ASTDBjanus init [name]-- scaffold new project withjanus.kdlmanifestjanus pkg <cmd>-- package management via Hinge
Known Limitations
- Alpha compiler -- bugs and missing diagnostics are expected. File issues.
- Linux x86_64 only -- primary development target. Other platforms are untested.
- No stable ABI -- internal representations change between versions.
- Early package ecosystem -- Hinge works but the public registry is not live yet.
- IDE support is basic -- LSP exists but is minimal.
:serviceconcurrency -- functional but not stress-tested at scale.
The Four Doctrines
- Syntactic Honesty -- all costs visible, no hidden complexity
- Mechanism over Policy -- tools, not restrictions
- Explicit Choice -- all allocations, effects, and trade-offs visible
- Revealed Complexity -- no magic, predictable behavior
Documentation
- Quickstart -- get running in 5 minutes
- What Works -- current feature status
- User Manual -- guides and operations
- Specifications -- compiler internals
- Doctrines -- philosophy and design law
- Contributing -- how to contribute
Issues: https://git.sovereign-society.org/janus/janus-lang/issues Website: https://janus-lang.org License: Libertaria Suite