Charles KWON OhJun 8ddd6abc69 feat(fnode): --go-replace and --module for BEGINDUMP-import use cases
Two CLI knobs that together let PRG #pragma BEGINDUMP blocks import
private Go modules and their internal/* packages:

  --go-replace pkg=path
    Adds `require pkg v0.0.0` + `replace pkg => path` to the temp
    go.mod, so `go mod tidy` doesn't try (and fail) to fetch a
    module that lives only on local disk or behind a private
    forge (Gitea, etc.).

  --module <name>
    Overrides the temp-build module name (default fnode_build).
    Use when the BEGINDUMP block needs to reach into another
    module's internal/ packages — Go's internal-visibility rule
    requires the importer to share a parent path with the
    importee, so the build module needs to live somewhere under
    that parent.

Worked example (solmade integration PoC):

  fnode build /tmp/poc_dartapi.prg \\
    --go-replace gitea.fivego.org/kwon_ai/solmade=/Users/charleskwon/solmade \\
    --module gitea.fivego.org/kwon_ai/solmade/_fnode_build \\
    -o poc_dart

A 4-line BEGINDUMP block now imports
"gitea.fivego.org/kwon_ai/solmade/internal/dartapi", links its
AllAliases() function, and returns the real count (3) at run time.
Single 23 MB Go binary, no Node, no FFI.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 14:33:39 +09:00

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)
Readme 139 KiB
Languages
xBase 44.2%
Go 35.8%
HTML 10.2%
CSS 8.1%
JavaScript 1.7%