Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ The first four ship per-language today across the five ports (TS / C# / Java / P

## Status

_Last refreshed 2026-10-26._
_Last refreshed 2026-10-30._

**1.0 gating — the quiet period is RETIRED (2026-09-06).** `docs/1.0-readiness.md` §G3 no
longer asks for "one coordinated release with no metamodel-breaking change." It measured a
Expand All @@ -39,9 +39,9 @@ because a conformance corpus gates the ports against each other and never agains
in ADR-0035 **Amendment 3**. Do not reintroduce a waiting gate in any form.


**Where the versions are.** `latest` is **`1.1.4`** on npm, **`8.1.4`** on Maven Central,
**`1.1.4`** on PyPI and **`1.1.4`** on NuGet (the Maven major is always **npm major + 7**, so
1.1.4 is 8.1.4). **1.1.0, 1.1.1, 1.1.2, 1.1.3 and 1.1.4 are released.** 1.0.13 is the last 1.0.x release; the four registries moved together on 1.0.13, 1.0.12, 1.0.11, 1.0.10 and 1.0.9 (Maven skipped 8.0.8), and earlier Maven alone took 1.0.6 (8.0.6) while the other three skipped that
**Where the versions are.** `latest` is **`1.2.0`** on npm, **`8.2.0`** on Maven Central,
**`1.2.0`** on PyPI and **`1.2.0`** on NuGet (the Maven major is always **npm major + 7**, so
1.2.0 is 8.2.0). **1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4 and 1.2.0 are released.** 1.0.13 is the last 1.0.x release; the four registries moved together on 1.0.13, 1.0.12, 1.0.11, 1.0.10 and 1.0.9 (Maven skipped 8.0.8), and earlier Maven alone took 1.0.6 (8.0.6) while the other three skipped that
number. Both patterns are the convergent-publishing rule working as intended. **1.0 is CUT** and **1.1 is released**: the 1.0.0-rc candidates through 1.0.13 are superseded, and npm's `next` tag is REPOINTED onto each release — not deleted, because
`dist-tag rm` 403s for every token we hold (`docs/RELEASING.md` §4).
`metamodelVersion` read **`1.0`** through 1.0.13 — C4 landed and G4 shipped it, and no 1.0.x patch
Expand Down Expand Up @@ -80,7 +80,7 @@ PyPI has had no product change since `0.25.0` — nothing is broken.

**Key cross-language features shipped:** FR5 family (a/b/c/d/e + WARN envelope-shape — actionable loader errors per ADR-0009); FR-003 (Java RDB runtime persistence + projections; schema migrations are TS-only — the Java migration engine was removed); FR-006 (template.output parser-on-receipt codegen per ADR-0010 in all 5 ports); FR-008 + FR-009 (cross-port REST API contract + the nine filter operators); FR-018 (M:N relationship codegen in all 5 ports — entity navigation + idiomatic ORM wiring [Drizzle m2m / EF Core `UsingEntity` / Spring repo+JPA / Exposed / Pydantic+route as the SQLAlchemy-secondary equivalent] + REST traversal `GET /<source-plural>/{id}/<relation>` + Tier-2 docs, gated by the shared api-contract m2m corpus in both lanes + persistence-conformance; the TanStack M:N client hook is a deferred client-ergonomics follow-up); SP-H (field-subtype end-to-end hardening: every concrete `field.*` subtype write+read round-trips cross-port via the persistence `op: roundtrip` gate; cut `field.byte`/`field.short`/`field.class` non-functional stubs; cross-port filter-op reconciliation for uuid/currency); source v2 paradigm (ADR-0007); metadata-ktx Kotlin facade; per-target output directories (TS codegen); FR-044 (the reporting vocabulary — `dimension.attribute`/`dimension.time`, `measure.aggregate`/`measure.ratio`, `segment.filter`, `object.report`, `@spine` on a report to take rows from a to-one dimension entity, `@default` on a measure for empty aggregates, plus the relative-date filter value — registered and loader-validated in all five ports; a report that declares a read-only `source.rdb @kind: view` is lowered to a SQL view by `meta migrate` and read by every port, and served by a generated read-only list route in every port, gated by the api-contract `report/` sub-corpus; the TypeScript `cube-model` reference generator writes the vocabulary as Cube data-model files, gated by the `fixtures/cube-model/` corpus and a `cube` lane that loads the output into a real Cube; a served report gets the generated TanStack list hook (`use<R>List`) but no grid or form, see [docs/features/reporting.md](docs/features/reporting.md) and [docs/features/cube-export.md](docs/features/cube-export.md)).

**Release 1.1.0** (released; npm `1.1.0`, PyPI `1.1.0`, NuGet `1.1.0` and Maven Central `8.1.0`; the latest is 1.1.4 / 8.1.4). The reporting release (FR-044): declare dimensions, measures, segments and an `object.report`, and get a SQL view, a served read-only list route in every port, a generated TanStack list hook, and a Cube data model, with `@spine` for rows that have no facts and `@default` for an empty measure. Also carries the first slice of requirements (the gate in every port's `verify`), the derived-key parity fix across the ports, and the list-hook and nested-average fixes found by the first adopter. See the `CHANGELOG.md` 1.1.0 section for the full scope, pre-release RC history, and the diffs to expect when you upgrade (ejected generators and keyless projections). It also makes documentation a set of generators in every port (ADR-0034 Amendment 9): the docs commands are removed, and `docs/features/migrations/docs-are-generators.md` is the upgrade path. The last 1.0.x release, 1.0.13 (2026-10-03), was a PATCH on 1.0.x.
**Release 1.1.0** (released; npm `1.1.0`, PyPI `1.1.0`, NuGet `1.1.0` and Maven Central `8.1.0`; the latest is 1.2.0 / 8.2.0). The reporting release (FR-044): declare dimensions, measures, segments and an `object.report`, and get a SQL view, a served read-only list route in every port, a generated TanStack list hook, and a Cube data model, with `@spine` for rows that have no facts and `@default` for an empty measure. Also carries the first slice of requirements (the gate in every port's `verify`), the derived-key parity fix across the ports, and the list-hook and nested-average fixes found by the first adopter. See the `CHANGELOG.md` 1.1.0 section for the full scope, pre-release RC history, and the diffs to expect when you upgrade (ejected generators and keyless projections). It also makes documentation a set of generators in every port (ADR-0034 Amendment 9): the docs commands are removed, and `docs/features/migrations/docs-are-generators.md` is the upgrade path. The last 1.0.x release, 1.0.13 (2026-10-03), was a PATCH on 1.0.x.

Active and planned work lives in GitHub: issues labelled `FR`, milestones for releases, and the MetaObjects Roadmap project board. `spec/roadmap.md` keeps the release direction and the FR → issue → spec index. Process: `docs/ROADMAP-PROCESS.md`.

Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ here.**

## [Unreleased]

### Added

- **A `pydantic` extra on the Python package.** `pip install "metaobjects[pydantic]"` installs
`pydantic>=2.8`, the minimum the generated Python models need, so an adopter can get the enforced
floor with the package. The base install is unchanged.

## [1.2.0] — 2026-10-30

_npm `1.2.0` (full lockstep across all 14 `@metaobjectsdev/*` publish candidates)._
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,11 +160,11 @@ first-week wedge plan — and `meta init` picks up from there.

| Language | Status | Quickstart | Source |
|---|---|---|---|
| TypeScript | **npm `1.1.4`** — the `@metaobjectsdev/*` packages | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) |
| Java | **Maven Central `8.1.4`** (`com.metaobjects:*` — the JVM major is npm major + 7) — loader + OMDB + render + Maven plugin all shipped; full conformance green | [`docs/ports/java.md`](docs/ports/java.md) | [`server/java/`](server/java/) |
| Kotlin | **Maven Central `8.1.4`** — codegen tier on top of Java: 17 generators (entity, Exposed table, names, relations, repository, output-parser, output-prompt, render-helper, extractor, filter-allowlist, validator, Spring config, storedProc, Spring controller, requirement-tests, api-docs, report-export); 24 / 24 persistence-conformance | [`docs/ports/kotlin.md`](docs/ports/kotlin.md) | [`server/java/codegen-kotlin/`](server/java/codegen-kotlin/) · [`server/java/metadata-ktx/`](server/java/metadata-ktx/) |
| C# | **NuGet `1.1.4`** — loader + conformance + EF Core codegen + render engine + `dotnet meta` CLI all shipped | [`docs/ports/csharp.md`](docs/ports/csharp.md) | [`server/csharp/`](server/csharp/) |
| Python | **PyPI `1.1.4`** — loader + conformance + render + entity-model codegen + ObjectManager runtime shipped; schema migrations are TS-owned (ADR-0015) | [`docs/ports/python.md`](docs/ports/python.md) | [`server/python/`](server/python/) |
| TypeScript | **npm `1.2.0`** — the `@metaobjectsdev/*` packages | [`docs/ports/typescript.md`](docs/ports/typescript.md) | [`server/typescript/`](server/typescript/) · [`client/web/`](client/web/) |
| Java | **Maven Central `8.2.0`** (`com.metaobjects:*` — the JVM major is npm major + 7) — loader + OMDB + render + Maven plugin all shipped; full conformance green | [`docs/ports/java.md`](docs/ports/java.md) | [`server/java/`](server/java/) |
| Kotlin | **Maven Central `8.2.0`** — codegen tier on top of Java: 17 generators (entity, Exposed table, names, relations, repository, output-parser, output-prompt, render-helper, extractor, filter-allowlist, validator, Spring config, storedProc, Spring controller, requirement-tests, api-docs, report-export); 24 / 24 persistence-conformance | [`docs/ports/kotlin.md`](docs/ports/kotlin.md) | [`server/java/codegen-kotlin/`](server/java/codegen-kotlin/) · [`server/java/metadata-ktx/`](server/java/metadata-ktx/) |
| C# | **NuGet `1.2.0`** — loader + conformance + EF Core codegen + render engine + `dotnet meta` CLI all shipped | [`docs/ports/csharp.md`](docs/ports/csharp.md) | [`server/csharp/`](server/csharp/) |
| Python | **PyPI `1.2.0`** — loader + conformance + render + entity-model codegen + ObjectManager runtime shipped; schema migrations are TS-owned (ADR-0015) | [`docs/ports/python.md`](docs/ports/python.md) | [`server/python/`](server/python/) |

## Capability matrix

Expand Down
4 changes: 2 additions & 2 deletions docs/ports/csharp.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ objects you keep sourceless.

## Install

Published to [NuGet](https://www.nuget.org/packages/MetaObjects) at `1.1.4` — four
Published to [NuGet](https://www.nuget.org/packages/MetaObjects) at `1.2.0` — four
packages, version-locked to the C# port version: `MetaObjects` (loader), `MetaObjects.Codegen`,
`MetaObjects.Render` and the `MetaObjects.Cli` tool.

Expand All @@ -69,7 +69,7 @@ SQLite so it runs with nothing else installed; the same generated code runs on P
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MetaObjects.Codegen" Version="1.1.4" />
<PackageReference Include="MetaObjects.Codegen" Version="1.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.11" />
</ItemGroup>
<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions docs/ports/java.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,15 @@ requirement gate) and `eject -Dlist` (owned-copy status) are the diagnostics the

## Install

Set `${metaobjects.version}` to the current Maven Central release (`8.1.4`) — both
Set `${metaobjects.version}` to the current Maven Central release (`8.2.0`) — both
the dependency and plugin blocks below resolve it from one `<properties>` entry. The
artifacts and the generated records need Java 21, so set the compiler level here too (Maven
defaults to Java 8, where `mvn compile` fails with "records are not supported in -source 8"):

```xml
<!-- pom.xml -->
<properties>
<metaobjects.version>8.1.4</metaobjects.version>
<metaobjects.version>8.2.0</metaobjects.version>
<spring-boot.version>3.3.5</spring-boot.version>
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Expand Down
2 changes: 1 addition & 1 deletion docs/ports/kotlin.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ your own `<groupId>`, `<artifactId>` and `<version>`:
```xml
<!-- pom.xml -->
<properties>
<metaobjects.version>8.1.4</metaobjects.version>
<metaobjects.version>8.2.0</metaobjects.version>
<kotlin.version>2.0.21</kotlin.version>
<spring-boot.version>3.3.5</spring-boot.version>
<exposed.version>0.55.0</exposed.version>
Expand Down
10 changes: 7 additions & 3 deletions docs/ports/python.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ Requires **Python 3.11+**. Published to PyPI as **`metaobjects`**:
pip install metaobjects # or: uv add metaobjects
```

Generated models import Pydantic 2.8 or newer. `pip install "metaobjects[pydantic]"` installs
that minimum alongside the package.

> **On an older default interpreter?** Many systems (e.g. Ubuntu 22.04) still
> ship `python3` = 3.10, where `pip install metaobjects` fails with a confusing
> `ERROR: No matching distribution found for metaobjects` (the wheel is
Expand Down Expand Up @@ -256,12 +259,13 @@ When `verify --codegen` finds the committed output was generated with another ru
so rather than telling you to regenerate. (A field carrying an explicit `@column` is
unaffected either way.)

**Both `pydantic` and `fastapi` are consumer-installed, not transitive deps of
**`fastapi` and `pydantic` are consumer-installed, not transitive deps of
`metaobjects` itself** — the entity/router files this emits `import pydantic`
and `import fastapi`, so add them before importing the generated code:
and `import fastapi`, so add them before importing the generated code. The
`pydantic` extra installs the 2.8 minimum (see [Install](#install) above):

```bash
pip install pydantic fastapi
pip install "metaobjects[pydantic]" fastapi
```

The entity-model generator emits one Pydantic **`BaseModel`** per entity (not
Expand Down
2 changes: 1 addition & 1 deletion docs/ports/typescript.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# TypeScript port

The reference implementation. Published to npm at `1.1.4` as 14
The reference implementation. Published to npm at `1.2.0` as 14
`@metaobjectsdev/*` packages on the `latest` tag. Targets Node-compatible
runtimes: the generated code and the CLI run on stock Node (via `tsx` or after a `tsc`
build), and Bun is simply the fastest dev workflow in this repo.
Expand Down
16 changes: 8 additions & 8 deletions server/java/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# MetaObjects — Java

The Java port of the cross-language MetaObjects metadata standard. Published to Maven Central under `com.metaobjects:*` across 14 modules, at `8.1.0` for the 1.1.0 release (the Maven major is the npm major + 7). Apache 2.0.
The Java port of the cross-language MetaObjects metadata standard. Published to Maven Central under `com.metaobjects:*` across 14 modules, at `8.2.0` for the 1.2.0 release (the Maven major is the npm major + 7). Apache 2.0.

For the standard itself (metamodel, conformance corpora, ADRs) see the [repository-level docs](../../spec/) and the parent [README](../../README.md). This document is scoped to the Java implementation.

Expand All @@ -25,7 +25,7 @@ so they are maintained in one place rather than restated per port.

## Modules

All published to Maven Central under `com.metaobjects:*` (`8.1.0` for the 1.1.0 release):
All published to Maven Central under `com.metaobjects:*` (`8.2.0` for the 1.2.0 release):

| Module | Purpose |
|---|---|
Expand All @@ -52,7 +52,7 @@ The `archetype` and `examples` directories were removed in 7.1.0 (they had been
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-metadata</artifactId>
<version>8.1.0</version>
<version>8.2.0</version>
</dependency>
```

Expand All @@ -62,12 +62,12 @@ Spring REST stack (repository interface is consumer-implemented):
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-codegen-spring</artifactId>
<version>8.1.0</version>
<version>8.2.0</version>
</dependency>
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-core-spring</artifactId>
<version>8.1.0</version>
<version>8.2.0</version>
</dependency>
```

Expand All @@ -77,7 +77,7 @@ Maven plugin for `metaobjects:generate` / `metaobjects:verify` / `metaobjects:ed
<plugin>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-maven-plugin</artifactId>
<version>8.1.0</version>
<version>8.2.0</version>
<executions>
<execution>
<goals><goal>generate</goal></goals>
Expand All @@ -101,12 +101,12 @@ Kotlin entry point — adds the Kotlin facade and the KotlinPoet codegen pipelin
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-metadata-ktx</artifactId>
<version>8.1.0</version>
<version>8.2.0</version>
</dependency>
<dependency>
<groupId>com.metaobjects</groupId>
<artifactId>metaobjects-codegen-kotlin</artifactId>
<version>8.1.0</version>
<version>8.2.0</version>
</dependency>
```

Expand Down
3 changes: 3 additions & 0 deletions server/python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ mysql = ["PyMySQL>=1.1"]
# `.jinja` / `.j2` / `.jinja2` template is rendered or checked, so a Mustache-only project
# installs nothing extra.
jinja = ["jinja2>=3.1"]
# Pydantic 2.8 is the minimum for generated Python models (1.2.0). Generated code imports
# pydantic; the core loader does not, so it stays out of the base dependencies.
pydantic = ["pydantic>=2.8"]

[[tool.mypy.overrides]]
# PyMySQL ships no type information.
Expand Down
6 changes: 5 additions & 1 deletion server/python/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading