Static, not noisy
Local inference keeps declarations short. There is no any or dynamic escape hatch underneath them.
scores.popPOPnamespace Scoresfunction main() local score = 10 print(score)end00 / A language in active development
Pop keeps code light, readable, and familiar—then gives every value a real type and every program a predictable native foundation.
pop Native · strongly typed · Luau-inspired
namespace Hellofunction main() local release = "0.1.0-rc.3" print(`🫧 Hello from Pop {release}!`) print("Strong types. Native code. Small syntax.")end01 / Why Pop?
Lightweight languages often move complexity into the runtime. Pop makes a different trade: a small surface with explicit semantics that developers, editors, and compilers can all agree on.
Tour the languageLocal inference keeps declarations short. There is no any or dynamic escape hatch underneath them.
scores.popPOPnamespace Scoresfunction main() local score = 10 print(score)endRecords are records. Classes are classes. Arrays, tables, modules, and namespaces keep distinct, dependable meanings.
player.popPOPpublic record Player name: String score: Int = 0endTagged unions make every state visible. Exhaustive matching keeps new cases from slipping past callers.
search-result.popPOPpublic union SearchResult Found(value: String) MissingendSimplicity with the performance of C, D, and Rust. Pop is designed for efficient native binaries across portable backends.
terminalPOPpop check hello.poppop build hello.pop --output hello./helloNative
foundation
Performance without the punctuation tax
Small, readable source on the front. Typed HIR, verified MIR, and portable native backends underneath.
source.pop → HIR → MIR → native02 / The feel of Pop
Familiar end-based blocks, local inference, first-class functions, and collection literals—built for general-purpose software from day one.
A tagged union gives each state a name and shape.
match is exhaustive. Add a case and callers must handle it.
Types stay precise without repeating what the compiler already knows.
public union SearchResult Found(value: String) Missingendfunction describe(result: SearchResult) match result when SearchResult.Found(name) then print(`Found {name}`) when SearchResult.Missing then print("Nothing was found") endend03 / A unit called Bubble
Every .pop file is a Module. Modules compile together inside a Bubble—the boundary for internal visibility and independent dependencies.
04 / One coherent toolchain
One command, one vocabulary, stable structured output for editors and build systems.
pop checkprove itpop buildcompile itpop runrun itpop testtrust itpop formatshape it05 / Built in public
Pop is under active development and is not production-ready yet. The source of truth is public: architecture decisions, compiler foundations, runtime work, and conformance tests.