cljgo 0.7.0
Changelog
- bed529b: ADR 0078: complete the parameter model — validators, trim, multi, global flags, aliases (#133) (@muthuishere)
- f5c9e7e: ADR 0082: publishing is a pluggable adapter surface in build.cljgo (#132) (@muthuishere)
- fd5b0c5: ADR 0083 + spike s48: bri.cli is a native cross-platform primitive suite (no Charm) (#137) (@muthuishere)
- 9786b4d: ADR 0084 + spike s49: bri.sys native systems layer — cgo-FREE (purego + Go-asm + x/sys) (#138) (@muthuishere)
- f4ea57b: ADR 0085: namespace taxonomy — clojure.* / clj.* / bri.* (core/cli/web) (#139) (@muthuishere)
- cdeeddc: ADRs 0078-0081: the bri.cli block (CLI app-shape of bri) (#130) (@muthuishere)
- 72d9f09: Perf: cross-var direct-call emission for top-level defns (ADR 0064 addendum) (@muthuishere)
- 61345f0: benchmark: AOT-vs-AOT-vs-AOT head-to-head (cljgo / Glojure / let-go) + honest FAQ rewrite (#143) (@muthuishere)
- 8ff94b2: benchmark: credit let-go's suite explicitly in the AOT section + results footer (#147) (@muthuishere)
- 071f4fe: benchmarks/faq: drop thread narrative from size rows — numbers only (#146) (@muthuishere)
- 82a85be: benchmarks: re-measure 2026-07-25 — hello is 6.7 MB on HEAD, not 5.3 (#145) (@muthuishere)
- 8f80ae1: benchmarks: single-corpus size row (6.7 MB) + verifiable what-ships evidence (#144) (@muthuishere)
- c01160f: bri.cli increment 2 Part B+C: native TUI widget set (select/confirm/multiselect/editor) (#142) (@muthuishere)
- 7af357e: bri.cli increment 2: interactive prompt + :env resolution (unified param model) (#141) (@muthuishere)
- 31d31a2: bri.cli.api: :device — OAuth 2.0 device flow, no secret typed into the terminal (ADR 0092) (#158) (@muthuishere)
- aa728cc: bri.cli.api: an OpenAPI client that logs in automatically (ADR 0091, realizes ADR 0080) (#157) (@muthuishere)
- 0dda478: bri.cli: :multi params — collect a vector, wiring the multiselect widget (#149) (@muthuishere)
- 58491d1: bri.cli: public prompt API + bri.cli.auth (login → keychain) (#150) (@muthuishere)
- 665b301: bri.cli: the CLI app-shape of bri — deterministic core + validators (ADR 0078, increment 1) (#134) (@muthuishere)
- 4676369: bri.core.cache: the fundamental in-process cache — Cache protocol + pure local impl (ADR 0093) (#161) (@muthuishere)
- db0cf66: bri.core.data: cast/cast! — the mass-assignment-safe input gate (app-framework task 2.2) (#163) (@muthuishere)
- 27a2c19: bri.core.jobs: the fundamental in-process job queue — Queue protocol + pure core.async impl (ADR 0094) (#162) (@muthuishere)
- 43a301d: bri.core.secrets: Bun.secrets-style keystore (OS keychain by default), opt-in + cgo-free (#148) (@muthuishere)
- 4c0005b: bri.db: opt-in linking — SQLite/pgx out of every db-less binary (ADR 0076) (#127) (@muthuishere)
- 723c2ea: bri.web.openapi: OpenAPI-driven typed HTTP client (ADR 0090) (#156) (@muthuishere)
- 968361f: chore(aot): regenerate after direct-call merge (@muthuishere)
- b56cfe1: chore(aot): regenerate after known-issues merges (@muthuishere)
- d8a4041: chore(diag): regenerate registry.lock after G5009 append (@muthuishere)
- 7f6d415: cljg.io increment 1: filesystem — the structural file/path/dir ops clojure.core lacks (ADR 0089) (#154) (@muthuishere)
- 2a3a72f: cljg.io increment 2: process exec — run a subprocess, capture {:out :err :exit} (ADR 0089 §3) (#155) (@muthuishere)
- 95ae041: cljg.net.http: outbound HTTP client (ADR 0087, first cljg.* stdlib namespace) (#151) (@muthuishere)
- 30b7187: cljg.os: cgo-free cron scheduler (ADR 0088, second cljg.* stdlib namespace) (#152) (@muthuishere)
- 90acbab: cljg.os: service management — run a binary as an OS service (ADR 0088 §3) (#153) (@muthuishere)
- 24ee46d: cljg: sleep + a public in-memory writer, and a did-you-mean for Java statics (@muthuishere)
- 71565d6: cljgo dist: one command cross-compiles to every platform (ADR 0077) (#128) (@muthuishere)
- 813fae2: cljgo migrate: up/status/new + dev auto-apply — the migration CLI (app-framework task 2.3) (#160) (@muthuishere)
- e42e1bf: deploy: generated -main answers
migrate— ./app migrate && ./app (app-framework task 2.5) (#164) (@muthuishere) - 9dff28c: diag: build-phase errors read like run-phase ones; arity errors name the fn that mismatched; G5008 for collection SQL params (@muthuishere)
- beba8eb: docs(adr): 0103 — cljg.* Bun-complete wave (transport/security/util primitives; auth→cljg.security) (@muthuishere)
- dd5a5f0: docs(adr): 0103 — owner-final Wave-1 scope: http/serve+socket are core; ws joins grpc in bri (later) (@muthuishere)
- d4105b5: docs(adr): 0103 — record CGO=0 feasibility result (s57-s64 all green) (@muthuishere)
- 4e5b49f: docs(adr): 0104 docs-as-product (Book/by-example/packs) + 0105 cljx.test (@muthuishere)
- 23041b6: docs(adr): 0106 cljx.core ergonomics + s68 prototype (add!/bump!/dbg) (@muthuishere)
- c51fb41: docs(adr): 0107 — defexpand machinery MUST be implemented in Go (pkg/analyzer), not a core.clj macro (@muthuishere)
- bbcbfb5: docs(adr): cljx = clj extensions; settle cljx.core vs cljg.core; s68 dual-harness verified (@muthuishere)
- 8fee20f: docs(by-example): hand-author all 7 pages — small→mid→big, one idea at a time (@muthuishere)
- 00d03db: docs(site): FAQ as its own sidebar page — accordion cards, dual-publish how-to with failure mode (@muthuishere)
- 26c820b: docs(site): FAQ cards expanded by default (@muthuishere)
- 8a43dd0: docs(site): FAQ on the Why page — honest answers to the Slack thread questions (@muthuishere)
- f80e7bb: docs(site): FAQ — what cljgo is for (web APIs + CLIs, small binaries, batteries as templates) (@muthuishere)
- 0429283: docs+openspec: ADR 0103 Wave 1 accepted + archive adr-0103-cljg-bun-wave1 (@muthuishere)
- 5773bb5: feat(cljg): cljg.* stdlib gaps (ADR 0101) + move fundamentals out of bri.core.* (ADR 0102) (@muthuishere)
- 629ae6f: feat(cljg): cljg.compress — stdlib gzip/deflate/zlib compress+decompress, streaming over cljg.stream (ADR 0103 wave 1) (@muthuishere)
- bdd17ef: feat(cljg): cljg.http — raw HTTP server primitive extracted from bri.web.http (ADR 0103 wave 1) (@muthuishere)
- 4f3ccb0: feat(cljg): cljg.net.dns — Bun.dns analog over the pure-Go stdlib resolver (ADR 0103 wave 1) (@muthuishere)
- 899fa55: feat(cljg): cljg.security — rename bri.core.security + crypto primitives + s65 unified keychain (ADR 0103 wave 1) (@muthuishere)
- 8686970: feat(cljg): cljg.socket — TCP/unix/TLS listen+accept+dial and UDP datagrams over stdlib net, connections as cljg.stream duplex handles (ADR 0103 wave 1) (@muthuishere)
- 92f6da7: feat(cljx): cljx.core ergonomics + ADR 0107 defexpand (zig-style inline) (@muthuishere)
- cf5a966: feat(cljx): cljx.test — mocks, spies, capture-by-default, expect matchers (ADR 0105) (@muthuishere)
- a4d342a: feat(contrib): native clojure.{tools.cli,data.csv,data.json,core.match} — tier-1 (ADR 0097) (@muthuishere)
- f6ad295: feat(lang): functions carry metadata — lang.MetaFn closes the JVM gap (ADR 0105) (@muthuishere)
- 110c712: feat(test): a red suite fails the process on every path, plus
cljgo test --compiled|--both(ADR 0105) (@muthuishere) - cbadd1b: fix(conformance): cljx-test-expect-failure-message — clear the process tally, unfreeze the stale var shape (@muthuishere)
- 3ac3942: fix(core):
for:when/:while/:let + core.match map key-union dispatch (@muthuishere) - 81fc2ad: fix(core.match): map values see ::not-found, so a :guard on an absent key runs (@muthuishere)
- 78b149c: fix(corelib): my merge regression — hinted Java statics keep the byte-stable message (@muthuishere)
- aeb578a: fix(db): a collection inside a row map is G5009, not the G5008 varargs misuse (@muthuishere)
- 68280e6: fix(interop): .getMessage on host errors, qualified class names in extend-protocol, and a real diagnosis for Java statics (known issues 4/6/7) (@muthuishere)
- 07695c7: fix(match): the ::not-found sentinel must not escape into the action body (@muthuishere)
- 51ae566: merge(cljx/core): reconcile onto contrib-tier1 (@muthuishere)
- 944b277: merge(cljx/fnmeta): reconcile onto contrib-tier1 (@muthuishere)
- d8d9580: merge(cljx/runner): reconcile onto contrib-tier1 (@muthuishere)
- 7235957: merge(fix/batch-sleep-out-nanotime): known-issues fixes (@muthuishere)
- 7d02313: merge(fix/diagnostics-batch3): known-issues fixes (@muthuishere)
- 128f8d8: merge(fix/g5008-rowmap-misdiagnosis): name the verb the user actually called (@muthuishere)
- 646a440: merge(fix/interop-host-errors): known-issues fixes (@muthuishere)
- 3f8dd71: merge(fix/match-guard-not-found): close verifier-found defect (@muthuishere)
- 14eb7ce: merge(fix/match-map-and-for-modifiers): known-issues #1 #2 (@muthuishere)
- c91eebb: merge(perf/direct-call): ADR 0064 cross-var direct-call emission (@muthuishere)
- 742f130: merge(perf/numeric-infer): ADR 0067 second op table — quot/rem/bit-/unchecked-/predicates (@muthuishere)
- a740fa9: merge(perf/seal-core-flag): opt-in --seal-core (ADR 0108) — not default, buys ~1-2% micro only (@muthuishere)
- 769c2ea: openspec: adr-0103-cljg-bun-wave1 proposal (http/serve+socket+dns+compress+security; ws/grpc deferred to bri) (@muthuishere)
- 2409a9c: openspec: adr-0105-cljx-test proposal (mocks/spies/capture + runner exit-code fix + fn-meta gap) (@muthuishere)
- fbf35e8: openspec: adr-0106-cljx-core proposal (add!/bump!/dbg ergonomics) (@muthuishere)
- 93541f6: perf(emit): ADR 0067 second op table — quot/rem, bit-, unchecked-, min/max, int64 predicates (@muthuishere)
- f19f285: perf:
cljgo build --seal-core— hard-seal core arithmetic, opt-in and measured (ADR 0108) (@muthuishere) - 1668885: release: prepare v0.7.0 — bump pinned refs, close the known-issues sweep (@muthuishere)
- 5a3d0f4: rename bri.* to the ADR 0085 taxonomy: bri.web.* + bri.core.* (#140) (@muthuishere)
- 6ac9c07: rollout v0.6.0: bump template Dockerfile pin + README bri capabilities (db/generator/otel) (#125) (@muthuishere)
- 164e37c: spike s46: bri.cli UI backend — Charm vs bespoke (VERDICT: Charm) (#135) (@muthuishere)
- 35ad7fb: spike s47: native TUI fundamentals (no Charm) — VERDICT: build our own, portable (#136) (@muthuishere)
- 3bf8892: spike(s69): close defexpand — mechanism proven, semantics R1-R7; amend ADR 0107 (@muthuishere)
- 097b6da: spike: ADR 0103 pure-Go (CGO=0) feasibility — s57-s64 all green (@muthuishere)
- 72679ba: spike: s65 — cross-platform keychain (mac/win/linux) unified store (@muthuishere)
- cf1eb63: spike: s66 — cljx.test feasibility MET, dual-harness identical (ADR 0105) (@muthuishere)
- 22d0cdb: spike: s67 — by-example docs generator + 7-page sample course (ADR 0104) (@muthuishere)
- 940f91e: test(bri): de-flake TestMetricsStackOverhead — min ratio over samples (#131) (@muthuishere)
- c145c37: wip(cljg): agent build wf-1 (green in isolation) (@muthuishere)
- 6536cba: wip(cljg): agent build wf-2 (green in isolation) (@muthuishere)
- 2dc194c: wip(cljg): agent build wf-3 (green in isolation) (@muthuishere)
Install
go install github.com/muthuishere/cljgo/cmd/cljgo@v0.7.0Or download a binary above and put it on your PATH.
cljgo repl, cljgo run and Go interop work from the binary alone, with
no Go toolchain installed. cljgo build additionally needs the Go
toolchain and a checkout of this repo — the generated module replaces
the runtime to a local source tree, so set CLJGO_SRC to your clone or run
inside it. Known v0 limitation (ADR 0013); publishing the runtime as a real
Go module retires it.
cljgo's own code is MIT. The vendored runtime under pkg/lang/ is
EPL-1.0, from Glojure — see
NOTICE.