2026-04-12

Weekly open source: goro CI push, two new Go libs, one shelved experiment

Week of April 6–12. Quality push on the PHP-in-Go runtime, two new Go libraries, and one project I shelved honestly rather than dragged on.

goro: closing the CI gap

KarpelesLab/goro is a reimplementation of PHP in pure Go, tested against PHP's own test suite. This week it went from roughly 256 failing tests to ~199, across 82 commits: $arr[] .= … compound-assignment double-append bug, readonly-property error messages matching upstream exactly, DateTime serialisation rejecting >4-digit years, createFromFormat null-byte handling, multibyte-UTF-8 in EXPECTF regex fixtures, and a proper SKIPIF → skipTest path in the test runner.

A lot of it is error-message text and edge-case conformance rather than "big features", but that's what narrows the gap with real-world PHP — the whole point is to get PHP code to run on goro without noticing. The parallel Rust port, goro-rs, got 35 commits the same week.

litertlm-ios: shelved

I started litertlm-ios on the 6th and shelved it by the 10th. The goal was running Google's LiteRT-LM on iPhone with Metal GPU acceleration. It compiles, it runs, it produces a working LiteRTLM.xcframework — but Google's GPU accelerator for LiteRT-LM is proprietary, and the open-source path only exists if you bridge LiteRT-LM's accelerator-plugin interface to TFLite's Metal delegate. It works as a workaround, not as a foundation for production.

The repo README has a full post-mortem and a comparison table pointing to the runtimes you should probably use instead today — MLX Swift, SwiftLM, llama.cpp, MLC-LLM. If Google ever open-sources the real LiteRT-LM GPU path (there's an upstream issue), the build infrastructure here is ready to pick back up. Until then: better to write down what I learned and move on.

Two new Go libraries

anyhash — a Go hashing library that selects from 60 algorithms by name, not by import. New("sha256") instead of sha256.New(). Case-insensitive name matching, Clone() to snapshot hash state mid-computation, continue writing after Sum(), HMAC and HKDF, and PHP-compatible state serialisation — a hash started in PHP can finish in Go and vice versa. No external dependencies; all algorithms use only the Go standard library.

pktkit — zero-copy L2/L3 packet handling for Go. Frame and Packet are []byte aliases with typed header accessors — no wrapper allocation, no copies on the hot path. Building block for virtual network topologies: devices, hubs, adapters, tunnels, with IPv4 + IPv6 support throughout. Nine commits this week filling out the API surface. (The repo itself is from April 4; this was its first full week.)

Also this week

  • strtotime — 17 commits warming up the PHP-compatible date parser ahead of its finishing push.
  • libwallet — 12 commits of incremental work on the multi-chain mobile wallet.
  • aipencil — early work on a 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 rather than sizes and coordinates.
  • smokenrg — mirrored an old utility from sed.free.fr for extracting audio from Nero NRG files. Pure preservation; free hosting doesn't last forever.