Λόγος
GitHub

One language for everything: Logos aims to be a single language for systems code, speed, GPUs, async, proofs, metaprogramming, new languages, dedicated hardware, and its own compiler, instead of a different one for every job.

An AI that edits text pushes a guess through a fragile toolchain and hopes. Logos code is a live structure that carries its own types, borrow states, and proofs, so every change gets machine-checked feedback before it ever runs.

In principio erat Verbum, et Verbum erat apud Deum, et Deus erat Verbum.
- John 1:1
τοῦ δὲ λόγου τοῦδ’ ἐόντος αἰεὶ ἀξύνετοι γίνονται ἄνθρωποι καὶ πρόσθεν ἢ ἀκούσασι καὶ ἀκούσαντες τὸ πρῶτον.
- Heraclitus
λόγος δυνάστης μέγας ἐστίν, ὃς σμικροτάτῳ σώματι καὶ ἀφανεστάτῳ θειότατα ἔργα ἀποτελεῖ.
- Gorgias
Non igitur constat pluribus verbis, sed est unum Verbum per quod facta sunt omnia.
- Anselm
λόγον δὲ μόνον ἄνθρωπος ἔχει τῶν ζῴων… ὁ δὲ λόγος ἐπὶ τῷ δηλοῦν ἐστι τὸ συμφέρον καὶ τὸ βλαβερόν, ὥστε καὶ τὸ δίκαιον καὶ τὸ ἄδικον
- Aristotle
Eius autem vinculum est ratio et oratio.
- Cicero
ψυχῆς πείρατα ἰὼν οὐκ ἂν ἐξεύροιο, πᾶσαν ἐπιπορευόμενος ὁδόν· οὕτω βαθὺν λόγον ἔχει.
- Heraclitus
διάνοια μὲν καὶ λόγος ταὐτόν· πλὴν ὁ μὲν ἐντὸς τῆς ψυχῆς πρὸς αὑτὴν διάλογος ἄνευ φωνῆς γιγνόμενος.
- Plato
Oratio vultus animi est.
- Seneca
λόγος ἀληθὴς καὶ νόμιμος καὶ δίκαιος ψυχῆς ἀγαθῆς καὶ πιστῆς εἴδωλόν ἐστι.
- Isocrates
Deus uno actu et se et omnia intelligit, unicum Verbum eius est expressivum non solum Patris, sed etiam creaturarum.
- Thomas Aquinas
ὁ δὲ τοῦ θεοῦ λόγος ἐστὶν ὁ δεσμός τῶν πάντων, συνέχων τὰ μέρη καὶ σφίγγων.
- Philo of Alexandria
ψυχῆς ἐστι λόγος ἑαυτὸν αὔξων.
- Heraclitus
Sermo datur cunctis, animi sapientia paucis.
- Disticha Catonis
ζῶν γὰρ ὁ λόγος τοῦ θεοῦ καὶ ἐνεργὴς καὶ τομώτερος ὑπὲρ πᾶσαν μάχαιραν δίστομον.
- Hebrews 4:12
Verba volant, scripta manent.
- Latin proverb
ὁ δὲ θεὸς οὐδὲν ἄλλο ἐστὶν ἢ νοῦς καὶ λόγος.
- Stoic tradition

What Logos looks like

Target syntax, taken straight from the language design and the docs: everyday systems code and the language's own definition live in the same structure. The compiler that runs it is still being built; the roadmap tracks what actually works today.

target-syntax.logostarget syntax, not yet runnable
# Declare with `:=`, reassign with `=`. `mut` marks a mutable value.
count := mut i32 0
count = count + 1

# Systems code: borrowed references, checked errors, no GC.
advance := fn (tokens : &mut array synolon, idx : u64) -> void! (
    if idx+1 >= tokens.size
        error «not enough tokens after idx»
)

# The language is written in itself. A node (a synolon) is two slots,
# logos and hyle, and even `+` is an ordinary identity: a node carrying
# a precedence and the code for how it reads its operands. There is no
# separate macro language, so new syntax is just more declarations in
# the same graph.
synolon := logos (logos := @synolon ?, hyle := @void ?)
+ := logos (
    shared precedence    := f64 6.0
    shared associativity := u8 left_to_right
    shared constructor   := fn (tokens : &mut array synolon, idx : u64) -> void! ( ? )
)

The program is the structure

Radical unification is not a metaphor. The smallest program, a = a + 1, is not text a compiler reads once and throws away. It is a graph, the Logic Graph (LG), named because it should be able to hold any logic imaginable. And because it is a graph, the same structure can reflect on itself, interpret itself, or compile and run itself.

a = a + 1
becomes
synolonlogos:@synolonhyle:@voidsynolon=recordlhs:@synolonrhs:@synolonsynolonlogos:@synolonhyle:@voidsynolon+recordlhs:@synolonrhs:@synolonsynolonasynolonlogos:@synolonhyle:@voidsynolonrational_numberhyle1
Read it left to right: every arrow leaves one field of a node (the :@synolon or :@void next to it is what that field points at) and points at another whole node. A synolon is a node of exactly two slots: a logos, which says what the node is, and a hyle, the matter the logos gives meaning to. Here each hyle points at an operand record whose fields (lhs, rhs) are defined by the logos. So a = a + 1 unfolds into synolons and operand records, bottoming out at the identities =, +, rational_number, the variable a, and the literal 1. Both lhs fields point at the one a, so it is genuinely a graph, not a tree. Because your program already is this structure, the same operations that run it can read it, rewrite it, optimize it, and prove it, so the optimizer, the computer-algebra system, the proof checker, and metaprogramming are one thing over one structure rather than four tools bolted on from outside.

Why one structure, and why now

When people wrote all the code, a structure that carries its own types and proofs and can rewrite itself was a luxury. When models write most of it, that same structure becomes the requirement.

An AI that edits text pushes a guess through a fragile toolchain and hopes it holds. An AI that edits a Logic Graph rewrites a structure that already carries its scopes, types, borrow states, and proofs, and gets machine-checked feedback that the change is correct and safe before it ever runs. The same reader-writer rule that governs memory also governs self-modifying code, so a program can improve its own code, iteratively, without being allowed to break it.

This is the gap between the two systems Logos learns from. Smalltalk gave a live system that can inspect and rewrite itself, but nothing that could prove a change was right. Lean gives machine-checked proof, but it is a prover built for mathematicians, garbage-collected and functional, not a systems substrate a program rewrites and runs at native speed. Neither has both halves. Logos reaches for both in one structure: rewrite it as freely as Smalltalk, check it as strictly as Lean, run it as fast as Rust.

That combination is what code written by machines will need, and it is the direction Logos is built toward. It does not run yet; the roadmap tracks what does.

Built from proven parts

Logos is large, and honest about being large. But none of its parts is without precedent: self-hosting (Lean 4), a layered intermediate representation (MLIR), equality saturation in production (egg and Cranelift), borrow checking without a garbage collector (Rust), a live and malleable system (Smalltalk), machine-checked proofs (Lean). The novel work is uniting them in one structure, not inventing any one of them.

The path is a small Rust seed, kept small enough to audit by hand. Everything above it is written in Logos, until the language compiles itself: a tiny trusted core, and then the language builds the rest. The roadmap breaks the work into parts and shows what already runs, and the vision shows how each hard part is solved.

Next to its neighbors

The first question a language-literate visitor asks is "why not C++, Rust, Zig, Lean, Julia, Python, TypeScript, or a Lisp?". Here is the honest answer. Logos is not done yet: its column is the design it is being built toward, not software you can run today, while every other column is what ships now. But read across the rows: nearly every capability in the Logos column is already a yes somewhere else here, so the hard part is not inventing any one of them, it is uniting them in one structure. Some rows are things other languages do well that Logos does not attempt at all.

CapabilityLogosC/C++RustZigLean 4UnisonRacketSmalltalkJuliaPythonTS/JSMojo
Memory safety without a GCownership and borrow checking, zero runtime costyesno16yesno9nononononononopartial13
Compiles to native machine codeAOT or JIT, systems-grade performanceyesyesyesyesyes1partialpartialpartialyespartial18partialyes
The speed ceiling of C and Rustno GC or boxing tax, zero-cost abstractionsyesyesyesyesno1nononopartial21nonoyes
Targets GPUs and custom hardwarekernels written in the language itself, not shader stringsyesyespartial11partialnonononoyespartial19noyes
Runs in the browsercompiles to WebAssembly or runs in a web pagepartial32partial32partial32partial32nononopartial27nopartial28yesno
Multithreaded parallelismuse every core with shared memoryyesyesyesyespartialpartialpartialnoyespartial20partialyes
Async concurrencyasync/await or lightweight tasks for IO-bound workyespartial25yespartial26partialyesyespartialyesyesyespartial
Formal proofs in the languagedependent types / theorem proving built inyesnononoyesnonononononono
Gradual verificationprove one part, leave the rest ordinary codeyesnononoyesnonononononono
Effects tracked in typespurity, IO, async as capabilities the compiler checksyesnopartialnoyesyesnononononopartial
Code as dataprograms are a structure the language can readyesnopartial2noyespartialyesyesyesyespartialno
Semantic reflectionthe readable structure carries types and checked factsyespartial17nopartialyesnopartialpartial3partialpartialpartial29no
Compile-time code executionrun ordinary code at compile time, results baked inyespartialpartialyesyesnoyespartial15yesnonoyes
Compiler extensible as a librarynew syntax and optimizations as ordinary librariesyesnopartial2noyesnoyes4yespartialnopartialno
Hosts other languages as librariesembed an HDL or shader language without a new compileryesnopartialpartialyes14noyes4nopartialnopartialno
Hygienic syntax extensionsyntax extensions can't capture names by accidentyes22nopartialnoyesnoyesnoyesnonono
First-class rewrite engineequality saturation shared by compiler and user codeyesnononopartial5nopartial8partial8no12nonono
Live systemredefine parts of a running programyesnonononopartialpartialyesyespartialpartialno
Image persistencesave the whole running system, resume it laterpartial23nonononononoyespartial24nonono
Content-addressed codedefinitions identified by hash of their contentpartial6nonononoyesnononononono
Usable todaya stable compiler you can build real software on nownoyesyespartial10yesyes7yesyesyesyesyespartial13
Backward-compatibility promisecode from years ago still builds and runs todaypartial30yesyesno10partialpartialyespartialyespartialyesno
Package ecosystempackages, users, production track recordpartial31yesyespartialpartialpartial7partialpartialyesyesyesno
  1. Lean 4 compiles through C, but its runtime uses reference counting: fast, yet not a no-GC systems language.
  2. Rust proc macros transform token streams before type checking; the compiler's passes are not extensible.
  3. Smalltalk reflects everything at runtime, but nothing is statically typed or proved.
  4. Racket's #lang makes whole languages ordinary libraries; the optimizer itself is not user-extensible.
  5. Lean's simp and @[csimp] rule sets are first-class directed rewriting; there is no e-graph equality saturation.
  6. Logos source files stay canonical, but hash identity can be enforced as an opt-in wrapper discipline: persisted artifacts already key by content, never by address.
  7. Most of Unison's public production mileage is Unison Cloud, built by the language's own company.
  8. Racket's macro expander and Smalltalk's Refactoring-Browser rewriter are user-drivable tree rewriting; neither is equality saturation, and neither serves as the compiler's optimizer.
  9. Zig has no GC, but its safety comes from runtime checks in safe builds, not compile-time proof.
  10. Zig is pre-1.0 by design; Bun, TigerBeetle, and Ghostty ship on it in production anyway.
  11. Rust reaches GPUs through rust-gpu (SPIR-V) and the tier-2 nvptx64 target; every path is still experimental.
  12. Metatheory.jl gives Julia real e-graph rewriting as a library, but the compiler itself never uses it.
  13. Mojo's 1.0 beta shipped in May 2026 with ownership checking working today; full default memory safety is deferred to Mojo 2.x.
  14. Alloy embeds real C syntax inside Lean files through Lean's extensible grammar.
  15. Smalltalk has no separate compile phase; evaluating code and saving the image plays the comptime role.
  16. C and C++ have no GC, but nothing enforces memory safety either; this row asks for both.
  17. C++26 adds compile-time reflection of types (P2996), not reflection of program structure.
  18. CPython 3.13+ ships an experimental JIT and PyPy is mature; neither approaches systems-grade performance.
  19. Triton and JAX compile Python-syntax kernels for GPUs, as restricted subsets of the language.
  20. Free-threaded CPython became officially supported in Python 3.14, as a separate build; the default build keeps the GIL.
  21. Type-stable Julia kernels reach C speed; the GC and dynamic fallback keep whole programs below the ceiling.
  22. Logos constructors emit resolved handles rather than names, so there is no name for a macro to capture.
  23. The Logic Graph and boundary-materialized task state admit a save/resume library in Logos; source files stay the canonical form.
  24. PackageCompiler sysimages snapshot a loaded Julia session, not live tasks.
  25. C++20 has coroutines but no standard async runtime; std::execution only arrives with C++26.
  26. Zig dropped its old async/await in the compiler rewrite; a new std.Io async design is landing across 0.x releases.
  27. SqueakJS runs real Smalltalk images in the browser on a JavaScript virtual machine.
  28. Pyodide runs CPython on WebAssembly; C-extension packages need prebuilt WASM wheels.
  29. The TypeScript compiler API exposes the type checker to tooling; all types are erased at runtime.
  30. Logos releases are designed immutable from day one (docs and builds freeze per version); the track record starts at the first release.
  31. No Logos packages exist yet; the standard library is deliberately built before release to seed a coherent ecosystem.
  32. WebAssembly runs in every browser, but only JavaScript runs alone: wasm still needs JS glue to load, and all DOM and I/O access goes through JS.