2026-04-05

Weekly open source: Go libraries for goro

Week of March 30 – April 5. A cluster of new pure-Go libraries, and they're all motivated by the same thing: goro. PHP is a big language, and making it work in pure Go means closing gaps in what Go can do without cgo or external deps.

Pure-Go libraries for goro

  • gopcre2 — PCRE2 in pure Go, no cgo. Backreferences, lookahead / lookbehind, atomic groups, recursive patterns, Unicode properties. Go's stdlib regexp uses RE2 for guaranteed linear time and deliberately omits these features — but PHP's preg_* family relies on them, so goro needs them too.
  • gobzip2 — pure-Go bzip2 compression as well as decompression. The standard library's compress/bzip2 is decompression-only; goro needs PHP's bzcompress to work, hence both directions implemented from the bzip2 1.0.8 reference.
  • gomailparse — streaming MIME parser. Reads from an io.Reader in a single pass and stores only headers and byte offsets, no body buffering. Backs the PHP mail-handling surface in goro, and is designed to stay efficient when the messages it's indexing are very large.
  • gotz — raw IANA timezone data access in Go: transitions, zone types, POSIX TZ rules, embedded tzdata. Deliberately under the standard time package's abstraction, because goro's date/timezone machinery needs the underlying data directly to match PHP's semantics.

Also seeded this week

  • pktkit — zero-copy L2/L3 packet handling. Frame and Packet are []byte aliases with typed header accessors — no wrapper allocation, no copies on the hot path. Seeded on April 4 and ran up 35 commits by the end of the week laying down IPv4 + IPv6 primitives. Separate thread from goro, but fits the same "pure Go, no cgo" rule.
  • aipencil — CLI that renders structured JSON scene descriptions to SVG and PNG. The idea: give AI systems a deterministic, cheap way to produce images by declaring content and relationships, not sizes and coordinates. Same input always produces the same image. No GPU. First full week of activity after seeding on April 2 — 18 commits.

Sandboxing + networking

Two networking-adjacent projects that fit together more than the topic suggests:

bnpm — "Bubble NPM" — sandboxes package-manager commands inside Linux namespaces. Mount namespace with pivot_root restricts the filesystem to the project directory (read-write) plus read-only system paths. An empty network namespace gives build/test commands zero network access; install commands go through a userspace TAP proxy that filters DNS and IPs to allowed registries only. No root required — unprivileged user namespaces do the work. The goal is to make a malicious install script physically unable to reach outside the project tree.

slirp — user-mode NAT and IP stack in Go, 28 commits this week. Same intent as the original SLIRP: give a process TCP/IP connectivity without root, CAP_NET_ADMIN, or a TUN device. Useful for VM networking, containers, network testing, and anything that wants a protocol stack that runs fully in userspace.

PHP in Go, PHP in Rust

goro got 128 commits and the parallel Rust port goro-rs got 50. Both continuing the slow grind toward full PHP test-suite conformance.

Also this week

  • libwallet — 13 commits, steady incremental work on the multi-chain mobile wallet.
  • unixshells/mobile — 13 commits on the mobile SSH / Mosh / SFTP client for iOS and Android.
  • teamclaude — 11 commits on the multi-account Claude proxy with quota-based rotation.
  • squashfs — 8 commits on the pure-Go SquashFS implementation (read / write).