Skip to content

What changed in rc.6

Pop 0.1.0-rc.6 is a much broader release candidate than rc.3. The language surface remains deliberately static and Luau-shaped, but the usable foundation now reaches collections, text, bytes, time, files, terminal output, platform facts, and networking.

The reserved Pop.Standard foundation now includes the following user-facing families:

Family Representative APIs
Pop.Sequence map, filter, take, drop, fold, collect, first, last, findOr, sort, reverse
Pop.Math integer min, max, abs, sign, gcd, lcm, coprime, checked power and division helpers
Pop.Text and Pop.Unicode search, slicing, trimming, replacement, splitting, joining, integer parsing, Rune inspection
Pop.Bytes views, reusable Bytes.Buffer, hex/base32/base64, bit operations, comparisons, endian reads and writes
Pop.Time dates, clock values, civil date-times, offsets, deadlines, deterministic test clocks
Pop.Net addresses, prefixes, TCP/UDP, DNS, Unix streams, bounded transfers and network facts
Pop.File and Pop.Directory explicit host capabilities, bounded reads/writes, text reads, directory snapshots
Pop.Terminal, Pop.Process, Pop.Platform output controls, executable/argument access, operating-system and architecture facts
Pop.Random, Pop.Uri, Pop.Version, Pop.Locale, Pop.Mime, Pop.Guid, Pop.Csv, Pop.Path typed parsers and deterministic value helpers

These are typed namespaces and functions, not dynamic member lookup. Cost, allocation, capability, and failure behavior are part of each API contract. See Standard API map for examples and the authoritative source/baseline pointers.

String is now an exact Iterable<Rune>, so this is a valid rc.6 program:

namespace CountLetters
function main()
local count = 0
for rune in "Pop 🫧" do
if Unicode.isAsciiLetter(rune) then
count += 1
end
end
print(count)
end

The loop decodes each Unicode scalar once. Text.View remains a borrowed, non-iterable view in this release.

The driver now has separate source and manifest workflows for check, fix, lint, format, build, documentation, run, test, and benchmark, plus new, initialize, ffi generate, and the experimental C transpiler. Manifest commands use --manifestPath bubble.toml; format also accepts --check. See Command-line reference.

Packages resolve local and locked Bubble graphs, build library/binary/test/ benchmark selections, emit documentation and .poplib metadata, and preserve the Item → Module → Bubble → Package → Workspace ownership model.

Loopback-capable TCP and UDP APIs use typed streams, bounded byte transfers, deadlines, cancellation, and explicit outcomes. Pop.Http is a separate versioned Package for HTTP/1.1 request/response values; it is not folded into the reserved Standard Bubble. The HTTP example is a normal dependency-driven Bubble under examples/httpServer/.

rc.6 is still a release candidate. The LLVM/native path is the actively delivered backend. The MIR interpreter is an internal conformance engine, and the C backend remains experimental and capability-limited. Runtime reflection, dynamic values, catchable source exceptions, and implicit host I/O remain out of the language.