# Hydra changelog
All notable changes to the Hydra project are documented in this file.
This changelog tracks changes across all Hydra implementations
(Haskell, Java, Python, Scala, TypeScript, Clojure, Common Lisp, Emacs Lisp, Scheme)
and supporting infrastructure.
The format is inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and [Apache TinkerPop](https://github.com/apache/tinkerpop/blob/master/CHANGELOG.asciidoc).
Pre-1.0 versions are listed below.
Untagged versions correspond to in-repository version bumps that were not pushed as Git tags or Hackage releases;
they are documented here for completeness.
---
## [0.17.0] - 2026-07-01
Major themes: first-class support for effects and I/O in the kernel, TypeScript and
Scala reaching publishable parity with the other hosts, and continued maturation of
the published-host build model.
### Highlights
- **Effects and I/O** ([#286](https://github.com/CategoricalData/hydra/issues/286),
[#288](https://github.com/CategoricalData/hydra/issues/288),
[#494](https://github.com/CategoricalData/hydra/issues/494)): a new `effect` variant
on `hydra.core.Type` for representing effectful computations; new kernel modules
`hydra.file` (`FilePath`, `FileType`, `FileStatus`, `FileExtension`), `hydra.time`
(`Timespec`), and `hydra.error.file`; new primitive libraries `hydra.lib.effects`,
`hydra.lib.files`, and `hydra.lib.text` with byte-level I/O; and a new
`EffectfulTestCase` mechanism so the common test suite can exercise effectful
primitives across hosts.
- **TypeScript is a complete implementation**
([#462](https://github.com/CategoricalData/hydra/issues/462)): self-hosts and passes
the common test suite, with a per-package npm publish pipeline
([#492](https://github.com/CategoricalData/hydra/issues/492)).
- **Scala publishing**: per-package Maven Central publish infrastructure
([#491](https://github.com/CategoricalData/hydra/issues/491)).
- **Published-host build model**: published mode now compiles the kernel from the
co-generated `dist/haskell` rather than Hackage, removing the need for a
`haskell=local` shim ([#500](https://github.com/CategoricalData/hydra/issues/500));
the oil-and-water principle and cold-build workflow for `dist/haskell` are documented
([#376](https://github.com/CategoricalData/hydra/issues/376)).
- **Kernel hygiene**: `uniqueLabel` (apostrophe suffixes) replaced by `chooseUniqueLabel`
(numeric suffixes) in `hydra.names`
([#436](https://github.com/CategoricalData/hydra/issues/436)).
### Implementations
Eight hosts self-host and pass the common test suite across five families: Haskell,
Java, Python, Scala, and the four Lisp dialects (Clojure, Common Lisp, Scheme, Emacs
Lisp), with TypeScript now joining as a complete host/target. Go remains a "head bud"
(the coder still has emission bugs and the head's runtime is largely placeholder; it
does not yet host the test suite).
### New Features
- Translingual cross-reference convention for `doc` strings: doc-escape tags render to
each host's native doc syntax (Javadoc, Haddock, Sphinx, TSDoc)
([#433](https://github.com/CategoricalData/hydra/issues/433)).
- Neo4j JSON-artifact validation demo, exercised across Java, Python, Haskell, and
TypeScript ([#510](https://github.com/CategoricalData/hydra/issues/510)).
### Improvements
- The Java/Maven publish set now covers every official Hydra target language, one coder
package per implementation family
([#468](https://github.com/CategoricalData/hydra/issues/468)).
- JVM Maven artifact groups are bifurcated to `net.fortytwo.hydra.java` and
`net.fortytwo.hydra.scala`, so the Java and Scala (and future Clojure) publish sets
never collide on coordinates
([#519](https://github.com/CategoricalData/hydra/issues/519)).
- Host-specific third-party integrations (the former `bindings/` tree) are folded into
`overlay/`, unifying hand-written host-native source under one tree
([#511](https://github.com/CategoricalData/hydra/issues/511)).
- The coder de-parameterizes context and error types, simplifying generated coder
signatures ([#518](https://github.com/CategoricalData/hydra/issues/518)).
- TypeScript-to-Java generation now emits the `hydra.lib.*` aggregate namespace
interfaces (`Maps`, `Strings`, etc.)
([#499](https://github.com/CategoricalData/hydra/issues/499)).
---
## [0.16.1] - 2026-06-16
Major themes: the first release built by bootstrapping from previously published
packages, the first full 9 × 9 cross-implementation bootstrapping sweep, and
published-package self-containment fixes for the artifacts that bootstrap rests on.
### Highlights
- **Bootstrap from published packages**: the build links the published 0.16.0 hosts
(Hackage / Maven Central / PyPI) and uses them to build the next version of Hydra,
resting on 0.16.0's forward-compatibility guarantees — the published-host consume
model with a `--local-host` shim, used for the first time in a release
([#370](https://github.com/CategoricalData/hydra/issues/370)). 0.16.1 still builds
against **local** Haskell and Python hosts (`hostOverrides`), because the published
0.16.0 artifacts it would otherwise consume are the very ones being repaired below.
- **First full 9 × 9 bootstrapping sweep** — every implementation generating every
other; dozens of cross-host issues surfaced and fixed
([#409](https://github.com/CategoricalData/hydra/issues/409), ongoing).
- **Published-package self-containment**: relocate each host's hand-written runtime
into `overlay/<lang>/hydra-kernel/` so it ships inside the published `hydra-kernel`
artifact — Python `hydra.python.util` into the wheel
([#461](https://github.com/CategoricalData/hydra/issues/461),
[#472](https://github.com/CategoricalData/hydra/issues/472)) and the Haskell
authoring DSL + `Libraries`/`Terms` into the sdist
([#473](https://github.com/CategoricalData/hydra/issues/473)). Generalized to a
uniform `overlay/ = transform(packages) + copy(overlay)` model across all hosts
([#434](https://github.com/CategoricalData/hydra/issues/434)).
- **Kernel self-containment via generated `hydra.lib.*` registries**: primitive
names are derived from generated `PrimitiveDefinition` def-modules rather than
hand-written name strings, in every host
([#473](https://github.com/CategoricalData/hydra/issues/473)).
- **In-memory encode/decode synthesis**: derived `hydra.{encode,decode}.*` modules
are synthesized at build time and excluded from `dist/`, with the synthesizer (not
inference) as the authority for their annotations
([#448](https://github.com/CategoricalData/hydra/issues/448),
[#476](https://github.com/CategoricalData/hydra/issues/476)).
- **Release hardening**: Apache source-release compliance (signed source archive,
LICENSE/NOTICE bundling, KEYS) ([#441](https://github.com/CategoricalData/hydra/issues/441)),
per-package publish orchestrators ([#449](https://github.com/CategoricalData/hydra/issues/449)),
and packaging-boundary verification gated in CI and at publish time
([#472](https://github.com/CategoricalData/hydra/issues/472)).
### New features
- Published-host consume model wired through `bin/sync.sh` for all three hosts
(`--published-host` default, `--local-host` shim), with the version basis keyed
off `hydra.json` and the `VERSION` file retired
([#370](https://github.com/CategoricalData/hydra/issues/370),
[#347](https://github.com/CategoricalData/hydra/issues/347)).
- Java and Python coder DSL sources made the sole source of truth; the legacy
Haskell DSL copies were deleted and cross-package references resolve by name
([#346](https://github.com/CategoricalData/hydra/issues/346)).
- Per-host `verify-distribution.sh` self-containment gates (Haskell stages the
per-package trio and `stack build`s it; Python installs the wheels into an
isolated venv and imports the kernel modules; Java resolves the published jars
from an offline consumer), run in CI and as a hard gate in `bin/prepare-release.sh`
([#472](https://github.com/CategoricalData/hydra/issues/472)).
- Apache-compliant canonical source archive: signed + checksummed `git archive`
tarball as the release of record, root `NOTICE`, `KEYS`, and a release-verify CI
workflow ([#441](https://github.com/CategoricalData/hydra/issues/441)).
- Per-package publish orchestrators `publish-maven.sh` / `publish-pypi.sh` with
dependency-closure and leaves-first ordering checks
([#449](https://github.com/CategoricalData/hydra/issues/449)).
- `hydra-typescript` published as a target Java/Maven + PyPI artifact
([#468](https://github.com/CategoricalData/hydra/issues/468)).
- Java coder emits a fluent builder for every generated record type
([#465](https://github.com/CategoricalData/hydra/issues/465)); Python coder emits
per-field `with_<field>` copy-update methods and a fluent builder
([#466](https://github.com/CategoricalData/hydra/issues/466)).
### Improvements
- Drop the vestigial `InferenceContext` parameter from the `Primitive.implementation`
carrier across all hosts; add a graph-free `funT` coder and six `lists` default
implementations ([#446](https://github.com/CategoricalData/hydra/issues/446)).
- Derive package routing from declared modules; split derived generation into broad
`mainDslModules` and scoped `mainEncodingModules`
([#474](https://github.com/CategoricalData/hydra/issues/474),
[#475](https://github.com/CategoricalData/hydra/issues/475)).
- Hash JSON content into the per-package input digest; add `digest-check
refresh-input` and a CI guard that force-regenerates and diffs
`dist/haskell/hydra-{java,python}` ([#469](https://github.com/CategoricalData/hydra/issues/469)).
- Per-package inference seeds downstream packages from each package's full universe
while inferring only write targets, fixing `hydra-scala` inference within the CI
heap budget; declare the `hydra-java` dependency in `hydra-scala` for cold
ordering ([#470](https://github.com/CategoricalData/hydra/issues/470)).
- Remove the vestigial `Lib/Defaults` registry and empty `defaultLibModules`
manifest field from all hosts ([#437](https://github.com/CategoricalData/hydra/issues/437)).
- Bundle LICENSE + NOTICE into Java jars (`META-INF`) and Python wheels
(`dist-info`); declare Apache-2.0 in the Scala build
([#441](https://github.com/CategoricalData/hydra/issues/441)).
- Mark lazy parameters on the Scala and Common Lisp primitive registries so eager
coders thunk correctly ([#453](https://github.com/CategoricalData/hydra/issues/453),
[#477](https://github.com/CategoricalData/hydra/issues/477),
[#425](https://github.com/CategoricalData/hydra/issues/425)).
- Staging-loop WIP-commit gate to keep `WIP:` commits off `origin/main`
([#466](https://github.com/CategoricalData/hydra/issues/466)).
### Bug fixes
- **Python wheel self-containment**: the `hydra-kernel` wheel now ships
`hydra.python.util`; gated by a packaging-boundary smoke test in CI and
`publish-pypi.sh` ([#472](https://github.com/CategoricalData/hydra/issues/472),
[#461](https://github.com/CategoricalData/hydra/issues/461)).
- **Haskell sdist self-containment**: track the generated `Hydra/Dsl/Terms.hs`
(was gitignored) so the committed dist exports `ToPrimName`, fixing the cold
build of the published `hydra-kernel`
([#473](https://github.com/CategoricalData/hydra/issues/473)).
- Decode synthesizer threads the fully-applied result type into wrap/record/union
decoder bodies, so derived decoders emit `DataRow<v>` rather than raw `DataRow`,
fixing Java and Scala generic decode compilation
([#476](https://github.com/CategoricalData/hydra/issues/476)).
- Scala coder emits explicit type arguments for polymorphic non-primitive
references under a type application (e.g. `requireField`), fixing `Any`-inference
of curried decoder lambda parameters in `decode/typed`
([#434](https://github.com/CategoricalData/hydra/issues/434)).
- Common Lisp and Emacs Lisp: move the hand-written runtime to a dialect-tier path
so it no longer collides with the generated `hydra.lib.*` def-modules
([#434](https://github.com/CategoricalData/hydra/issues/434)).
- Python coder uses the binding `TypeScheme` as the authoritative source for
parameter and return types ([#488](https://github.com/CategoricalData/hydra/issues/488));
fixes a duplicate `self` parameter in builders
([#478](https://github.com/CategoricalData/hydra/issues/478)).
- Sort term definitions by name in source-file generation so non-Haskell hosts emit
deterministic alphabetical Haskell output (host-independent of `Maps.elems`
iteration order) ([#489](https://github.com/CategoricalData/hydra/issues/489)).
- Java coder serializes the `static` method modifier (previously a non-exhaustive
case) ([#465](https://github.com/CategoricalData/hydra/issues/465)); JavaDoc
`@link`/`@param` sanitization for strict doclint
([#449](https://github.com/CategoricalData/hydra/issues/449)).
- Scala host writer appends a trailing newline when missing, fixing a Lisp-target
byte mismatch ([#463](https://github.com/CategoricalData/hydra/issues/463)).
- Clojure host: silent wrapping `bigint_to_int{8,16,32,64}` casts per the kernel
contract ([#483](https://github.com/CategoricalData/hydra/issues/483)); load-order
and `--kernel-only` filter fixes after kernel renames
([#425](https://github.com/CategoricalData/hydra/issues/425)); load the
`hydra-haskell` baseline for Clojure→Haskell rebuilds
([#487](https://github.com/CategoricalData/hydra/issues/487),
[#460](https://github.com/CategoricalData/hydra/issues/460)).
- Lisp-dialect bootstrap fixes: emit JSON object entries as 2-element `Pair` lists
rather than dotted cons ([#452](https://github.com/CategoricalData/hydra/issues/452),
also fixing [#16](https://github.com/CategoricalData/hydra/issues/16)); read
module names via the correct struct accessor
([#471](https://github.com/CategoricalData/hydra/issues/471)); drop stale
surplus flag arguments from `generate-source-files` calls
([#457](https://github.com/CategoricalData/hydra/issues/457),
[#458](https://github.com/CategoricalData/hydra/issues/458),
[#464](https://github.com/CategoricalData/hydra/issues/464)); rename eta-wrapped
projection/unwrap parameters to avoid kernel shadowing
([#428](https://github.com/CategoricalData/hydra/issues/428)); propagate a
non-zero exit from the Scheme test runner on failures and fix Scheme float
scientific-notation formatting for `|x| >= 1e7`
([#447](https://github.com/CategoricalData/hydra/issues/447)).
- Cross-host target dispatch: Common Lisp and Clojure hosts dispatch Scala and
TypeScript targets ([#482](https://github.com/CategoricalData/hydra/issues/482),
[#483](https://github.com/CategoricalData/hydra/issues/483)); Scala/Java host
target-dispatch completions ([#5](https://github.com/CategoricalData/hydra/issues/5),
[#7](https://github.com/CategoricalData/hydra/issues/7),
[#17](https://github.com/CategoricalData/hydra/issues/17)).
- TypeScript test runtime reads the kernel JSON field names `body`/`signature`
(not legacy `term`/`typeScheme`); `lists.nub` dedups by canonical JSON
([#485](https://github.com/CategoricalData/hydra/issues/485)).
- Sync robustness: always reassemble `dist/python` under `HYDRA_IN_SYNC` to heal
partial-dist state ([#480](https://github.com/CategoricalData/hydra/issues/480));
persist the run dir on bootstrap prep-phase failures
([#481](https://github.com/CategoricalData/hydra/issues/481)); complete per-host
static deps so the bootstrap demo finds fresh dist
([#445](https://github.com/CategoricalData/hydra/issues/445)).
- Pin the Python target test interpreter to Python ≥ 3.12
([#486](https://github.com/CategoricalData/hydra/issues/486)); Emacs Lisp / Scheme
target test-runner re-copy robustness
([#456](https://github.com/CategoricalData/hydra/issues/456)).
- JavaDoc Pages publish rewritten to build a combined site from the CI-generated
`dist/java/` artifact, fixing the failure mode where `pages.yml` ran against a
bare checkout with no `dist/java/` present
([#450](https://github.com/CategoricalData/hydra/issues/450)).
### Documentation
- Document the `overlay/` self-containment model, the published-host consume model
for all three hosts, the `hydra.json` version / host-version basis, and a
migration-shims recipe ([#434](https://github.com/CategoricalData/hydra/issues/434),
[#370](https://github.com/CategoricalData/hydra/issues/370),
[#347](https://github.com/CategoricalData/hydra/issues/347)).
- Document the kernel self-containment / `hydra.lib.*` def-module model and the
derived-module no-inference invariant
([#473](https://github.com/CategoricalData/hydra/issues/473),
[#466](https://github.com/CategoricalData/hydra/issues/466)); generated Java and
Python record builders documented in the DSL guides
([#465](https://github.com/CategoricalData/hydra/issues/465),
[#466](https://github.com/CategoricalData/hydra/issues/466)).
- Use absolute GitHub URLs in package READMEs so links resolve when published
standalone ([#454](https://github.com/CategoricalData/hydra/issues/454)); bundle a
README into each Python package dir for sdist metadata
([#418](https://github.com/CategoricalData/hydra/issues/418)).
---
## [0.16.0] - 2026-06-09
Major themes: primitive-metadata reification, self-hosting coder DSLs with all
eight hosts passing the common test suite, finalized `hydra.packaging`, and a
deep kernel-vocabulary cleanup.
### Highlights
- **`PrimitiveDefinition` and per-namespace registry modules** with host-independent
specs for every standard-library primitive ([#156](https://github.com/CategoricalData/hydra/issues/156), [#319](https://github.com/CategoricalData/hydra/issues/319)).
- **Self-hosting coder DSLs; all eight hosts pass the common test suite**, including
the completed TypeScript head ([#344](https://github.com/CategoricalData/hydra/issues/344), [#126](https://github.com/CategoricalData/hydra/issues/126)).
- **Finalized `hydra.packaging`** and a unified `Module.dependencies` field ([#369](https://github.com/CategoricalData/hydra/issues/369), [#354](https://github.com/CategoricalData/hydra/issues/354)).
- **Kernel-vocabulary cleanup**: `maybe`→`optional` across kernel and hosts, plus
order-preserving JSON objects ([#401](https://github.com/CategoricalData/hydra/issues/401), [#398](https://github.com/CategoricalData/hydra/issues/398)).
### New features
- Reify `PrimitiveDefinition` in `hydra.packaging` with per-namespace `hydra.lib.<sub>` registries ([#156](https://github.com/CategoricalData/hydra/issues/156)).
- Host-independent `comments` specifications for all standard-library primitives ([#319](https://github.com/CategoricalData/hydra/issues/319)).
- Kernel-oriented style checks in `hydra.validate.*` ([#321](https://github.com/CategoricalData/hydra/issues/321), [#351](https://github.com/CategoricalData/hydra/issues/351), [#352](https://github.com/CategoricalData/hydra/issues/352)), on a reshaped validation API ([#320](https://github.com/CategoricalData/hydra/issues/320)).
- Promote the JSON Schema coder to a full DSL coder ([#350](https://github.com/CategoricalData/hydra/issues/350)).
- Transpose coder sources into host-native DSLs for self-hosting ([#344](https://github.com/CategoricalData/hydra/issues/344), [#358](https://github.com/CategoricalData/hydra/issues/358)).
- `Term`-typed annotations replacing `Map<Name, Term>` ([#386](https://github.com/CategoricalData/hydra/issues/386)).
- Language-specific EDSL features on the kernel `Language` ([#233](https://github.com/CategoricalData/hydra/issues/233)).
- Primitive-metadata-driven laziness in eager coders ([#391](https://github.com/CategoricalData/hydra/issues/391)).
- `/test` skill and `bin/test.sh` for target-language test validation ([#387](https://github.com/CategoricalData/hydra/issues/387)).
- Automatic differentiation: a `grad` transform ([#324](https://github.com/CategoricalData/hydra/issues/324)).
- `hydra.show.error.pg` for `InvalidGraphError` ([#374](https://github.com/CategoricalData/hydra/issues/374)).
### Improvements
- Finalize `hydra.packaging`: `Binding`→`TypeDefinition`, `Module`/`Package` `comments`, `moduleName` cleanup ([#369](https://github.com/CategoricalData/hydra/issues/369), [#396](https://github.com/CategoricalData/hydra/issues/396), [#402](https://github.com/CategoricalData/hydra/issues/402), [#404](https://github.com/CategoricalData/hydra/issues/404)).
- Merge `Module.termDependencies`/`typeDependencies` into one `dependencies` field ([#354](https://github.com/CategoricalData/hydra/issues/354)).
- Resolve the `maybe`/`optional` ambiguity across kernel and all hosts ([#401](https://github.com/CategoricalData/hydra/issues/401)).
- Order-preserving JSON objects; order-sensitive `Value` equality ([#398](https://github.com/CategoricalData/hydra/issues/398)).
- Rename `Namespace`→`ModuleName` ([#316](https://github.com/CategoricalData/hydra/issues/316)) and the phantom DSL types to `Typed*` ([#397](https://github.com/CategoricalData/hydra/issues/397)).
- Move from a type-class enum to type-class names ([#275](https://github.com/CategoricalData/hydra/issues/275)).
- Repackage "eval lib" modules as kernel lib modules; promote remaining sources ([#260](https://github.com/CategoricalData/hydra/issues/260), [#355](https://github.com/CategoricalData/hydra/issues/355), [#356](https://github.com/CategoricalData/hydra/issues/356)).
- Reshape `hydra.context` into `InferenceContext` ([#368](https://github.com/CategoricalData/hydra/issues/368)).
- Streamline the Haskell, Java, Python, and Scala syntax models, re-pinning Java to SE 21 and Python to the 3.14 PEG grammar ([#297](https://github.com/CategoricalData/hydra/issues/297)).
- Adopt persistent immutable collections across hosts ([#359](https://github.com/CategoricalData/hydra/issues/359), [#360](https://github.com/CategoricalData/hydra/issues/360), [#361](https://github.com/CategoricalData/hydra/issues/361), [#362](https://github.com/CategoricalData/hydra/issues/362)).
- Migrate underscored kernel definition names to camelCase ([#348](https://github.com/CategoricalData/hydra/issues/348)).
- Tidy qualified/unqualified imports in the Haskell DSL sources ([#308](https://github.com/CategoricalData/hydra/issues/308)).
- Eliminate the `Hydra.Module.Compat` shim ([#315](https://github.com/CategoricalData/hydra/issues/315)).
- Homogenize writer conventions across target languages ([#339](https://github.com/CategoricalData/hydra/issues/339)).
- Disambiguate format-version field naming across JSON metadata ([#412](https://github.com/CategoricalData/hydra/issues/412)).
- Per-package DSL→JSON build with per-package incremental inference ([#381](https://github.com/CategoricalData/hydra/issues/381), [#395](https://github.com/CategoricalData/hydra/issues/395)).
- Prune stale `dist/` outputs; self-heal digests; exclude digests from VCS; reconcile drift; fail loud ([#357](https://github.com/CategoricalData/hydra/issues/357), [#393](https://github.com/CategoricalData/hydra/issues/393), [#405](https://github.com/CategoricalData/hydra/issues/405), [#378](https://github.com/CategoricalData/hydra/issues/378), [#379](https://github.com/CategoricalData/hydra/issues/379), [#392](https://github.com/CategoricalData/hydra/issues/392), [#414](https://github.com/CategoricalData/hydra/issues/414)).
- Accept all valid (host, target) pairs in the generation drivers ([#421](https://github.com/CategoricalData/hydra/issues/421)).
- Move Gradle build infrastructure into `heads/java/`; remove top-level `pixi.toml` ([#384](https://github.com/CategoricalData/hydra/issues/384), [#385](https://github.com/CategoricalData/hydra/issues/385)).
- Eliminate post-generation test patches; fix loader/runner kludges; re-enable test timing ([#307](https://github.com/CategoricalData/hydra/issues/307), [#309](https://github.com/CategoricalData/hydra/issues/309), [#311](https://github.com/CategoricalData/hydra/issues/311)).
- Performance/benchmarks and usability assessments ([#277](https://github.com/CategoricalData/hydra/issues/277), [#283](https://github.com/CategoricalData/hydra/issues/283)).
- Split the Hackage distribution into per-package distributions ([#418](https://github.com/CategoricalData/hydra/issues/418)).
### Bug fixes
- Encode `uint32` JSON literals as numbers, not strings ([#431](https://github.com/CategoricalData/hydra/issues/431)).
- Satisfy or suppress warnings in generated Java ([#349](https://github.com/CategoricalData/hydra/issues/349)).
- Restore JSON parser test cases (polymorphic case handling, ordering fallback) ([#336](https://github.com/CategoricalData/hydra/issues/336)).
- Keep annotations through `termAlternatives`/`typeAlternatives` adaptation ([#353](https://github.com/CategoricalData/hydra/issues/353)).
- Scala host decodes module JSON containing term definitions ([#342](https://github.com/CategoricalData/hydra/issues/342)).
- Java coder: fix exponential `let`-bound `cases` cost ([#372](https://github.com/CategoricalData/hydra/issues/372)) and explicit type args on `PersistentMap.ofEntries` ([#394](https://github.com/CategoricalData/hydra/issues/394)).
- Python-host codegen: drop extra `pyStringToPyStrings` wrapping ([#367](https://github.com/CategoricalData/hydra/issues/367)).
- `escape_literal_char` no longer mangles RDF triples ([#363](https://github.com/CategoricalData/hydra/issues/363)).
- Sync robustness: stale coder JSON, omitted native modules, dead helper, bad source dirs ([#406](https://github.com/CategoricalData/hydra/issues/406), [#400](https://github.com/CategoricalData/hydra/issues/400), [#411](https://github.com/CategoricalData/hydra/issues/411), [#408](https://github.com/CategoricalData/hydra/issues/408)).
- Cross-host self-hosting fixes (Scala, TypeScript, and the four Lisp dialects) ([#422](https://github.com/CategoricalData/hydra/issues/422), [#423](https://github.com/CategoricalData/hydra/issues/423), [#424](https://github.com/CategoricalData/hydra/issues/424), [#429](https://github.com/CategoricalData/hydra/issues/429), [#444](https://github.com/CategoricalData/hydra/issues/444), [#366](https://github.com/CategoricalData/hydra/issues/366), [#389](https://github.com/CategoricalData/hydra/issues/389), [#407](https://github.com/CategoricalData/hydra/issues/407), [#425](https://github.com/CategoricalData/hydra/issues/425), [#426](https://github.com/CategoricalData/hydra/issues/426), [#427](https://github.com/CategoricalData/hydra/issues/427), [#432](https://github.com/CategoricalData/hydra/issues/432), [#438](https://github.com/CategoricalData/hydra/issues/438), [#439](https://github.com/CategoricalData/hydra/issues/439), [#443](https://github.com/CategoricalData/hydra/issues/443)).
### Removed
- Removed the `bigfloat` literal type from `FloatType` and `FloatValue` ([#330](https://github.com/CategoricalData/hydra/issues/330)).
Arbitrary-precision floating-point values were inconsistently supported
across host languages (Java/Scala in particular lacked a true IEEE 754
arbitrary-precision implementation), and nothing in the codebase relied on
them. `FloatType` and `FloatValue` now have only `float32` and `float64`
variants. Removed library primitives: `bigfloatToBigint`, `bigfloatToFloat32`,
`bigfloatToFloat64`, `bigintToBigfloat`, `float32ToBigfloat`,
`float64ToBigfloat`, `readBigfloat`, `showBigfloat`, `roundBigfloat`. New
primitives `float32ToFloat64` and `float64ToFloat32` (the latter lossy)
replace the removed bigfloat-routed conversions.
- Removed `heads/haskell/bin/assemble-hackage-sdist.sh` ([#418](https://github.com/CategoricalData/hydra/issues/418)), the 0.15-era
bridge that flattened the multi-source-dir Haskell head into one self-contained
`hydra` sdist. Superseded by the per-package assembler (see Improvements).
### Documentation
- Comprehensive documentation refresh for 0.16 ([#383](https://github.com/CategoricalData/hydra/issues/383))
spanning nine tracks across READMEs, `docs/`, the wiki, CLAUDE.md, and
in-source kernel comments.
- New `docs/json-format.md` reference describing the canonical JSON wire format
(tagged-union duality, optional-field rules, IEEE 754 sentinels, integer
threshold).
- New wiki pages: `Design` (rationale behind each major choice) and `Inference`
(HM type inference with class constraints).
- Cross-checked every prose doc against current code; corrected drift in
primitive-checking sections of `docs/recipes/maintenance.md`, the `Primitive`
shape in `docs/implementation.md` and `docs/recipes/adding-primitives.md`,
and the build-system narrative.
- Wove motivation ("the why") through the existing doc surface rather than
collecting it into separately-titled sidebars; landed an inference-overview
centerpiece on the wiki ([#377](https://github.com/CategoricalData/hydra/issues/377)).
- Aligned doc vocabulary with the LambdaGraph paper and the literature review
for the design space Hydra inhabits.
- Net-new READMEs for `packages/hydra-kernel`, `packages/hydra-ext`,
`packages/hydra-coq`, and `packages/hydra-wasm`; top-level `README.md`
now carries a canonical packages table.
- Audited and refreshed the Claude surface: CLAUDE.md "Where to look up X"
table extended with rows for `docs/getting-started.md`, `docs/json-format.md`,
and the `Design` / `Inference` wiki pages; hard-rules block reordered by
violation frequency; `claude/pitfalls.md` superseded entries folded into
`docs/troubleshooting.md` / recipes.
- Project-descriptor strings reviewed and aligned across 24 build / packaging
files (Hackage synopsis, Maven Central description, PyPI / conda-forge
classifiers, Hydra-format `package.json` files).
- `docs/index.html` (the GitHub Pages landing page) refreshed with audience
hops into wiki Concepts / Design, `docs/getting-started.md`, and the GitHub
repo, plus the full published-artifact list across Hackage, Maven Central,
PyPI, and conda-forge.
- In-source kernel-code rationale comments added at key Sources sites covering
injection / pair / either / unit-void duality, error taxonomy, variant
records, inference-context threading, validation profiles, reduction state,
lexical filters, name mangling, scoping, variable handling, defaults
integration, and Tarjan SCC choice rationale. JSON encode/decode modules
cross-reference `docs/json-format.md`.
- Filed `Primitive.implementation` carrier-simplification follow-up
([#446](https://github.com/CategoricalData/hydra/issues/446))
to drop the unused `InferenceContext` and `Graph` parameters once the
`Lib/Defaults/` integration ([#437](https://github.com/CategoricalData/hydra/issues/437))
lands.
---
## [0.15.0] - 2026-04-29
A structural-cleanup release.
The repository is reorganized into a three-tree
`packages/` (DSL sources) / `heads/` (per-host runtime) / `dist/` (generated output)
layout ([#290](https://github.com/CategoricalData/hydra/issues/290)), the kernel is simplified ([#251](https://github.com/CategoricalData/hydra/issues/251), [#292](https://github.com/CategoricalData/hydra/issues/292), [#332](https://github.com/CategoricalData/hydra/issues/332)), and Java + Python now
ship as per-package publishable artifacts on Maven Central / PyPI / conda-forge
([#305](https://github.com/CategoricalData/hydra/issues/305)).
Incremental, content-hash-based caches accelerate the sync pipeline ([#247](https://github.com/CategoricalData/hydra/issues/247)).
Three new generation-only targets — Coq ([#326](https://github.com/CategoricalData/hydra/issues/326)), WebAssembly ([#325](https://github.com/CategoricalData/hydra/issues/325)), and an
automatic-differentiation demo ([#324](https://github.com/CategoricalData/hydra/issues/324)) — are in progress as Claude collaborations.
### Highlights
- **Three-tree repository layout**: `packages/` (DSL), `heads/` (host runtime),
`dist/` (generated) ([#290](https://github.com/CategoricalData/hydra/issues/290)).
- **Per-package distributions** for Java (4 Maven artifacts) and Python (5 wheels):
`hydra-kernel`, `hydra-pg`, `hydra-rdf`, `hydra-{java,python}`, plus `hydra-ext`
on PyPI ([#305](https://github.com/CategoricalData/hydra/issues/305)).
- **Kernel simplifications**: `Function`/`Elimination` removed ([#332](https://github.com/CategoricalData/hydra/issues/332)),
`FunctionPrimitive` removed ([#251](https://github.com/CategoricalData/hydra/issues/251)), `Hydra.Ext.*` prefix retired ([#331](https://github.com/CategoricalData/hydra/issues/331)),
`Context` error wrapper gone ([#292](https://github.com/CategoricalData/hydra/issues/292)).
- **Incremental caches** across the sync pipeline; ~70x speedup on no-op resync ([#247](https://github.com/CategoricalData/hydra/issues/247)).
- **JSON kernel format v1** with formal wire-format spec and four-field rename ([#343](https://github.com/CategoricalData/hydra/issues/343)).
- **Three new generation-only targets** (in progress): Coq ([#326](https://github.com/CategoricalData/hydra/issues/326)), WebAssembly ([#325](https://github.com/CategoricalData/hydra/issues/325)),
automatic-differentiation demo ([#324](https://github.com/CategoricalData/hydra/issues/324)).
### New features
- Per-package distributions ([#305](https://github.com/CategoricalData/hydra/issues/305)): standalone Maven / PyPI / conda-forge builds,
generated `build.gradle` / `pyproject.toml` per package, transitive dep resolution.
- JSON kernel format v1 ([#343](https://github.com/CategoricalData/hydra/issues/343)): formal spec at `docs/json-format.md`,
four-field rename to `typeScheme`, `Module` field reorder, `formatVersion` stamp.
- `decimal` literal type in the kernel ([#338](https://github.com/CategoricalData/hydra/issues/338)) across all hosts.
- Type-directed JSON encoder with idiomatic optional encoding ([#314](https://github.com/CategoricalData/hydra/issues/314), [#318](https://github.com/CategoricalData/hydra/issues/318)).
- Incremental type inference plus content-hash caches ([#247](https://github.com/CategoricalData/hydra/issues/247)).
- Coq generation target ([#326](https://github.com/CategoricalData/hydra/issues/326), in progress): `hydra-coq` package, 131/131 `.v` files pass `coqc`.
- WebAssembly target ([#325](https://github.com/CategoricalData/hydra/issues/325), in progress): `hydra-wasm` package, M4 closure mechanism.
- Automatic-differentiation demo ([#324](https://github.com/CategoricalData/hydra/issues/324), in progress): symbolic source-to-source.
- `hydra.show.error` module ([#265](https://github.com/CategoricalData/hydra/issues/265)): consolidated error-message builders.
- `hydra.lib.maybes.toList` primitive ([#257](https://github.com/CategoricalData/hydra/issues/257)).
- NaN / Inf round-tripping through JSON and per-language serdes ([#312](https://github.com/CategoricalData/hydra/issues/312), [#318](https://github.com/CategoricalData/hydra/issues/318), [#330](https://github.com/CategoricalData/hydra/issues/330)).
- Typeclass inference test group ([#274](https://github.com/CategoricalData/hydra/issues/274)).
- Term and type linters ([#232](https://github.com/CategoricalData/hydra/issues/232)).
- Validation for modules and graphs ([#155](https://github.com/CategoricalData/hydra/issues/155)).
- User-defined-function (UDF) support and DSL-vs-primitive overrides
([#62](https://github.com/CategoricalData/hydra/issues/62), [#63](https://github.com/CategoricalData/hydra/issues/63), [#102](https://github.com/CategoricalData/hydra/issues/102), [#158](https://github.com/CategoricalData/hydra/issues/158)).
- Stale-source detection across sync entrypoints ([#228](https://github.com/CategoricalData/hydra/issues/228)).
### Improvements
- Sync infrastructure: matrix tool, per-package orchestrator, per-language wrappers ([#290](https://github.com/CategoricalData/hydra/issues/290)).
- TestGraph post-generation patches eliminated; DSL emits `TestEnv` refs directly.
- Minimized standard imports in generated Haskell ([#161](https://github.com/CategoricalData/hydra/issues/161)); improved auto-aliases ([#322](https://github.com/CategoricalData/hydra/issues/322)).
- Removed kernel term dependencies from the interpreter ([#257](https://github.com/CategoricalData/hydra/issues/257)).
- Removed `Graph` and `Context` arguments from primitive implementations ([#266](https://github.com/CategoricalData/hydra/issues/266)).
- Refactored kernel term modules: split rewriting/schemas, renamed show.meta → codegen,
moved `Coder` to `coders`, merged `extract.helpers` ([#221](https://github.com/CategoricalData/hydra/issues/221)).
- Removed Aeson and HsYAML dependencies; YAML coder moved to `hydra-ext` ([#261](https://github.com/CategoricalData/hydra/issues/261)).
- Lisp recursive let bindings via SCC ([#341](https://github.com/CategoricalData/hydra/issues/341)); parenthesis cleanup ([#84](https://github.com/CategoricalData/hydra/issues/84)).
- Everything-to-everything bootstrapping demo ([#254](https://github.com/CategoricalData/hydra/issues/254)).
- Re-enabled skipped Python tests; `disabledForPython` retired ([#263](https://github.com/CategoricalData/hydra/issues/263)).
- Promoted host-specific code in `packages/` into per-head locations ([#337](https://github.com/CategoricalData/hydra/issues/337)).
- Migrated `hydra.common` Java module out ([#10](https://github.com/CategoricalData/hydra/issues/10)).
- Test infrastructure unification under `UniversalTestCase` ([#246](https://github.com/CategoricalData/hydra/issues/246)).
- Default property graph → RDF mapping ([#296](https://github.com/CategoricalData/hydra/issues/296)).
- 13 unsafe partial primitives replaced with `Maybe`-returning alternatives ([#201](https://github.com/CategoricalData/hydra/issues/201)).
- Java generated code uses standard `java.util` collection interfaces ([#313](https://github.com/CategoricalData/hydra/issues/313)).
- `Term.union` renamed to `Term.inject` ([#334](https://github.com/CategoricalData/hydra/issues/334)).
- Inconsistencies in domain DSLs cleaned up ([#219](https://github.com/CategoricalData/hydra/issues/219)).
- Coder packages moved out of hydra-haskell ([#182](https://github.com/CategoricalData/hydra/issues/182)).
- Java package-naming scheme revised ([#223](https://github.com/CategoricalData/hydra/issues/223)).
- Decimal used (instead of bigfloat) for JSON numbers ([#340](https://github.com/CategoricalData/hydra/issues/340)).
- Hydra kernel moved out of hydra-haskell ([#282](https://github.com/CategoricalData/hydra/issues/282)).
### Bug fixes
- `substInTypeScheme` capture-unsafe substitution under nested forall binders.
- Java `Float64` arithmetic primitives corrected for current `PrimitiveFunction` API.
- Clojure decimal handling: value-based equality, `BigInteger` return from `decimal_to_bigint`.
- Scheme runtime R7RS imports for `sets.scm` / `maps.scm` / `eithers.map_set`.
- Python coder defaults corrected from `Py.Name` to `Py.Expression`.
- Scala host JSON-decode failure on modules containing term definitions ([#342](https://github.com/CategoricalData/hydra/issues/342)).
- Lisp coder mutually-recursive let bindings for Clojure ([#341](https://github.com/CategoricalData/hydra/issues/341)).
### Documentation
- Documentation refresh for the 0.15 packaging restructure ([#290](https://github.com/CategoricalData/hydra/issues/290), [#331](https://github.com/CategoricalData/hydra/issues/331)); CLAUDE.md,
READMEs, recipes, demos, and seven wiki pages updated.
- Code-generation recipe rewritten for the per-package dist layout ([#282](https://github.com/CategoricalData/hydra/issues/282)).
- New `maintenance.md` recipe consolidates non-source-file scans, stale generated
detection, design-violation checks, and freshness checks.
- Documentation style guide added at `docs/documentation-style-guide.md`.
- Cross-worktree messaging protocol documented in CLAUDE.md.
- Decimal type documented in the lexicon and per-language READMEs ([#338](https://github.com/CategoricalData/hydra/issues/338)).
- JSON encoding format docs updated for idiomatic optional encoding ([#314](https://github.com/CategoricalData/hydra/issues/314)).
---
## [0.14.1] - 2026-03-30
Patch release.
Regenerates all implementations after a fix to the group eval primitive ([#281](https://github.com/CategoricalData/hydra/issues/281)),
and relocates the property-graph and RDF/SHACL "ext" modules into hydra-java and hydra-python.
### Improvements
- Moved PG, RDF, and SHACL ext modules from hydra-ext into hydra-java and hydra-python.
### Bug fixes
- Group eval primitive fix; all targets regenerated ([#281](https://github.com/CategoricalData/hydra/issues/281)).
- JavaDoc HTML-entity escaping in generated `DestructuringPattern.java`.
---
## [0.14.0] - 2026-03-29
Major release adding four new complete Hydra implementations — Scala ([#273](https://github.com/CategoricalData/hydra/issues/273)),
Clojure ([#278](https://github.com/CategoricalData/hydra/issues/278)), Common Lisp, and Scheme — bringing the total to seven bootstrapping hosts
(plus Emacs Lisp, which passes the test suite but does not yet participate in bootstrapping).
Also includes kernel simplifications, an Avro bidirectional coder ([#301](https://github.com/CategoricalData/hydra/issues/301)),
eval primitives ([#281](https://github.com/CategoricalData/hydra/issues/281)), new demos, and significant performance work on the Scheme host.
### Highlights
- **Four new complete implementations**: Hydra-Scala ([#273](https://github.com/CategoricalData/hydra/issues/273)), Hydra-Clojure ([#278](https://github.com/CategoricalData/hydra/issues/278)),
Hydra-Common Lisp, and Hydra-Scheme pass the common test suite and can serve as
bootstrapping hosts.
The four Lisp dialects share a single coder and serializer.
- **Kernel simplifications**: removed `RowType`/`WrappedType` ([#82](https://github.com/CategoricalData/hydra/issues/82)),
unified `Graph`/`TypeContext`/`InferenceContext` ([#192](https://github.com/CategoricalData/hydra/issues/192)),
replaced `Module.elements` with `Module.definitions` ([#214](https://github.com/CategoricalData/hydra/issues/214)),
consolidated error types ([#268](https://github.com/CategoricalData/hydra/issues/268)), and promoted all staging modules to DSL sources ([#267](https://github.com/CategoricalData/hydra/issues/267)).
- **Avro bidirectional coder** ([#301](https://github.com/CategoricalData/hydra/issues/301)) with property graph pipeline demo.
- **Scheme bootstrap performance**: 58 minutes → 5.7 minutes via O(1) vhash data structures
and IEEE 754 float precision fixes.
### Breaking changes
- Removed legacy adapter framework; replaced by the staging-promoted variant ([#236](https://github.com/CategoricalData/hydra/issues/236), [#295](https://github.com/CategoricalData/hydra/issues/295)).
- Replaced legacy Flow monad with Either ([#245](https://github.com/CategoricalData/hydra/issues/245)).
- Removed `Module.elements`; use `Module.definitions` ([#214](https://github.com/CategoricalData/hydra/issues/214)).
- Removed `RowType` and `WrappedType` ([#82](https://github.com/CategoricalData/hydra/issues/82)).
- Renamed `hydra.accessors` to `hydra.paths` ([#271](https://github.com/CategoricalData/hydra/issues/271)).
- Renamed `hydra.tarjan` and merged into `hydra.sorting` ([#220](https://github.com/CategoricalData/hydra/issues/220)).
- Merged `hydra.constraints` into `hydra.query` ([#272](https://github.com/CategoricalData/hydra/issues/272)).
- Moved `hydra.workflow` to hydra-ext ([#270](https://github.com/CategoricalData/hydra/issues/270)).
- Consolidated `hydra.compute` into `hydra.util` ([#269](https://github.com/CategoricalData/hydra/issues/269)).
- Removed `hydra.describe` ([#216](https://github.com/CategoricalData/hydra/issues/216)) and types from `hydra.mantle` ([#217](https://github.com/CategoricalData/hydra/issues/217)).
- Replaced `OtherError` with task-specific error types ([#268](https://github.com/CategoricalData/hydra/issues/268)).
- Java: lowered minimum Java version to 11 ([#249](https://github.com/CategoricalData/hydra/issues/249)).
- Java: `Pair` replaces `Tuple2` ([#252](https://github.com/CategoricalData/hydra/issues/252)); `Comparable` implemented for generated classes ([#131](https://github.com/CategoricalData/hydra/issues/131)).
### New features
- Hydra-Scala ([#273](https://github.com/CategoricalData/hydra/issues/273)): complete implementation, sbt/Scala 3, 3043 tests.
- Hydra-Lisp: Clojure ([#278](https://github.com/CategoricalData/hydra/issues/278)), Common Lisp, Emacs Lisp, Scheme — four dialects,
one coder. CI workflows for Clojure, Common Lisp, and Scheme.
- Avro bidirectional coder ([#301](https://github.com/CategoricalData/hydra/issues/301)) with demo.
- Eval primitives ([#281](https://github.com/CategoricalData/hydra/issues/281)): Logic, Equality, Math, collections, and Groups.
- Generated DSL modules ([#180](https://github.com/CategoricalData/hydra/issues/180)): `hydra.dsls` generates DSL helpers from type modules.
- New demos: GraphQL+JSON ([#279](https://github.com/CategoricalData/hydra/issues/279)), PG validation ([#284](https://github.com/CategoricalData/hydra/issues/284)), SHACL ([#294](https://github.com/CategoricalData/hydra/issues/294)), Avro+PG.
- Packaging module ([#290](https://github.com/CategoricalData/hydra/issues/290)): `hydra.packaging` with `Package` type and validation.
- New primitives: `lists.foldr` ([#280](https://github.com/CategoricalData/hydra/issues/280)), `maybes.toList`, float rounding ([#264](https://github.com/CategoricalData/hydra/issues/264), [#285](https://github.com/CategoricalData/hydra/issues/285)).
- Cross-language benchmarking suite ([#234](https://github.com/CategoricalData/hydra/issues/234)).
- Limited typeclass inference ([#164](https://github.com/CategoricalData/hydra/issues/164)).
- Standardized validation patterns across modules ([#291](https://github.com/CategoricalData/hydra/issues/291)).
### Improvements
- Promoted all staging modules to DSL sources ([#267](https://github.com/CategoricalData/hydra/issues/267)).
- Removed legacy adapters, JSON/YAML coders, grammar framework ([#236](https://github.com/CategoricalData/hydra/issues/236), [#295](https://github.com/CategoricalData/hydra/issues/295)).
- Java: efficient immutable data structures ([#193](https://github.com/CategoricalData/hydra/issues/193)); flattened term naming.
- Java: hidden specialized collection classes in type-level files ([#313](https://github.com/CategoricalData/hydra/issues/313)).
- Inference error messages improved ([#231](https://github.com/CategoricalData/hydra/issues/231)).
- Combined nested let bindings in the Haskell coder ([#248](https://github.com/CategoricalData/hydra/issues/248)).
- Simplified `hydra.adapt.simple` ([#255](https://github.com/CategoricalData/hydra/issues/255)).
- Removed Haskell operators dependency from tests ([#288](https://github.com/CategoricalData/hydra/issues/288)).
- Regression tests for non-Haskell/Java coders ([#85](https://github.com/CategoricalData/hydra/issues/85)).
- Regex support added ([#293](https://github.com/CategoricalData/hydra/issues/293)).
- `hydra.annotations.isNativeType` revisited ([#214](https://github.com/CategoricalData/hydra/issues/214)).
- Migrated grammar-generated models ([#295](https://github.com/CategoricalData/hydra/issues/295)).
- `<<= -shouldBe-> <<~` operator change ([#276](https://github.com/CategoricalData/hydra/issues/276)).
- Minimize Generation.hs ([#225](https://github.com/CategoricalData/hydra/issues/225)).
- Implemented missing Flows primitives ([#183](https://github.com/CategoricalData/hydra/issues/183)).
- Removed JavaDocs from the repository ([#262](https://github.com/CategoricalData/hydra/issues/262)).
- Floating-point test portability fixes for Linux CI ([#264](https://github.com/CategoricalData/hydra/issues/264), [#285](https://github.com/CategoricalData/hydra/issues/285)).
- Moved YAML coder to hydra-ext ([#224](https://github.com/CategoricalData/hydra/issues/224)).
- Minimized native Python and Java primitives in favor of DSL implementations ([#244](https://github.com/CategoricalData/hydra/issues/244)).
- Removed the `disabledForPython` test tag ([#250](https://github.com/CategoricalData/hydra/issues/250)).
### Release tooling
- 0.14 release tracking ([#304](https://github.com/CategoricalData/hydra/issues/304)).
### Documentation
- Thorough cleanup of user documentation ([#302](https://github.com/CategoricalData/hydra/issues/302), [#303](https://github.com/CategoricalData/hydra/issues/303)).
- Coding style guide added to wiki.
- Updated 'new implementation' recipe with learnings from Clojure head ([#278](https://github.com/CategoricalData/hydra/issues/278)).
---
## [0.13.0] - 2026-02-27
Major release completing Hydra-Python ([#66](https://github.com/CategoricalData/hydra/issues/66)) and Hydra-Java ([#166](https://github.com/CategoricalData/hydra/issues/166)) as self-hosting Hydra implementations
and demonstrating mutual self-hosting across all three languages.
Significant improvements to type inference, type checking, rewriting, and adaptation.
New language features include first-class Either types, typeclass inference, binary data support,
and a native JSON parser/writer.
Comprehensive tooling for cross-implementation bootstrapping
and provisional support for Go, Rust, and JavaScript targets.
### Highlights
- **Mutual self-hosting across three implementations**: Hydra is now fully self-hosting
in Haskell ([#179](https://github.com/CategoricalData/hydra/issues/179)), Java, and Python, and can cross-generate between every combination
of host and target language (9 paths total).
- **Hydra-Java is complete** ([#166](https://github.com/CategoricalData/hydra/issues/166)): all kernel and generation tests pass.
- **Hydra-Python is complete** ([#66](https://github.com/CategoricalData/hydra/issues/66)): 100% test parity with Haskell.
- **Language coders promoted into the Hydra kernel** ([#176](https://github.com/CategoricalData/hydra/issues/176)): Haskell, Java, and Python
coders are now defined as Hydra DSL modules, making them self-hosting.
- **Either type support** ([#210](https://github.com/CategoricalData/hydra/issues/210)) with full inference, checking, and library support.
- **Native JSON parser and writer** ([#188](https://github.com/CategoricalData/hydra/issues/188), [#243](https://github.com/CategoricalData/hydra/issues/243), [#253](https://github.com/CategoricalData/hydra/issues/253)): Hydra's own JSON parser and writer
replace the Aeson dependency; bootstrap-from-JSON architecture for cross-implementation
code generation.
### Breaking changes
- Renamed `Optional` to `Maybe` throughout the codebase ([#204](https://github.com/CategoricalData/hydra/issues/204)):
`hydra.lib.optionals` → `hydra.lib.maybes`; all `optional` variants renamed to `maybe`.
- Removed unlabeled product and sum types; replaced with pair types ([#212](https://github.com/CategoricalData/hydra/issues/212)).
- Renamed `hydra.core.TypedTerm` to `hydra.core.TypeApplicationTerm`.
- Renamed `hydra.json` to `hydra.json.model`.
- Renamed `hydra.lib.maps.remove` to `hydra.lib.maps.delete`.
- Removed deprecated `hydra.decoding` module.
- Removed old `hydra.mantle.Either` type (replaced by core `Either`).
- Removed `hydra.lib.tuples` library.
- Removed C# coder stub (C# syntax model remains).
- DSL syntax migration: removed `OverloadedStrings` for term expressions ([#238](https://github.com/CategoricalData/hydra/issues/238)).
- Removed `Hydra.Dsl.ShorthandTypes` ([#222](https://github.com/CategoricalData/hydra/issues/222)).
### New features
- Self-hosting in Haskell ([#179](https://github.com/CategoricalData/hydra/issues/179)) and full mutual cross-generation (Haskell ↔ Java ↔ Python).
- New bootstrapping demo validating all 9 paths across 249 modules.
- Promoted Haskell, Java, and Python coders from staging code into Hydra DSL sources ([#176](https://github.com/CategoricalData/hydra/issues/176)).
- JSON-as-source-of-truth bootstrapping architecture ([#243](https://github.com/CategoricalData/hydra/issues/243), [#253](https://github.com/CategoricalData/hydra/issues/253)):
new executables and scripts enabling `bootstrap-from-json` for cross-implementation
code generation.
- Generated term encoders and decoders replace legacy hand-coded modules ([#47](https://github.com/CategoricalData/hydra/issues/47)).
- Hydra-Python completion ([#66](https://github.com/CategoricalData/hydra/issues/66)): restructured project layout with `src/main` and
`src/gen-main` ([#191](https://github.com/CategoricalData/hydra/issues/191)); full library implementations including `hydra.lib.flows`;
`@lru_cache` optimization for nullary bindings; PyPy compatibility.
- Hydra-Java completion ([#166](https://github.com/CategoricalData/hydra/issues/166)): all kernel and generation tests pass; deep changes
to Java coder; `Lazy` utility class for delayed evaluation; array-type support
in Java serde; tail-call optimization in the Java coder; `Tuple` implements `Comparable`.
- Either type ([#210](https://github.com/CategoricalData/hydra/issues/210)): `EitherType`, `either` term constructor, `hydra.lib.eithers` library
with `either`, `map`, `mapList`, `mapMaybe`, `bimap`, `bind`, `fromLeft`, `fromRight`,
`isLeft`, `isRight`, `lefts`, `rights`, `partitionEithers`.
- Pair type as a core construct ([#211](https://github.com/CategoricalData/hydra/issues/211)).
- Void type ([#237](https://github.com/CategoricalData/hydra/issues/237)): uninhabited `void` type as the dual of `unit`; type-level only.
- Native JSON parser and writer ([#188](https://github.com/CategoricalData/hydra/issues/188), [#242](https://github.com/CategoricalData/hydra/issues/242)):
bidirectional JSON encoder/decoder; replaces the Aeson dependency;
cross-checked via a special test runner.
- Typeclass inference ([#164](https://github.com/CategoricalData/hydra/issues/164)):
type schemes with typeclass constraints via `TypeVariableMetadata`;
typeclass metadata on primitive definitions; Haskell coder uses typeclass info.
- Binary/`ByteString` support ([#172](https://github.com/CategoricalData/hydra/issues/172)): binary data via `ByteString` instead of `String`;
Haskell coder uses `Data.ByteString`; new `binaryToBytes` primitive.
- Parser combinators: new `hydra.parsing` module with combinator types and DSL.
- Higher-order primitive interpreter ([#198](https://github.com/CategoricalData/hydra/issues/198)): all primitives are fully interpretable
across all three implementations; legacy `requiresInterp` tag removed.
- Let hoisting and flattening: hoisting polymorphic let terms;
refined hoisting for monomorphic bindings inside polymorphic ones;
more efficient `liftLambdaAboveLet` ([#202](https://github.com/CategoricalData/hydra/issues/202));
case-statement hoisting ([#241](https://github.com/CategoricalData/hydra/issues/241)); subterm hoisting helpers.
- Provisional language targets: Go ([#65](https://github.com/CategoricalData/hydra/issues/65)), Rust (with experimental type-level coder),
JavaScript (syntax model, serde, DSL, generated sources), and Java/Python syntax DSLs.
- New adapter framework ([#236](https://github.com/CategoricalData/hydra/issues/236)): all external coders refactored
(Haskell, YAML, Scala, JSON Schema, C++, PDL, Protobuf, GraphQL).
- Compact labeled records and variants ([#122](https://github.com/CategoricalData/hydra/issues/122)).
- New primitives:
`hydra.lib.lists.find`, `hydra.lib.lists.partition`,
`hydra.lib.flows.withDefault`, `hydra.lib.flows.foldl`,
`hydra.lib.math.{max,min,abs,pred,signum,succ,even,odd}`,
`hydra.lib.pairs.bimap`, `hydra.lib.eithers.bind`,
`hydra.lib.literals.binaryToBytes`, complete `readXxx`/`showXxx` families,
`hydra.lexical.chooseUniqueName`, `neg` renamed to `negate`,
full floating-point math primitives in Python ([#208](https://github.com/CategoricalData/hydra/issues/208)).
- DeepCore DSL: a layer one level deeper than the Meta DSLs,
for programs that construct programs that construct terms.
- `typeOf` implementation ([#168](https://github.com/CategoricalData/hydra/issues/168)).
- Implement `Comparable` for generated Java classes ([#131](https://github.com/CategoricalData/hydra/issues/131)); update of Hydra-Java ([#166](https://github.com/CategoricalData/hydra/issues/166)).
- Compact labeled records exploration ([#122](https://github.com/CategoricalData/hydra/issues/122)).
- Comparison primitives without typeclasses ([#187](https://github.com/CategoricalData/hydra/issues/187)).
- Investigated core support for Either and Flow monads ([#200](https://github.com/CategoricalData/hydra/issues/200)).
### Improvements
- Type system:
- Refactored `hydra.inference` to create new module `hydra.checking`.
- Inference checks after unification to prevent schema names from being unified
with inferred type variables.
- Type application terms preserved when preparing application terms for Python.
- Sanity-check tuple projection index against arity during inference.
- Bind lost type variables in term annotations.
- Made `extendTypeContextForLet` tolerant of untyped bindings.
- Code generation:
- Python: support for deeply-nested match statements; more complete `let` support;
Pythonic syntax for polymorphic function definitions; refinements for complex
case-hoisting scenarios; performance improvements ([#209](https://github.com/CategoricalData/hydra/issues/209), [#239](https://github.com/CategoricalData/hydra/issues/239), [#240](https://github.com/CategoricalData/hydra/issues/240)); inline
let/case rewriting for Python targets ([#203](https://github.com/CategoricalData/hydra/issues/203)).
- Java: method declaration style consistent with calling style.
- Haskell: standardized typeclass names.
- Increased maximum trace depth to support more complex sources.
- Common test suite promotion: all tests promoted into a shared, implementation-independent
test kernel ([#213](https://github.com/CategoricalData/hydra/issues/213)).
- Statically-compiled test suite in Haskell ([#207](https://github.com/CategoricalData/hydra/issues/207)).
- Included all Hydra kernel types in test schema ([#205](https://github.com/CategoricalData/hydra/issues/205)).
- Reorganized Haskell DSL definitions; standardized imports.
- Added TODO comments to all unsafe primitives ([#201](https://github.com/CategoricalData/hydra/issues/201)).
- New `rewriteAndFoldTerm` utility for simultaneous rewriting and folding.
- Lexical helper for dereferencing schema types through aliases.
- Made JSON parser lazy with new `lazy` parser combinator.
- More efficient substitution helpers for empty substitutions.
- Precomputed type/inference context in kernel test runner for performance.
- Property graph encoding and decoding modules promoted into DSL.
- `hydra.tabular` and `hydra.pg.graphson` modules promoted into DSL.
- `hydra.show.*` modules generated into Java and Python.
- Aligned epsilon encoding with the LambdaGraph spec ([#89](https://github.com/CategoricalData/hydra/issues/89)).
- Fixed asymmetry of introductions and eliminations ([#86](https://github.com/CategoricalData/hydra/issues/86), [#134](https://github.com/CategoricalData/hydra/issues/134)).
- Minimized inferred type annotations ([#114](https://github.com/CategoricalData/hydra/issues/114)).
- Investigated combining products with records, sums with unions ([#196](https://github.com/CategoricalData/hydra/issues/196), [#212](https://github.com/CategoricalData/hydra/issues/212)).
- Refined type reduction in adapters ([#144](https://github.com/CategoricalData/hydra/issues/144)).
- Investigation of unification issues ([#163](https://github.com/CategoricalData/hydra/issues/163)).
- Refactored RowType ([#82](https://github.com/CategoricalData/hydra/issues/82)).
- LLM-assisted PG schemas and mappings ([#171](https://github.com/CategoricalData/hydra/issues/171)).
- Simplified unit-valued variants in Python ([#206](https://github.com/CategoricalData/hydra/issues/206)).
- Checked for inconsistencies between Term/TTerm and Type/TType DSLs ([#218](https://github.com/CategoricalData/hydra/issues/218)).
- GenPG demo: refactored to support Haskell, Python, and Java; Python runner;
Java generation; finalized output format.
- Testing: extended test runners for let hoisting (Haskell, Python, Java);
floating-point precision tests; ordering tests for `hydra.lib.maps`/`hydra.lib.sets`;
inference tests for inferred System F terms; case-hoisting test cases; new JSON coder tests;
thorough test cases for all primitives ([#199](https://github.com/CategoricalData/hydra/issues/199)).
### Bug fixes
- Fixed interpreter bugs causing test failures ([#235](https://github.com/CategoricalData/hydra/issues/235)).
- Fixed bug in type checking in connection with dead code.
- Fixed bug in `removeTypesFromTerm`.
- Fixed bug in `typeOfMap`.
- Fixed 32-bit max int value in `hydra.constants`.
- Fixed numeric precision in Python.
- Added `BigDecimal` support and fixed `uint8` (short) support in Java.
- Fixed Haskell coder with respect to imports for binary literals.
- Excluded `Prelude.encodeFloat` and `Prelude.decodeFloat` from generated Haskell
due to name collisions.
- Fixed consistency issues in Python primitives:
`hydra.lib.sets.toList`, `hydra.lib.maps.union` (precedence),
`hydra.lib.strings.lines`, `hydra.lib.strings.readString` (dequoting),
`hydra.lib.lists.apply`, `hydra.lib.maps.toList`.
- Fixed Haskell type signature of `hydra.lists.span`.
- Fixed issue with eta expansion of typed terms.
- Fixed shadowing issue in generated encoding modules.
- Added missing alternatives in `hydra.rewriting.rewriteTermM`.
### Documentation
- Updated main README with complete implementation status.
- Added Documentation sections to all implementation READMEs.
- Fixed outdated Code-organization.md (Python now uses `src/gen-main`).
- Fixed incorrect code paths in Implementation.md.
- Added Java section to Testing wiki.
- Comprehensive developer recipes in `docs/recipes/`.
- Documentation for tail-call optimization implementation.
- Added Haddock comments to Haskell primitives.
- Created wiki page on the release process ([#194](https://github.com/CategoricalData/hydra/issues/194)).
### Community
- Accepted babeloff's `isTrivialTerm` changes.
---
## [0.12.0] - 2025-08-28
A consolidation release: significant Python progress, kernel-level cleanup,
and a wave of bookkeeping closures for Hydra-Java module ports.
### Breaking changes
- Removed `hydra.decoding` module ([#190](https://github.com/CategoricalData/hydra/issues/190)).
- Flattened dependency tiers; eliminated tier-1, tier-2, tier-3 organization ([#184](https://github.com/CategoricalData/hydra/issues/184)).
- Removed `typed` term variant ([#173](https://github.com/CategoricalData/hydra/issues/173), [#162](https://github.com/CategoricalData/hydra/issues/162)).
- Module naming changes: moved tabular and relational modules into kernel ([#152](https://github.com/CategoricalData/hydra/issues/152)).
- Standardized on uncurried helper functions in term-level DSLs ([#174](https://github.com/CategoricalData/hydra/issues/174)).
- Renamed `hydra.lib.flows.traverseOptional` to `hydra.lib.flows.mapOptional`.
- Eliminated camel-cased namespace parts from the kernel ([#152](https://github.com/CategoricalData/hydra/issues/152)).
- Replaced list and optional eliminations with primitive functions ([#150](https://github.com/CategoricalData/hydra/issues/150)).
- Moved `Hydra.Ext` to hydra-ext ([#178](https://github.com/CategoricalData/hydra/issues/178)); moved 'ext' sources into hydra-ext ([#189](https://github.com/CategoricalData/hydra/issues/189)).
### New features
- Significant progress toward Hydra-Python completion:
generated all kernel types and terms into Python;
added `Decimal` support for bigfloat values;
environment tracking for variable scoping;
generated `hydra.languages` into Python;
`__hash__` and `__eq__` on serializable generated classes ([#160](https://github.com/CategoricalData/hydra/issues/160)).
- Designated `unit` term and type variants ([#186](https://github.com/CategoricalData/hydra/issues/186)).
- `hydra.lib.flows.mapElems` and `hydra.lib.flows.mapKeys` utilities.
- Promoted JSON coder into the DSL ([#181](https://github.com/CategoricalData/hydra/issues/181)).
- Promoted JSON utilities into the DSL ([#181](https://github.com/CategoricalData/hydra/issues/181)).
- C# coder ([#139](https://github.com/CategoricalData/hydra/issues/139)).
- GQL model and parser ([#140](https://github.com/CategoricalData/hydra/issues/140)).
- Tabular adapters ([#142](https://github.com/CategoricalData/hydra/issues/142)).
- Type-level C++ coder ([#170](https://github.com/CategoricalData/hydra/issues/170)).
- Variable-types-to-Haskell-typedefs transformation ([#70](https://github.com/CategoricalData/hydra/issues/70)).
- A newline at the end of each generated file ([#154](https://github.com/CategoricalData/hydra/issues/154)).
- Refactor kernel modules and primitives by connectivity ([#177](https://github.com/CategoricalData/hydra/issues/177)).
### Improvements
- Condensed repeated elements in error traces ([#165](https://github.com/CategoricalData/hydra/issues/165)).
- Fixed transitive schema dependencies ([#185](https://github.com/CategoricalData/hydra/issues/185)).
- Improved adapter solution with respect to literals.
- Better handling of type variables in Python coder.
- Enhanced term-level Python generation with proper ordering to minimize forward references.
- Topo-sort helper function for dependency management.
- Updated all Python libraries with latest changes.
- Distinguished between deannotation and detyping of terms.
- Adapted primitives when applying language constraints to a graph.
- Use unqualified names where possible in generated code ([#153](https://github.com/CategoricalData/hydra/issues/153)).
- Eliminated `Data.Graph` (containers) dependency ([#167](https://github.com/CategoricalData/hydra/issues/167)).
- "Close the loop" demonstration ([#175](https://github.com/CategoricalData/hydra/issues/175)).
- Implemented `typeOf` ([#168](https://github.com/CategoricalData/hydra/issues/168)).
### Bug fixes
- Fixed System F terms for records and case statements ([#168](https://github.com/CategoricalData/hydra/issues/168)).
- Fixed issue with transitive type-level module dependencies ([#185](https://github.com/CategoricalData/hydra/issues/185)).
- Corrected handling of variable references in Python application terms.
- Fixed nullary functions in Python (added empty parens).
- Added missing alternatives in `hydra.rewriting.rewriteTermM`.
### Bookkeeping
- Closed long-standing Hydra-Java module-port issues
([#9](https://github.com/CategoricalData/hydra/issues/9), [#11](https://github.com/CategoricalData/hydra/issues/11), [#15](https://github.com/CategoricalData/hydra/issues/15), [#16](https://github.com/CategoricalData/hydra/issues/16), [#18](https://github.com/CategoricalData/hydra/issues/18), [#19](https://github.com/CategoricalData/hydra/issues/19), [#20](https://github.com/CategoricalData/hydra/issues/20), [#21](https://github.com/CategoricalData/hydra/issues/21), [#22](https://github.com/CategoricalData/hydra/issues/22), [#23](https://github.com/CategoricalData/hydra/issues/23), [#25](https://github.com/CategoricalData/hydra/issues/25), [#44](https://github.com/CategoricalData/hydra/issues/44), [#45](https://github.com/CategoricalData/hydra/issues/45));
most of the underlying work shipped in earlier releases.
- Closed Hydra-Java DSL-port issues ([#24](https://github.com/CategoricalData/hydra/issues/24), [#26](https://github.com/CategoricalData/hydra/issues/26), [#27](https://github.com/CategoricalData/hydra/issues/27), [#28](https://github.com/CategoricalData/hydra/issues/28), [#29](https://github.com/CategoricalData/hydra/issues/29)) and
the Scala/Avro tracking issues ([#77](https://github.com/CategoricalData/hydra/issues/77), [#81](https://github.com/CategoricalData/hydra/issues/81)); these had been resolved
by earlier releases (Scala in 0.14.0, Avro bidi in 0.14.0).
### Documentation
- Updated Hydra-Haskell README.
- Updated Hydra-Java README with corrected links.
- Updated JavaDocs.
---
## [0.11.0] - 2025-03-16
Untagged in-repository version.
A type-inference rebase release: major restructuring of inference internals
to align with Algorithm W, plus a sweeping removal of explicit type annotations
across the kernel.
### Highlights
- **Inference rebased on Algorithm W** ([#118](https://github.com/CategoricalData/hydra/issues/118)): unify-early strategy ([#146](https://github.com/CategoricalData/hydra/issues/146)),
infinite-type checks restored ([#116](https://github.com/CategoricalData/hydra/issues/116)), recursive-element inference ([#90](https://github.com/CategoricalData/hydra/issues/90)),
unified handling of elements and let bindings ([#112](https://github.com/CategoricalData/hydra/issues/112)), minimized manual
type annotations ([#119](https://github.com/CategoricalData/hydra/issues/119)).
- **`hydra.inference` module** introduced for inference type definitions;
substitution and unification moved up a level.
### Breaking changes
- Argument order of `Logic.ifElse` changed ([#147](https://github.com/CategoricalData/hydra/issues/147)).
### New features
- Inference test cases promoted into the common test suite ([#148](https://github.com/CategoricalData/hydra/issues/148));
added "kernel examples" inference tests; more recursion / mutual recursion cases.
### Improvements
- Removed type annotations across all kernel sources ([#119](https://github.com/CategoricalData/hydra/issues/119)).
- Migrated to fully-applied primitive library DSLs ([#157](https://github.com/CategoricalData/hydra/issues/157)).
- Aligned `Graph` and `Element` with `LetBinding` ([#159](https://github.com/CategoricalData/hydra/issues/159)).
- `hydra.core.Unit` recognized by the Haskell coder.
- Refactored inference tests.
### Bug fixes
- Fix for underdetermined type in `hydra.decode`.
---
## [0.10.0] - 2025-02-19
Untagged in-repository version.
Adds Hydra-Python (initial completion), a GraphSON coder,
provisional Hydra-Go support, and dot-separated namespace conventions.
### Highlights
- **Hydra-Python initial completion** ([#80](https://github.com/CategoricalData/hydra/issues/80), [#66](https://github.com/CategoricalData/hydra/issues/66)): Python coder, generated kernel
modules in Python, and full library implementations across kernel namespaces.
- **GraphSON coder** ([#79](https://github.com/CategoricalData/hydra/issues/79)).
- **Provisional Hydra-Go** ([#65](https://github.com/CategoricalData/hydra/issues/65)).
- **Namespace formatting** standardized to dot-separated form ([#151](https://github.com/CategoricalData/hydra/issues/151)).
### Breaking changes
- All namespaces use dot-separated form ([#151](https://github.com/CategoricalData/hydra/issues/151)).
### New features
- Hydra-Python: Python coder; generated `hydra.coreEncoding`, `hydra.strip`,
`hydra.literals` and other kernel modules in Python; tuple-expression support;
updated `hydra.constants` in Python.
- GraphSON coder ([#79](https://github.com/CategoricalData/hydra/issues/79)).
- Provisional Hydra-Go ([#65](https://github.com/CategoricalData/hydra/issues/65)).
- `string-to-char-list` and `char-list-to-string` primitives ([#149](https://github.com/CategoricalData/hydra/issues/149)).
- Restored normalization for generated term variables ([#145](https://github.com/CategoricalData/hydra/issues/145)).
### Improvements
- Re-leveled dependency tiers ([#135](https://github.com/CategoricalData/hydra/issues/135)).
- Updated all Java, Haskell, hydra-ext, and Python primitives to current sources.
---
## [0.9.0] - 2025-01-06
Untagged in-repository version.
Bootstraps Hydra-Python and the JSON Schema coder; introduces a fluent Java DSL for flows.
### Highlights
- **JSON Schema coder** ([#141](https://github.com/CategoricalData/hydra/issues/141)).
- **Python coder scaffold**: serde, language constraints, and generated Haskell
sources for Python.
- **Fluent-style Java DSL for flows** ([#143](https://github.com/CategoricalData/hydra/issues/143)).
### New features
- JSON Schema coder ([#141](https://github.com/CategoricalData/hydra/issues/141)).
- Python coder scaffold and serde.
- Provisional Python language constraints module.
- Fluent-style Java DSL for flows ([#143](https://github.com/CategoricalData/hydra/issues/143)); moved Flows DSL into `hydra.dsl`.
- New `hydra.coders` DSL.
- New DSL functions for core variants.
### Improvements
- Generalized `Namespaces` so it can be used for languages other than Haskell.
- Local-name-only Python type aliases (the directory tree provides the namespace).
- Coders DSL used to simplify Java language-constraint sources.
- Removed redundant productions in the Python grammar.
- Added unit tests for fluent flows.
### Documentation
- Updated JavaDocs for 0.9.0.
---
## [0.8.1] - 2024-09-24
Patch release.
### Improvements
- Generalized the property graph merging utility to accept type systems other than Hydra Core.
---
## [0.8.0] - 2024-09-09
C# support ([#139](https://github.com/CategoricalData/hydra/issues/139)), Graphviz DOT coder, term accessors, and a small breaking change in Java
to support Spark.
### Breaking changes
- Made `FlowException` serializable for Spark support (may affect existing error handling).
### New features
- C# syntax module based on the Microsoft ANTLR grammar ([#139](https://github.com/CategoricalData/hydra/issues/139)).
- Graphviz DOT coder ([#136](https://github.com/CategoricalData/hydra/issues/136)):
full support for lambdas and recursive `let` statements;
compact 'accessor graph' visualization option;
customizable label styles;
highlighted let-bound terms; edge labels.
- Term accessor type to facilitate lenses and path-aware transformations.
- OpenGQL grammar and generated Haskell for the OpenGQL model ([#140](https://github.com/CategoricalData/hydra/issues/140)).
### Improvements
- Added `</>` as alternative to `@@` application operator in Haskell DSLs.
- Utilities for working with term accessors.
- More specific exception class for JSON decoding.
- Additional convenience methods on `JsonDecoding.java`.
- Used transitive dependencies in hydra-java and hydra-ext.
- Upgraded ANTLR to address a vulnerability.
- Moved TinkerPop utilities from `hydra/ext/org/apache/tinkerpop` into `hydra/pg`.
---
## [0.7.0] - 2024-08-21
Major refactoring of module organization and namespace management.
Establishes the DNS-style namespace convention in hydra-ext
and lifts property-graph models into a top-level `hydra/pg` namespace.
### Breaking changes
- Namespace reorganization: migrated to DNS-based module naming in hydra-ext ([#138](https://github.com/CategoricalData/hydra/issues/138)):
`hydra/ext/avro` → `hydra/ext/org/apache/avro`,
`hydra/ext/graphql` → `hydra/ext/org/graphql`,
`hydra/ext/yaml` → `hydra/ext/org/yaml`,
`hydra/ext/json/decoding` → `hydra/ext/org/json/decoding`,
`hydra/ext/rdf` → `hydra/ext/org/w3/rdf`,
`hydra/ext/shacl` → `hydra/ext/org/w3/shacl`,
`hydra/ext/tinkerpop` → `hydra/ext/org/apache/tinkerpop`.
- Property graphs: promoted property graph modules from
`hydra/ext/org/apache/tinkerpop` to `hydra/pg`.
- Project structure: renamed `hydra-extensions` to `hydra-ext`;
renamed `hydra/langs` to `hydra/ext` ([#138](https://github.com/CategoricalData/hydra/issues/138));
made hydra-ext into a Gradle subproject alongside hydra-java;
added top-level Gradle build.
### Improvements
- Moved TinkerPop modules from hydra-haskell into hydra-ext for better separation.
- Moved miscellaneous models to `Hydra.Ext.Other` ([#138](https://github.com/CategoricalData/hydra/issues/138)).
- Moved XML Schema, SQL, ShEx, and OWL models to hydra-ext.
- Moved KQL, Parquet, and Python modules to hydra-ext.
- Separated JavaDocs for hydra-java and hydra-ext.
- Updated publishing configuration in `build.gradle`.
---
## [0.6.0] - 2024-08-19
Type-system improvements (System F type abstraction/application; eliminated polymorphic
types from Hydra Core), expanded language support (Graphviz DOT model, generated Java
field-name constants), and revamped annotation handling.
### Breaking changes
- Eliminated `InferenceContext` helper type ([#103](https://github.com/CategoricalData/hydra/issues/103)).
- Changed typing environment from `Map Name Type` to `Map Name TypeScheme` in graphs ([#76](https://github.com/CategoricalData/hydra/issues/76)).
- Updated annotations and flows to use `map<Name, Term>` instead of `map<string, Term>` ([#133](https://github.com/CategoricalData/hydra/issues/133)).
- Unified `Name` and `FieldName`; aliased to `string` ([#121](https://github.com/CategoricalData/hydra/issues/121)).
- Renamed `hydra/core.UnitType` to `hydra/core.Unit` ([#123](https://github.com/CategoricalData/hydra/issues/123)).
- Eliminated annotation classes; Hydra has a single built-in notion of annotations ([#113](https://github.com/CategoricalData/hydra/issues/113)).
- Unified the `Nominal` type with `RowType` ([#115](https://github.com/CategoricalData/hydra/issues/115)).
- Removed the `extends` parameter for row types ([#132](https://github.com/CategoricalData/hydra/issues/132)).
- Replaced `hydra/Kv` with `hydra/Annotations` (rename revisited).
### New features
- System F support: `typeAbstraction` and `typeApplication` term constructors.
- Python3 syntax model based on the official Python BNF ([#80](https://github.com/CategoricalData/hydra/issues/80)).
- Graphviz DOT model and initial support ([#136](https://github.com/CategoricalData/hydra/issues/136)).
- Field-name constants generated in Java code generation ([#137](https://github.com/CategoricalData/hydra/issues/137)).
- Provisional Algorithm W implementation in Haskell (originally from @wisnesky), kept for reference.
### Improvements
- Primitive organization: Hydra primitives organized into libraries for namespace management.
- Code generation:
- Escaped field name constants and `with_` methods in Java coder.
- Generated field name constants in Java ([#137](https://github.com/CategoricalData/hydra/issues/137)).
- Avoided duplicated comments in wrapper classes in generated Java.
- Removed superfluous newtype comments in Haskell coder.
- Updated Delta Parquet model to follow the Java API more closely.
- Enriched OpenCypher features module with the complete list of standard Cypher functions.
- Added convenience methods to `JsonEncoding.java`.
- Restored `Hydra.Inference` subdirectory.
- Allowed arbitrary case for element names ([#7](https://github.com/CategoricalData/hydra/issues/7)).
- Corrected `uint8` representation in Java to `Short` ([#120](https://github.com/CategoricalData/hydra/issues/120)).
### Bug fixes
- Fixed handling of type annotations in term adapters.
- Fixed decoding of encoded terms annotated with a type.
- Corrected encoding of universal types in `showTerm` ([#117](https://github.com/CategoricalData/hydra/issues/117)).
---
## [0.5.3] - 2024-08-06
Patch release.
Preserves order of map key/value pairs and set elements during JSON serialization.
### Bug fixes
- Preserved ordering of key/value pairs and set elements in JSON output.
### New features
- Polymorphic `equal` primitive in Haskell and Java.
- Generated Hydra type definitions together with native instantiations of Hydra types
in Haskell (a stepping stone toward generated coders, [#47](https://github.com/CategoricalData/hydra/issues/47)).
---
## [0.5.1] - 2024-08-01
Patch release.
Dependency updates and minor improvements following the 0.5.0 Hydra Core overhaul.
### Improvements
- Updated dependencies.
---
## [0.5.0] - 2024-07-26
Untagged in-repository version.
Major Hydra Core overhaul: eliminates polymorphic types in favor of explicit
TypeScheme; consolidates the annotation system; revamps `Let` term encoding.
### Breaking changes
- Eliminated polymorphic types from Hydra Core in Haskell ([#125](https://github.com/CategoricalData/hydra/issues/125)):
removed type parameters from `hydra/core` types in Hydra-Java; replaced type schemes
with forall types ([#76](https://github.com/CategoricalData/hydra/issues/76)).
- Revamped core encoding and `Let`: bindings are now a list of
`(name, term, optional type scheme)` triplets instead of a map.
- Unified typed-term types and moved `TypeScheme` into Hydra Core.
- Eliminated `AnnotationClass`; Hydra has a single built-in notion of annotations now ([#113](https://github.com/CategoricalData/hydra/issues/113)).
- Renamed and refactored phantom-type wrappers ([#128](https://github.com/CategoricalData/hydra/issues/128)); removed deprecated `Reference`
type from `hydra/phantoms`.
- Removed incomplete support for stream types and stream terms ([#88](https://github.com/CategoricalData/hydra/issues/88)).
### New features
- `LiteralTypes` DSL module so literals can be built independently of terms.
- `Hydra.Minimal` module to facilitate collaboration on Hydra application prototypes.
- `TypeConstraint` type added to the kernel.
- `foldl` primitive in Haskell and Java; DSL uses `foldl` instead of the built-in
list elimination term by default.
### Improvements
- Improvements to Java and JSON coders; improved untyped JSON coder.
- Pre-order and post-order term-traversal test cases added.
- Refactored type inference tests.
- Restored generated Java (Core through Tier 3) with only a few manual tweaks.
- Element names allow arbitrary case ([#7](https://github.com/CategoricalData/hydra/issues/7)).
---
## [0.4.0] - 2024-07-10
Untagged in-repository version.
Adds null checks to generated Java (breaking, but justified — Hydra-Java disallows nulls),
the Gremlin model, and Protobuf annotation refinements.
### Breaking changes
- Null checks added to constructors and `withXXX()` methods in generated Java;
null values are no longer permitted in Hydra-Java.
- Removed Java 8 restriction (raised minimum Java version).
### New features
- Gremlin model ([#127](https://github.com/CategoricalData/hydra/issues/127)); generated Haskell for Gremlin.
- `hydra/lib/lists.safeHead` primitive in Haskell (necessary in Java due to eager evaluation).
- Support for Protobuf `deprecated=true` annotation; non-string Protobuf options.
- Java options in generated Protobuf.
### Improvements
- Used `java.util.Objects.requireNonNull` instead of a custom null check in generated Java.
- Added 'automatically generated file' disclaimer to generated Java files.
- Added autogen comments and null checks to (most) generated Java.
- Added necessary schema-level dependencies for built-in modules.
- Added null checks to the Flows DSL in Java.
---
## [0.3.0] - 2024-06-05
Untagged in-repository version.
Adds an OpenCypher parser based on an ANTLR grammar ([#124](https://github.com/CategoricalData/hydra/issues/124)),
a KQL (Kusto Query Language) model and serializer,
a Delta Parquet model,
and an early property graph queries model in the style of Cypher.
### New features
- OpenCypher parser based on the OpenCypher M23 ANTLR grammar ([#124](https://github.com/CategoricalData/hydra/issues/124));
ANTLR added as a build dependency;
large Cypher test suite drawn from the Cypher Manual.
- Cypher-to-PG-query transformer (Java; partially implemented).
- Property graph queries DSL and generated property graph query classes in Java.
- Property graph queries model (Cypher / future GQL style).
- KQL (Kusto Query Language) initial model and basic serializer.
- Delta Parquet model with generated sources.
### Improvements
- Java options and `deprecated=true` support in generated Protobuf.
- Convenience methods in Java.
---
## [0.2.0] - 2024-01-10
Hydra-Java 0.2.0 release.
Significant Java tooling and DSL build-out, Protobuf bidirectional coder,
Python3 syntax model ([#80](https://github.com/CategoricalData/hydra/issues/80)), property graph validation ([#100](https://github.com/CategoricalData/hydra/issues/100)),
JSON bidirectional support in Java ([#104](https://github.com/CategoricalData/hydra/issues/104)),
OpenCypher initial model ([#108](https://github.com/CategoricalData/hydra/issues/108)),
Cypher unification, and the start of the typed-DSL story in Haskell.
### New features
- Property graph validation: validator type, optionality on property types,
customizable id/property handling in the merging adapter, fine-tuned validation,
comprehensive unit tests in Java ([#100](https://github.com/CategoricalData/hydra/issues/100)).
- Bidirectional JSON serialization/deserialization in Java ([#104](https://github.com/CategoricalData/hydra/issues/104)).
- Checkstyle configuration based on Google style guide ([#111](https://github.com/CategoricalData/hydra/issues/111)).
- Python3 syntax model based on the official Python BNF ([#80](https://github.com/CategoricalData/hydra/issues/80)).
- Initial OpenCypher model and parser scaffold ([#108](https://github.com/CategoricalData/hydra/issues/108)).
- Protobuf coder ([#99](https://github.com/CategoricalData/hydra/issues/99)): type encoder, field numbering, formatting, deprecated annotation,
Java options, non-string options.
- Adapter framework tolerance of recursive types ([#58](https://github.com/CategoricalData/hydra/issues/58)); default branch for case
statements ([#60](https://github.com/CategoricalData/hydra/issues/60)).
- Topological sort in type inference ([#67](https://github.com/CategoricalData/hydra/issues/67)).
- `hydra/query` model ([#73](https://github.com/CategoricalData/hydra/issues/73)).
- Records-to-TinkerPop-elements coder ([#64](https://github.com/CategoricalData/hydra/issues/64)).
- Equality primitives for all literal types ([#92](https://github.com/CategoricalData/hydra/issues/92)); polymorphic logic primitives ([#95](https://github.com/CategoricalData/hydra/issues/95)).
- `mapKeys` primitive ([#93](https://github.com/CategoricalData/hydra/issues/93)).
- Tuple support in Java ([#94](https://github.com/CategoricalData/hydra/issues/94)).
- Java 8 as an optional target ([#96](https://github.com/CategoricalData/hydra/issues/96)); optionally generate Java classes as `Serializable` ([#97](https://github.com/CategoricalData/hydra/issues/97)).
- Bidirectional "merged vertex" and "merged edge" coders ([#106](https://github.com/CategoricalData/hydra/issues/106)).
- Nullability and parameterization in the tabular model ([#107](https://github.com/CategoricalData/hydra/issues/107)).
- Term-level / type-level dependency distinction for modules ([#109](https://github.com/CategoricalData/hydra/issues/109)).
- Flatten nested `let` terms for transformation into Java ([#110](https://github.com/CategoricalData/hydra/issues/110)).
- Various `Flow` utilities in Java: `bind3`; convenience methods for consuming results;
`fromFlow` variants including one that throws.
### Improvements
- Hydra-Java module ports ([#10](https://github.com/CategoricalData/hydra/issues/10), [#12](https://github.com/CategoricalData/hydra/issues/12), [#13](https://github.com/CategoricalData/hydra/issues/13), [#14](https://github.com/CategoricalData/hydra/issues/14), [#17](https://github.com/CategoricalData/hydra/issues/17), [#30](https://github.com/CategoricalData/hydra/issues/30), [#31](https://github.com/CategoricalData/hydra/issues/31), [#32](https://github.com/CategoricalData/hydra/issues/32), [#33](https://github.com/CategoricalData/hydra/issues/33), [#34](https://github.com/CategoricalData/hydra/issues/34), [#35](https://github.com/CategoricalData/hydra/issues/35),
[#38](https://github.com/CategoricalData/hydra/issues/38), [#39](https://github.com/CategoricalData/hydra/issues/39), [#41](https://github.com/CategoricalData/hydra/issues/41), [#43](https://github.com/CategoricalData/hydra/issues/43), [#48](https://github.com/CategoricalData/hydra/issues/48), [#71](https://github.com/CategoricalData/hydra/issues/71), [#72](https://github.com/CategoricalData/hydra/issues/72), [#75](https://github.com/CategoricalData/hydra/issues/75), [#83](https://github.com/CategoricalData/hydra/issues/83)):
`Common`, `CoreEncoding`, `CoreLanguage`, `Kernel`, `Flows`, `Lists`, `Literals`,
`Math`, `Sets`, `Strings`, `Optionals`, `Maps`, `Flows` primitives, `Sets` primitives.
- Common DSLs in Haskell: Flow support ([#68](https://github.com/CategoricalData/hydra/issues/68)), Let support ([#69](https://github.com/CategoricalData/hydra/issues/69)).
- Renamed annotation type parameter `m` to `a` ([#41](https://github.com/CategoricalData/hydra/issues/41)).
- Updated wrapper, element, and variable types ([#75](https://github.com/CategoricalData/hydra/issues/75)).
- Removed `schema` field from `Element` ([#83](https://github.com/CategoricalData/hydra/issues/83)).
- GraphQL coder ([#78](https://github.com/CategoricalData/hydra/issues/78)).
- Code quality:
- Updated main and test sources to conform to Checkstyle configuration ([#111](https://github.com/CategoricalData/hydra/issues/111)).
- Extended line-length limit from 100 to 120 characters.
- Disabled overly restrictive indentation and import-order rules.
- Disabled `RightCurlyAlone` for compact inline map definitions.
- Streamlined property-graph element merging to unify properties with identical
keys and types ([#106](https://github.com/CategoricalData/hydra/issues/106)).
- Convenience functions for printing literals and literal types in the Java DSL.
- Minor addition to JSON decoding.
- DSL convenience: alphabetic-case flexibility for element names ([#7](https://github.com/CategoricalData/hydra/issues/7)).
### Bug fixes
- Fixed type annotations for the Sets Java port ([#48](https://github.com/CategoricalData/hydra/issues/48)).
- Various minor fixes during the Java module ports.
---
## [0.1.1] - 2022-12-04
Patch release the same day as 0.1.0.
README polish only.
---
## [0.1.0] - 2022-12-04
First packaged release of Hydra (Hackage).
This release contains the complete foundation of Hydra.
### Core language
- Hydra's core type and data languages (`hydra.core`).
- Core models for graphs and modules.
- Computation model with the `Flow` monad.
- BNF grammars support.
- Phantom types.
- Basic operations on types and terms.
### Type system
- Hindley–Milner-style type inference.
- Type schemes with polymorphism.
- Type/term validation.
### Transformations
- Adapter system: type-to-type rewriting and transformation.
- Coders:
Haskell coder (types and terms),
Java coder (types and terms),
partial Scala coder (terms only),
Avro coder,
JSON coder,
PDL (Pegasus Data Language) coder,
RDF + SHACL coder,
YAML coder.
### Language support
- Models for GraphQL, OWL (Web Ontology Language), ShEx (Shape Expressions),
and TinkerPop-style property graphs.
### Developer tools
- Type-construction DSL and term-construction DSL.
- QuickCheck property-based tests.
### Implementations
- Hydra-Haskell: bootstrapping implementation with full kernel.
- Hydra-Java: Java implementation with mature tooling.
### Community
- Set up the LambdaGraph Discord server ([#2](https://github.com/CategoricalData/hydra/issues/2)).
---
## Contributing
We welcome contributions! Please see:
- [Developer recipes](https://github.com/CategoricalData/hydra/tree/main/docs/recipes)
- [LambdaGraph Discord](https://bit.ly/lg-discord)
## Release process
See the [Release policy](https://github.com/CategoricalData/hydra/wiki/Release-policy)
wiki page and [docs/release-workflow.md](docs/release-workflow.md)
for information on how Hydra releases are versioned, built, and published.