-
v1.0.0 Stable
released this
2026-06-20 18:48:09 +00:00 | 16 commits to main since this releaseFirst stable release of nuntius: a small, opinionated, modular contact form
backend written in Go. A single static binary, four form kinds out of the box,
SMTP delivery, a JSONL newsletter log, strict TOML configuration, and env-var
secrets. Its only dependency outside the standard library is the first-party
interpres TOML parser.Added
- Server —
cmd/server, the HTTP entry point.http.Serverwith explicit
ReadHeaderTimeout(10 s),ReadTimeout(15 s),WriteTimeout(30 s), and
IdleTimeout(60 s). Graceful shutdown onSIGINT/SIGTERMwith a 15 s
budget. Structured logging vialog/slog(JSON handler, INFO level, stdout)
with one log line per request.GET /healthendpoint.--versionflag. - Four form kinds —
contact,feedback,newsletter, andgeneric, each
with its own endpoint, per-IP rate limit, CORS allowlist, and honeypot field.
OnePOST+ oneOPTIONShandler per form on a freshhttp.ServeMux. - SMTP delivery — stdlib
net/smtpwithPLAINauth,multipart/alternative
HTML + plain text bodies, one dedicated template per form type. - Newsletter JSONL log — append-only
data_dir/newsletter-<name>.jsonlwith
crash-safeO_APPENDwrites;CountandListskip malformed lines. pkg/contactform— public Go package withRequest/Response/
FieldError/ErrorResponsetypes and aValidatefunction for all four
form types.- Per-IP rate limiting — in-memory token bucket per form, configurable per
hour. - Per-form honeypot — silent 200 on bot fill, no mail, no subscriber line.
- Per-form CORS — allowlist enforced on preflight and actual requests, with
echoedAccess-Control-Allow-Origin+Vary: Origin. - TOML configuration — parsed by the first-party
interpreslibrary, with
strict unknown-field rejection and per-type validation that fails loud on
typos at startup. - Env-var secrets —
${VAR_NAME}/$VAR_NAMEexpansion before the config
is parsed, so SMTP passwords never live in the file. - Auto-generated config — a three-form TOML template is written to
/etc/nuntius/config.tomlon first start. - systemd unit — installed inline from
docs/deployment.mdwith
Restart=on-failureandEnvironmentFile=. - Install script —
install.sh, idempotent, handles user creation, config
generation, and secrets file mode0600. - docs/ —
architecture.md,configuration.md,api-reference.md,
deployment.md,security.md,library-usage.md.
Downloads
- Server —