February 21, 2026

Love at first bracket, hate at first load

Loon: A functional lang with invisible types, safe ownership, and alg. effects

Loon lands: devs swoon while others side‑eye the [ ] and the slow site

TLDR: Loon is a new programming language promising safer, simpler code with zero type annotations and an all‑brackets style. The community is split: some adore the Clojure‑meets‑Rust feel, others question the “no types” claim, grumble about the brackets, and slam the sluggish website—yet the roadmap keeps hopes high.

A new language called Loon just flew into the timeline promising a “no boilerplate” life: everything is an expression, the compiler figures out types for you, it catches memory mistakes, and a fancy “effects” system lets you ask for input or handle errors without messy exceptions. Translation: write less, get more. The demo shows square brackets everywhere and a choose‑your‑own‑adventure way to handle prompts and errors—very slick.

The crowd? Loud. One commenter basically wrote a Valentine: “Clojure + Rust without typing types by hand” vibes had fans buzzing, calling it simple, safe, and seriously fun. But the honeymoon hit turbulence fast. phpnode poked the marketing balloon: the example defines a Shape—so do you “never write a type,” or what? That sparked a mini‑thread of “is this a definition vs. annotation” nitpicks and eyebrow raises.

Then came the Bracket Wars. Why the wall‑to‑wall [ ]? Some love the uniform look; others, like davidee, don’t love the prefix‑everything style but respect the consistency. Meanwhile, the vibe got torpedoed by performance: xigoi says the official site is slow and the docs freeze their browser. Ouch. Still, the roadmap has people excited—if the team can smooth the syntax debate and speed up the site, Loon might just keep flying.

Key Points

  • Loon uses an expression-only design with square bracket syntax, where all constructs produce values.
  • It implements complete Hindley–Milner type inference, including let-polymorphism and row types, eliminating type annotations.
  • Default move semantics with compiler-tracked ownership prevent use-after-move, double-free, and aliasing at compile time.
  • Algebraic effects are declared and handled at call sites, replacing exceptions, async/await, and mutable state with a composable mechanism.
  • Pattern matching supports ADT constructors, literals, and wildcards, with destructuring across let bindings, function parameters, and match arms.

Hottest takes

“conflict with the idea that you never write a type, am I missing something obvious?” — phpnode
“I think I am in love. Clojure + Rust, everything is typed, but I don't need to annotate.” — luckymate
“Looks great! However, the website is really slow.” — xigoi
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.