Skip to content

Profiles System

Janus profiles are capability sets that adapt the language to different use cases while maintaining identical semantics. Think of them as different lenses through which you view the same language.

Profiles restrict language complexity, not capability. Every profile speaks the same grammar; only the available features change.

Janus operates on two orthogonal axes: Capability Set and Execution Mode.

EXECUTION MODE
strict fluid
┌──────────────┬──────────────┐
core │ :core │ :script │ Teaching/Scripting
├──────────────┼──────────────┤
service │ :service │ :service! │ Backend Services
CAPABILITY ├──────────────┼──────────────┤
SET │ :cluster │ :cluster! │ Distributed Logic
├──────────────┼──────────────┤
compute │ :compute │ :compute! │ NPU/GPU Kernels
├──────────────┼──────────────┤
sovereign │ :sovereign │ (N/A) │ Systems Programming
└──────────────┴──────────────┘
  • No suffix = strict mode (Monastery: AOT compiled, explicit)
  • ! suffix = fluid mode (Bazaar: JIT/interpreted, sugared)

Status: 100% Complete | Feels like: Python

AspectSpecification
Typesi64, f64, bool, String, Array, HashMap
Constructsfunc, let, var, if, else, for, while, return
ConcurrencyNone (single-threaded)
PublishableYes

Perfect for: Learning, CLI tools, embedded systems.

Status: Planned | Feels like: Lua/Julia

AspectSpecification
BaseAll :core capabilities
SugarImplicit types, returns, allocators
REPLInteractive evaluation
Top-level codeAllowed
PublishableNo (must migrate to :core)

Perfect for: Rapid prototyping, data science, exploration.

Status: 100% Complete | Feels like: Go

AspectSpecification
BaseAll :core capabilities
Error HandlingError-as-values, result types
ConcurrencyCSP channels, nurseries, async/await, select
Resourcesusing statement, CancelToken, defer
GenericsSimple generics with constraints

Perfect for: Web services, APIs, microservices, backend systems.

func fetch_all(urls: []string) do
nursery |n| do
for url in urls do
n.spawn(async fetch(url))
end
end // All tasks complete or cancel here.
end

Status: Planned | Feels like: Erlang/OTP

AspectSpecification
BaseAll :service capabilities
ActorsTraditional ephemeral actors
GrainsVirtual actors with auto-lifecycle
SupervisionOTP-style supervision trees
LocationTransparent (runtime decides placement)

Perfect for: Distributed systems, game servers, chat, resilient backends.

Status: Planned | Feels like: Julia/CUDA

AspectSpecification
BaseAll :core capabilities
Tensorstensor<T, Dims> types
Memory Spaceson sram, on dram, on vram
Device Targetingon device(npu), on device(gpu), on device(auto)

Perfect for: AI/ML workloads, scientific computing, GPU/NPU kernels.

Status: Planned | Feels like: Zig/Rust

AspectSpecification
BaseAll capabilities from all profiles
Raw Pointers*T with manual memory management
ComptimeFull compile-time metaprogramming
EffectsComplete effect system with capabilities
Unsafe Blocksunsafe { } for raw operations

Perfect for: Operating systems, device drivers, high-performance systems.

Compiled ahead-of-time with explicit semantics. All types declared, allocators visible.

Append ! to profile name for sugared execution. Types inferred, allocators implicit, top-level code allowed.

{.profile: service!.} // Fluid mode shorthand

Beginner to Professional:

:script → :core → :service → :cluster → :sovereign
(play) (learn) (build) (scale) (master)

Go Developer to Distributed:

:service → :cluster

Data Scientist to ML Engineer:

:script → :core + :compute → :sovereign + :compute
  1. Upward Compatible:core code compiles identically in all higher profiles
  2. Stable Semantics — Enabling features never changes :core behavior
  3. Alias Stability — Profile names work forever
  4. Desugar Truth — Every sugar has published, queryable desugaring
  • [Quick Start]/learn/getting-started/ — Write your first program in :core
  • [Why Janus?]/learn/introduction/ — The philosophy behind the design

Janus Profiles = Capability Sets × Execution Modes

One language, many lenses — eternal harmony.