HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
yon-language
yon
C2026–2026
yon-language / yon

yon

An experimental language whose object system is a topos: places are pre-sheaves, values are content-addressed on the Leech lattice, and the type checker refuses to compile a false proof.

3Distinct people
6Mentions
0Explicit recommenders
27GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

An experimental language whose object system is a topos: places are pre-sheaves, values are content-addressed on the Leech lattice, and the type checker refuses to compile a false proof.

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 1:49:46 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by 3-hour interval6 dated mentions

Observed mentions: 2026-06-05 00:28:17 UTC to 2026-06-08 23:27:01 UTC.

0122026-06-05 00:00:00 UTC to 2026-06-05 03:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 commentsJun 5, 00:002026-06-05 03:00:00 UTC to 2026-06-05 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-05 06:00:00 UTC to 2026-06-05 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-05 09:00:00 UTC to 2026-06-05 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-05 12:00:00 UTC to 2026-06-05 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-05 15:00:00 UTC to 2026-06-05 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-05 18:00:00 UTC to 2026-06-05 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-05 21:00:00 UTC to 2026-06-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 00:00:00 UTC to 2026-06-06 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 03:00:00 UTC to 2026-06-06 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 06:00:00 UTC to 2026-06-06 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 09:00:00 UTC to 2026-06-06 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 12:00:00 UTC to 2026-06-06 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 15:00:00 UTC to 2026-06-06 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 18:00:00 UTC to 2026-06-06 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-06 21:00:00 UTC to 2026-06-07 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsJun 6, 21:002026-06-07 00:00:00 UTC to 2026-06-07 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-07 03:00:00 UTC to 2026-06-07 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-07 06:00:00 UTC to 2026-06-07 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-07 09:00:00 UTC to 2026-06-07 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-07 12:00:00 UTC to 2026-06-07 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-07 15:00:00 UTC to 2026-06-07 18:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-06-07 18:00:00 UTC to 2026-06-07 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-07 21:00:00 UTC to 2026-06-08 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-06-08 00:00:00 UTC to 2026-06-08 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-08 03:00:00 UTC to 2026-06-08 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-08 06:00:00 UTC to 2026-06-08 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-08 09:00:00 UTC to 2026-06-08 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-08 12:00:00 UTC to 2026-06-08 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-08 15:00:00 UTC to 2026-06-08 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-08 18:00:00 UTC to 2026-06-08 21:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-06-08 21:00:00 UTC to 2026-06-09 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsJun 8, 21:00

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Jun 5, 00:002026-06-05 00:00:00 UTC2026-06-05 03:00:00 UTC110
Jun 5, 03:002026-06-05 03:00:00 UTC2026-06-05 06:00:00 UTC000
Jun 5, 06:002026-06-05 06:00:00 UTC2026-06-05 09:00:00 UTC000
Jun 5, 09:002026-06-05 09:00:00 UTC2026-06-05 12:00:00 UTC000
Jun 5, 12:002026-06-05 12:00:00 UTC2026-06-05 15:00:00 UTC000
Jun 5, 15:002026-06-05 15:00:00 UTC2026-06-05 18:00:00 UTC000
Jun 5, 18:002026-06-05 18:00:00 UTC2026-06-05 21:00:00 UTC000
Jun 5, 21:002026-06-05 21:00:00 UTC2026-06-06 00:00:00 UTC000
Jun 6, 00:002026-06-06 00:00:00 UTC2026-06-06 03:00:00 UTC000
Jun 6, 03:002026-06-06 03:00:00 UTC2026-06-06 06:00:00 UTC000
Jun 6, 06:002026-06-06 06:00:00 UTC2026-06-06 09:00:00 UTC000
Jun 6, 09:002026-06-06 09:00:00 UTC2026-06-06 12:00:00 UTC000
Jun 6, 12:002026-06-06 12:00:00 UTC2026-06-06 15:00:00 UTC000
Jun 6, 15:002026-06-06 15:00:00 UTC2026-06-06 18:00:00 UTC000
Jun 6, 18:002026-06-06 18:00:00 UTC2026-06-06 21:00:00 UTC000
Jun 6, 21:002026-06-06 21:00:00 UTC2026-06-07 00:00:00 UTC000
Jun 7, 00:002026-06-07 00:00:00 UTC2026-06-07 03:00:00 UTC000
Jun 7, 03:002026-06-07 03:00:00 UTC2026-06-07 06:00:00 UTC000
Jun 7, 06:002026-06-07 06:00:00 UTC2026-06-07 09:00:00 UTC000
Jun 7, 09:002026-06-07 09:00:00 UTC2026-06-07 12:00:00 UTC000
Jun 7, 12:002026-06-07 12:00:00 UTC2026-06-07 15:00:00 UTC000
Jun 7, 15:002026-06-07 15:00:00 UTC2026-06-07 18:00:00 UTC101
Jun 7, 18:002026-06-07 18:00:00 UTC2026-06-07 21:00:00 UTC000
Jun 7, 21:002026-06-07 21:00:00 UTC2026-06-08 00:00:00 UTC101
Jun 8, 00:002026-06-08 00:00:00 UTC2026-06-08 03:00:00 UTC000
Jun 8, 03:002026-06-08 03:00:00 UTC2026-06-08 06:00:00 UTC000
Jun 8, 06:002026-06-08 06:00:00 UTC2026-06-08 09:00:00 UTC000
Jun 8, 09:002026-06-08 09:00:00 UTC2026-06-08 12:00:00 UTC000
Jun 8, 12:002026-06-08 12:00:00 UTC2026-06-08 15:00:00 UTC000
Jun 8, 15:002026-06-08 15:00:00 UTC2026-06-08 18:00:00 UTC000
Jun 8, 18:002026-06-08 18:00:00 UTC2026-06-08 21:00:00 UTC101
Jun 8, 21:002026-06-08 21:00:00 UTC2026-06-09 00:00:00 UTC202

What Hacker News says

6 sources
Yeah it really is a mess. One of the most egregious things I noticed was that variables under lambdas are STRINGS: https://github.com/yon-language/yon/blob/aa4617ced3abc92ac53... This is extremely dangerous and error prone. The classic example is: (fun (x : number) (y : number) => x) y once y is substituted for x, x now refers to y, which is bound later. This is usually avoided with Debruijn indices (https://en.wikipedia.org/wiki/De_Bruijn_index). That function becomes: (fun (_ : number) => (_ : number) => 2) y Lambda binders refer to variables via an offset relative to the position of the variable. However, Yon doesn't do this. It uses strings. The usual approach to make this sound is alpha renaming (which is by default very easy to mess up and introduce bugs). However, Yon's alpha renaming algorithm has a critical error: https://github.
Read the rest
com/yon-language/yon/blob/aa4617ced3abc92ac53... Notice that substitution under lambdas checks that the "fresh" name for the bound variable does not appear in the free variables under the lambda body (https://github.com/yon-language/yon/blob/aa4617ced3abc92ac53...). However, scopes don't check this at all. https://github.com/yon-language/yon/blob/aa4617ced3abc92ac53... This is a critical, foundational bug that is easily avoided with DeBruijn indices. DeBruijn indices are widely used across all proof assistants. This oversight is absolutely due to a lack of understanding of type theory.
In Yon – a topos-oriented language with a content-addressed lattice heap
Had some edits I made halfway through, so I was a bit hasty. It is dependently-typed in that the only valid codomain of a \Pi type is the identity type, Sigma, or another Pi. You can substitute variables, so Id can contain terms, but an arbitrary Pi type like: \Pi (x : A) (y : B x), C x y is not allowed. See the Ty definition here: https://github.com/yon-language/yon/blob/aa4617ced3abc92ac53.... Id is the only constructor of Ty that is indexed by a Term (there is another one, TyEl, but it is used nowhere in the type-checker). This means I could not supply an arbitrary user-defined function (e.g., Fam : (x : A) -> Ty)) as the codomain, only the identity type, which is severely limiting. I suspect this is why the only example I could find from the docs of dependent types was the Id example above. I apologize for the poor wording. I didn't s
Read the rest
leep well last night. Do also take this critique with a grain of salt, since the codebase is very much obfuscated and the docs are quite vague.
In Yon – a topos-oriented language with a content-addressed lattice heap
A few notes, because this is obviously vibe coded, and does not work in many ways. 1. Yon's documentation mentions "Homotopy type theory:" > the runnable HoTT fragment is refl/pair/fst/snd These are basic features of martin-lof type theory, not homotopy type theory. The documentation makes no reference of an interval type, which is generally the way to go for decidable type-checking in HoTT without univalence as an opaque axiom. Pi types are mentioned, but Yon does not have dependent types. From what I can tell, they are polymorphic, maybe even just simply-typed (except for identity types under Pi). See here in the repo: https://github.com/yon-language/yon/blob/523e363a4a00e8da1410a2521b1d7d1309d360ce/… The datatype Ty only refers to other Ty's. Thus, it is not dependent. Terms cannot appear in types. Pi is e
Read the rest
xplicitly indexed by a type defining its domain and codomain. A pi type is not a pi type if its codomain cannot depend on its domain. 2. Normalization can fail in Yon. Yon's docs say that its universe of propositions has booleans (https://yon-lang.org/book/heyting-core?_highlight=prop). It also says its logic is intuitionistic (AKA, constructive). However, it also says the logical connectives on booleans are CLASSICAL. This implies law of excluded middle, which is NOT constructive without careful sandboxing (e.g., Linear logic). Yon dangerously allows propositions to be lifted to booleans. If I am interpreting correctly (docs are very vague), this means propositions can be lifted to terms. This causes an obvious failure of normalization due to assumed proof irrelevance (otherwise Prop would not be distinguished) (also see Coquand's paper on this https://arxiv.org/abs/1911.08174). 3. Yon's type definitional equality does not actually reduce types. See here. This is the function used by the type-checker to check if types are equal. https://github.com/yon-language/yon/blob/523e363a4a00e8da141... No reduction actually occurs, conveniently because none of the types actually contain terms (that is, it is simply typed). Yon claims to be dependently-typed. See this in the repo: https://github.com/yon-language/yon/blob/523e363a4a00e8da1410a2521b1d7d1309d360ce/… > Types in Yon Core kernel — the small dependent type theory used for the operational semantics. Suppose I'm reading the source code wrong. Conveniently, the comment one line below reveals, once again, that the "type theory" is simply-typed: > * T, U ::= Type_n universe of level n > * | Pi(x:T). U dependent function Pi types eliminate into a FIXED type that does not depend on x. This means there is also no purpose for having a universe hierarchy. To confirm, I scoured the docs a bit for any examples using Pi types or Sigma types. I searched the docs, and could not find any, besides this example: > world W { Code is X } > place Account in W { balance number } > fun takes_sub(s: { a : Account where Pi(x: Account). Pi(y: Account). Id(Account, x, y) }): number { return 0 } > fun main(): number { return 0 } Notably, the identity is the only constructor for Ty indexed by a term. That is, Pi types can ONLY eliminate into the identity. What if I want my Pi type to eliminate into anything else living in Prop? e.g., an existential like \forall (x : Nat), \exists (y : Nat), x < y. Unfortunately impossible in Yon. This project is clearly produced by AI, and clearly dangerously incorrect. Do not use this for anything serious.
In Yon – a topos-oriented language with a content-addressed lattice heap
amenn·Jun 5, 2026Submission

Yon – a topos-oriented language with a content-addressed lattice heap

Hello everyone. In the last two years I spent, as a dev, part of my free time stretching the limits of my knowledge. Not being a mathematician myself, I discovered that formalizing concepts in mathematical language could nonetheless be useful to improve symbolic reasoning about the concepts themselves. I made use of both books and AI, and I followed the development of the latter, mainly with a critical eye. I have several open projects, and from some observations and explorations on one of them I started asking myself what the current limits of reasoning, of logic, of mathematics itself are. So I explored categories, and topoi, above all starting from Mazzola's theory of music. I asked myself whether this could influence type theory in programming, and I ran some experiments. Out of this came this programming language, Yon, inspired by Yo
Read the rest
neda and by morphisms. From another project I drew observations on the Leech lattice; from yet another, some experiments with mmap and coordinate-based allocation in a structure that would be advantageous, again, in a topological sense. The language certainly has mistakes here and there and I wrote the documentation in a hurry; the work took 3 weeks in total. It compiles to LLVM for performance reasons, and for now I preferred to avoid a VM and a GC. It contains unusual data structures that turn out to be performant. It's worth a look, and I hope it will win some converts, and that someone will want to help me with its development. I'd love for it to bring fresh stimuli to programming and maybe open a few new frontiers. A few concrete details, for those who want to look under the hood. The compiler is a real pipeline, not an interpreter: an OCaml frontend takes .yon source into a custom MLIR dialect I called "topos", where the categorical constructs live as first-class operations; its lowering passes take everything down to LLVM IR and from there to a native executable. A single command, yonc, drives the whole chain, and you can stop at any intermediate stage to see what a categorical construct actually becomes on its way to silicon. The runtime is where the Leech lattice observations ended up. The heap is content-addressed over Λ₂₄: every value is mapped to a lattice point and canonicalized under the Conway group Co₀ (via libmmgroup), so the same content always lives at the same address. That buys three things I would now find hard to give up: equality is a single machine comparison no matter how big the value is (string equality benches flat at ~17 ns up to 32,768-character strings, because it compares handles, never bytes); deduplication is global and automatic, with no interning logic in user code; and giving up the GC stopped being a renunciation, since cells are immutable and content-addressed, so there is nothing to trace and nothing to move. Concurrency I kept deliberately simple-minded: no threads, no shared mutable state. A program splits into isolated "Spaces" (separate processes, isolation enforced by the MMU) that talk over shared-memory channels with explicit failure semantics. About what is verified and what is just hope: the ground truth is a regression suite of 112 examples plus a cross-Space scenario suite, with exit codes identical on Linux x86-64 and macOS Apple Silicon (Intel Macs: untested). The book on the site, 21 chapters plus appendices, had every snippet compiled and run before being written down. The benchmarks appendix declares its environment and method; I tried not to publish any number without one. The limits of 1.0 are written down as well, in a baseline document that lists every fixed pool (256 heaps per chain, 64 Spaces, 16 concurrent RPC sessions, and so on), with the rationale that a hard limit that fails loudly is a specification, while a soft limit that degrades silently is a bug. For the license I went with the GCC model: compiler and toolchain are AGPLv3, the runtime is AGPLv3 with an explicit linking exception, so the language itself stays free, and the programs you write in it are entirely yours, under any license you choose. Site + book: https://yon-lang.org Repo: https://github.com/yon-language/yon (tag v1.0.0) Happy to answer anything: the topos dialect, why a lattice rather than a hash, what the categorical constructs lower to, what broke along the way.
48 points · Open discussion

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.