Releases: ColinHouse/Sprig
Release list
Sprig v0.5.0-beta.1
What's Changed
- Consolidate executable tutorials and make doc snippet roles explicit by @ColinHouse in #41
- Stabilize JVM metadata and cover JSON boundaries by @ColinHouse in #43
- Add a thin JVM nominal-contract bridge: conform C to J by @ColinHouse in #44
- Conform audit repairs: effective Java contract, Object methods, phase ordering by @ColinHouse in #45
- Polish runtime failure UX: wrapped messages, source ranges, opt-in stack trace by @ColinHouse in #47
- Complete #22 evidence: local and imported Int/Int32 runtime span matrix by @ColinHouse in #49
- Bounded JVM interop: opaque arrays, concrete generics, explicit collection adapters by @ColinHouse in #50
- Implement owner-relative portable local dependency locks (schema 4) by @ColinHouse in #53
- Close final generic-evidence holes: Comparable projection, raw Sprig collections, recursive shapes by @ColinHouse in #52
- Add a Java-to-Sprig wrapper source generator (sprig wrap) by @ColinHouse in #54
- Mechanize tracked sprig.lock conflict repair by @ColinHouse in #56
- Add built-in sprig test for project programs by @ColinHouse in #51
- Add sprig-json-codec: path-aware JSON decoding/encoding helpers by @ColinHouse in #58
- Application foundation: HTTP, std utilities and practical package UX by @ColinHouse in #59
- Add Fabric/JVM framework integration guide and refresh alpha-era docs by @ColinHouse in #57
- Beta prep: align package exit codes and stale docs by @ColinHouse in #60
- Repository cleanup: organize docs, tests, and tooling by @ColinHouse in #61
- Beta stabilization: diagnostics, Git lock bounds and resolver evidence by @ColinHouse in #62
- Bilingual beginner onboarding and Task Tracker tutorial by @ColinHouse in #63
- Prepare Sprig v0.5.0-beta.1 by @ColinHouse in #64
Full Changelog: v0.4.0-alpha.1...v0.5.0-beta.1
Sprig v0.4.0-alpha.1
Sprig v0.4.0-alpha.1 — formatter, re-exports, match expressions and a correctness pass
Compiler 0.4.0-alpha.1, JDK 17+, Apache-2.0. Experimental Alpha for
trying small tools and contributing, not production migration. Publication runs
through the exact-tag release workflow; the executed evidence is recorded in the
release validation record.
Highlights since v0.3.0-alpha.1
- Canonical formatter —
sprig fmtpreserves comments and trivia, formats a
file or a project, supports--check, and replaces files atomically. The
grammar now retains comments for the formatter while semantic layout stays
strict. - Explicit module re-exports —
export alias.Symbolforwards original
declarations through module facades without wrapper code; collisions, cycles
and package boundaries are diagnosed, andsprig apireports the originating
module. - Expression
match—matchcan be used as an expression with strict
contextual result types, shared exhaustive/binder rules, side-effect-safe
scrutinee evaluation, and checked effects. - Adversarial correctness pass — ten confirmed defects fixed with
independent regressions: inferred global binding soundness, generated Java
type-name collisions, default field effect propagation,finallycompletion
analysis, bare-CR layout positions, JVM source-vs-bridge method resolution,
unnamed-package imports rejected beforejavac, managed-installer ZIP
hardening (links, traversal, duplicate entries), indexed-assignment key/index
type checking (writes now enforce the same compatibility the read path
already enforced), and null-safe nullable scalar equality (Int32?/Float32?
no longer use Java object identity and null operands no longer throw). - Evaluation and mutation contracts — binary operands evaluate left to
right, each exactly once, soinno longer inherits Java's
container.contains(element)argument order; compound assignment through a
map index requires an existing key and raises a catchableErrorwhen the
key is missing instead of a Java unboxing failure. - Managed SDK install and upgrade — versioned user-scoped installs under
~/.sprigwith checksum + smoke verification, atomiccurrentswitch and
sprig upgrade/upgrade --checkon Linux/macOS; source checkouts and
unmanaged ZIPs are refused with actionable diagnostics. - Unicode code-point strings —
length, indexing,charAt,codeAt,
substring,indexOfand iteration count Unicode code points; there is no
Chartype, and the JVM boundary remains a single UTF-16 unit. sprig apifor Sprig and Java — compiler-resolved module/project metadata
with--member, plus existing Java class inspection; neither executes
application code.capabilitiesgained feature guidance andexplainricher
repair metadata.- Libraries and applications —
sprig-cli,sprig-sqlite(including
migrations) andsprig-web, with the mini-web, ledger, sqlite-migrations,
json-select and agent-tool examples, all exercised by the release gates. - Agent-facing diagnostics — every stable
SPR-*code has a concise
meaning plus structuredsprig explain --jsonguidance (causes, safe fixes,
related codes, help topic), and capability claims point to executable
regression evidence enforced by a consistency gate. Repair metadata remains
guidance only:machineApplicablestaysfalse, with no automatic semantic
rewrites. - Repository hygiene — milestone plans and blind-trial evidence are archived,
audit regressions are permanent undertests/adversarial/regressions/, and
docs/README.mddefines the documentation trust order.
Try it
Extract sprig-v0.4.0-alpha.1-jdk.zip after checking its .sha256, add bin
to PATH, and install JDK17+ (the SDK does not bundle Java):
sprig version
sprig init my-tool
cd my-tool
sprig resolve
sprig run
sprig fmt --check
On Windows use bin\sprig.cmd; on Unix bin/sprig. See the
formatter, re-exports,
match expressions and
known limitations contracts.
Compatibility and limits
No existing syntax, numeric, nullability, generic or effect contract was
redesigned. Lock schema 3 and the project model are unchanged. Publishing and
registry/authentication, LSP/IDE, generic inference/variance, interfaces and
self-hosting remain absent; Windows stays an experimental, non-blocking preview.
Types do not prove numerical stability, and Java generic/array/varargs interop
remains limited. sprig api and sprig check never execute application code.
Sprig v0.3.0-alpha.1
Sprig v0.3.0-alpha.1 — tools, JVM libraries and contributions
Compiler 0.3.0-alpha.1, language 0.8-dev, JDK 17+, Apache-2.0.
Experimental Alpha: for trying small tools and contributing, not production migration.
This candidate's exact publication and platform evidence lives in the
release validation record.
What you can build
Sprig is a small, explicit JVM language for tools, automation and reliable
application code with human–AI collaboration. The compiler's capabilities,
help, API metadata, doctor and structured errors guide a query/check/repair loop.
- Apache Maven Resolver supplies effective POMs, parents/BOMs and transitive
compile/runtime JARs. Manifest exact versions, SHA-256 locks and offline reuse
feed one classpath for check/build/run/api/doctor. No Maven CLI/plugins. - Relocatable Unix and Windows
sprig.cmdlaunchers require a JDK, no Bash/WSL
for preview Windows SDK usage. Linux/macOS × JDK17/26 are supported release
gates; Windows remains experimental and non-blocking. - Explicit reserved
@std/module.sprimports work outside the checkout and
lock the bundled std version/digest.build --emit-java-onlyexposes checked
generated Java without javac. - Ordinary Sprig
stdmodules supply UTF-8 IO/path, arguments/environment,
text/time and a recursive closed JSON variant with exact numeric text. - Three real projects ship: repository auditor, Maven-backed HTML utility,
subset source/AST analyzer. All use the normal compiler/JVM pipeline. - Contributor workflow: one verify command, scoped public issue contracts,
PR/issue templates and welcomed, accountable AI assistance.
Try it
Extract sprig-v0.3.0-alpha.1-jdk.zip after checking its .sha256, add bin
to PATH, and install JDK17+ (the SDK does not bundle Java):
sprig version
sprig init my-tool
cd my-tool
sprig resolve
sprig run
On Windows use bin\sprig.cmd; on Unix bin/sprig. See
showcases, standard layer and
dependency contract. Initial Maven resolve requires network;
subsequent run --offline uses the hash-verified locked cache.
Compatibility and limits
Lock schema 3 supersedes schema 2: run resolve explicitly; no silent migration.
Existing language syntax/numeric/nullability/generic semantics are preserved.
Compiler implementation libraries are isolated from application imports.
No publishing/registry/authentication, Maven plugins, non-JAR runtime artifacts,
LSP/IDE, inference/variance, interfaces/traits, new pattern syntax or new backend.
Java generic/array/varargs interop remains limited. The analyzer is a subset probe,
not a self-hosted compiler. Types do not prove numerical stability. See
known limitations. Libraries retain their Java contracts.
Sprig v0.2.0-alpha.1
Sprig v0.2.0-alpha.1
Second public prerelease. Compiler 0.2.0-alpha.1, language 0.8-dev, JDK 17+.
Highlights
Explicit multi-parameter generics, local/Git dependency resolution, and an
Agent SDK with offline language/JVM discovery. This remains a Java stage-0
compiler that emits Java and invokes javac, not a self-hosted compiler.
Generics
generic K, V:
class Entry:
let key: K
let value: V
One or more explicit type parameters, explicit generic calls/constructors,
generic variants, Practical Strict nullable arguments, invariant generics,
and a leading requires T: Equatable capability. JVM lowering is erased/boxed.
No type argument inference, variance, Comparable or user-defined capabilities.
See generics.
Projects and dependencies
[[dependency]]
name = "math"
git = "https://example.invalid/math.git"
branch = "main"import "@math/vector.spr" as vector
sprig.toml, sprig resolve, schema-2 sprig.lock, package-local aliases,
local paths, Git branch intent locked to exact SHA, exports enforcement and
offline cached builds. This illustrative URL must be replaced with a real
Sprig package. See projects and dependencies.
Agent/JVM tooling
help, capabilities, api, doctor, structured explain, stable codes and
JSON diagnostics. Third-party JVM JARs use explicit --classpath on
api/check/build/run; Java reference results remain conservatively nullable.
Reliability fixes
Generic JVM lowering, numeric widening in generic/collection positions and
generic variant soundness; scoped lockfile edge identity, symlink confinement,
Git checkout byte/mode integrity checks and concurrent atomic cache installation.
Tests exercise the parser, static checker, generated Java and JVM execution separately.
Known limitations
Maven/JVM dependency resolution and project-aware Maven classpaths are not
implemented. The stage-1 frontend remains a probe. Comparable, inference,
variance, interfaces/traits, publishing/registry and LSP/IDE are not implemented.
Local locks use absolute paths; runtime/manifest diagnostic spans are limited.
Type safety does not guarantee numerical stability. See limitations.
Installation
Download sprig-v0.2.0-alpha.1-jdk.zip and its .sha256 from the
GitHub prerelease.
Verify SHA-256, extract, then run bin/sprig version, capabilities --json,
check examples/hello.spr and run examples/hello.spr. JDK 17+ is required;
the archive includes compiler/runtime and ANTLR, not a JDK. The package includes
LICENSE/NOTICE and third-party provenance. See the
validation record.
Verified release source and assets
Annotated tag: v0.2.0-alpha.1
Exact release SHA: 677429be905750b975d491f8a5c60e29d8ebaee2
JDK 17/26 and docs CI · Release build/test/package/smoke.
Published ZIP SHA-256: 66453a482b449969f95ef65dffea45b1f33a4abfdc7d02a163c83e23891b3433
Both uploaded assets were downloaded again; SHA-256 and full BUILD_INFO source revision matched. Fresh extraction passed version, capabilities JSON, hello check/run and SDK document links on JDK 17 and 26.
Sprig v0.1.0-alpha.1
Sprig v0.1.0-alpha.1
Published 2026-09-24 as a GitHub prerelease:
https://github.com/ColinHouse/Sprig/releases/tag/v0.1.0-alpha.1
The first public alpha of the Sprig Java stage-0 compiler. Sprig source is
parsed and checked, lowered to Java source, compiled with javac, and run on
the JVM. The language design remains Sprig v0.7.
- Repository: https://github.com/ColinHouse/Sprig
- Documentation: https://colinhouse.github.io/Sprig/
- License: Apache-2.0 (
LICENSE,NOTICE)
Download
| Asset | Notes |
|---|---|
sprig-v0.1.0-alpha.1-jdk.zip |
Compiler/runtime, ANTLR 4.13.2, launcher, Hello World, license and notices. No JDK included. |
sprig-v0.1.0-alpha.1-jdk.zip.sha256 |
SHA-256 checksum of the archive. |
Verified checksum of the published archive:
fccc87e0d92c864672824d42035cbc9b1486da430166f744325db6b8def436db sprig-v0.1.0-alpha.1-jdk.zip
The archive was downloaded from the release again and smoke-tested
(bin/sprig version, check, run); its BUILD_INFO.txt records source
revision 6e7b57e. Extract it and run bin/sprig run examples/hello.spr with
JDK 17 or newer on PATH.
Included and exercised
- Indentation-based syntax, typed functions, local inference, classes, enums,
sealed variants, and exhaustivematchstatements. let/var, nullable types and flow narrowing, typed error handling,
modules, and separate immutable/mutable collections.- Checked fixed-width integer operations, explicit numeric conversions,
BigInt,Decimal, IEEEFloat/Float32, and static diagnostics for
ambiguous numeric operations. - A command line for
check,build,run, diagnostic explanations, and
JSON diagnostics. - Regression coverage for parser recovery, zero-argument lambdas, contextual
Int32compound assignments, and nullable values passed to Java references. - A VitePress documentation site built in the same repository.
Runtime and build requirements
The source is compiled with javac --release 17 and verified end-to-end on
OpenJDK 17.0.19 and 26.0.1 (macOS Apple Silicon); hosted CI covers Linux for
both JDKs. The supported runtime is JDK 17 or newer. The source archive
contains the compiler/runtime, ANTLR 4.13.2 and its license notices; it does
not contain a JDK.
Known limits
This is an alpha compiler, not a production stability or numerical correctness
claim. It is not self-hosted and has no package manager, language server, IDE
plugin, complete standard library, or unrestricted Java interop. See
docs/KNOWN_LIMITATIONS.md and docs/NUMERIC_SEMANTICS.md.
Report reproducible problems through the repository issue tracker with the
Sprig version, JDK/platform, minimal source, exact command, and diagnostics.