Skip to content

Releases: ColinHouse/Sprig

Sprig v0.5.0-beta.1

Sprig v0.5.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 22:53
8df389f

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 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Sep 15:37
b6077e0

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 fmt preserves 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.Symbol forwards original
    declarations through module facades without wrapper code; collisions, cycles
    and package boundaries are diagnosed, and sprig api reports the originating
    module.
  • Expression match — match can 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, finally completion
    analysis, bare-CR layout positions, JVM source-vs-bridge method resolution,
    unnamed-package imports rejected before javac, 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, so in no longer inherits Java's
    container.contains(element) argument order; compound assignment through a
    map index requires an existing key and raises a catchable Error when the
    key is missing instead of a Java unboxing failure.
  • Managed SDK install and upgrade — versioned user-scoped installs under
    ~/.sprig with checksum + smoke verification, atomic current switch and
    sprig upgrade/upgrade --check on Linux/macOS; source checkouts and
    unmanaged ZIPs are refused with actionable diagnostics.
  • Unicode code-point strings — length, indexing, charAt, codeAt,
    substring, indexOf and iteration count Unicode code points; there is no
    Char type, and the JVM boundary remains a single UTF-16 unit.
  • sprig api for Sprig and Java — compiler-resolved module/project metadata
    with --member, plus existing Java class inspection; neither executes
    application code. capabilities gained feature guidance and explain richer
    repair metadata.
  • Libraries and applications — sprig-cli, sprig-sqlite (including
    migrations) and sprig-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 structured sprig explain --json guidance (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: machineApplicable stays false, with no automatic semantic
    rewrites.
  • Repository hygiene — milestone plans and blind-trial evidence are archived,
    audit regressions are permanent under tests/adversarial/regressions/, and
    docs/README.md defines 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 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Sep 08:04
0d56ef6

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.cmd launchers 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.spr imports work outside the checkout and
    lock the bundled std version/digest. build --emit-java-only exposes checked
    generated Java without javac.
  • Ordinary Sprig std modules 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 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Sep 17:36
677429b

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 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Sep 20:29
6e7b57e

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.

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 exhaustive match statements.
  • 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, IEEE Float/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
    Int32 compound 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.