d26624c63b7618b6c222a687a8c2820093d6c7b7
Drop-in copy of labdb's API surface from
fivenode/labdb/api/*.prg into app/api/. Single fnode invocation builds
the whole thing (bridge_server + bridge/ + 22 api/*.prg) into one
24 MB Go binary — no Node.js, no FFI, no Apache.
End-to-end smoke test (server.js not running, ctx empty so defaults
fall back) hitting six endpoints all return well-formed JSON via the
bridge layer + path -> Main dispatcher:
GET /api/hello.prg -> {"msg":"hello from PRG","ok":true}
GET /api/admin-stats.prg -> {"active_sessions":0,...}
GET /api/admin-me.prg -> {"ok":true,"user":{...}}
GET /api/sessions-list.prg -> {"sessions":[],"total":0}
GET /api/records-list.prg -> {"records":[],"sessionId":"",...}
POST /api/devices-register -> {"deviceId":"","status":"pending",...}
One small upstream patch was needed: seven .prg files each define
their own STATIC FUNCTION fn_HGet, but Five doesn't yet honour
file-local STATIC scoping for top-level functions — all definitions
land in the same symbol table and collide. Renamed each duplicate to
<file>_fn_hget so they peacefully coexist; the call sites still
reference fn_HGet and Five resolves them against _helpers.prg's
public version (signature-compatible). TODO: revert once Five gains
file-local STATIC FUNCTION scoping.
What's deferred to 1a.4-4: ctx data injection (so endpoints return
real labdb data), static asset embedding (labdb/public/), and a live
LABDB_DSN round-trip to confirm pgrtl in the request path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fivenode_go
FiveNode for Five — a Harbour-compatible web framework that compiles to a single Go binary. No Node.js, no FFI, no Apache. PRG sources go in, one executable comes out.
Successor to the koffi/N-API based fivenode framework, rebuilt on the Five Pure-Go runtime.
Status
Early bootstrap — Phase 1a in progress.
Architecture
Browser ──── HTTP/HTTPS ──── fivenode_go single binary
├─ Five hbrt VM (PRG interpreter / compiled)
├─ Five hbrtl (483 standard RTL functions)
├─ hbrtl_ext/httpserver — HTTP server RTL
├─ hbrtl_ext/capi — bridge_*.prg helpers
├─ hbrtl_ext/pgrtl — PostgreSQL client RTL
├─ app/ — bridge_*.prg + app PRG
└─ go:embed — static assets
fnode build api/*.prg --extra-rtl=hbrtl_ext/... -o myapp produces a
self-contained binary. No external dependencies beyond what the app code
itself opens (e.g. a Postgres connection).
Build
go build -o fnode ./cmd/fnode
./fnode build app/hello.prg -o hello
./hello
License
Copyright (c) 2026 Charles KWON OhJun. All rights reserved.
Description
FiveNode for Five — Harbour PRG web framework as a single Go binary (no Node.js, no FFI)
Languages
xBase
44.2%
Go
35.8%
HTML
10.2%
CSS
8.1%
JavaScript
1.7%