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
26 changes: 13 additions & 13 deletions data/ecosystem.toml
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
schema_version = 1
as_of = "2026-07-30"
source_repository = "hayatepy/.github"
source_commit = "0b44120a8e73d45fcfdfc1ce879faf5cd3452243"
compatibility_url = "https://github.com/hayatepy/.github/blob/0b44120a8e73d45fcfdfc1ce879faf5cd3452243/docs/COMPATIBILITY.md"
source_commit = "975173da2c1be720a4f902cde36ba3822b9b6e56"
compatibility_url = "https://github.com/hayatepy/.github/blob/975173da2c1be720a4f902cde36ba3822b9b6e56/docs/COMPATIBILITY.md"

[[packages]]
name = "hayate"
version = "0.15.1"
status = "Published alpha"
role = "Core framework and native runtime adapters"
role = "Core framework and native ASGI, Workers, and Lambda adapters"
use_when = "Build one Fetch-style Python application for ASGI, Workers, or Lambda."
repository = "https://github.com/hayatepy/hayate"
pypi = "https://pypi.org/project/hayate/"
source_commit = "9e27b0191c7fa9f920ad6fe5b126e190268afba2"
source_commit = "5592276315c9b75e736d3fc204b4900e15f8867a"

[[packages]]
name = "create-hayate"
version = "0.12.0"
version = "0.13.0"
status = "Published alpha"
role = "Composable project generator"
use_when = "Start with a tested API, Workers, MCP, auth, SQL, admin, or frontend composition."
role = "Composable applications with drift-checked first-party TypeScript clients"
use_when = "Start with a tested API, Workers, MCP, auth, SQL, admin, or frontend composition and keep its generated client in sync."
repository = "https://github.com/hayatepy/create-hayate"
pypi = "https://pypi.org/project/create-hayate/"
source_commit = "a1974325ce62a4bce5c6ceab27211675e07b0001"
source_commit = "9fdb98e5642ff047e04e24251be1c2747fc7572a"

[[packages]]
name = "hayate-auth"
Expand All @@ -46,13 +46,13 @@ source_commit = "175e6ed85a5e9af3e2fd9fcbf8886594bd2f6723"

[[packages]]
name = "hayate-openapi"
version = "0.7.0"
version = "0.8.1"
status = "Published alpha"
role = "OpenAPI 3.1, typed endpoints, Scalar, and TypeScript contracts"
use_when = "Make runtime validation, API documentation, and client types share one contract."
role = "OpenAPI 3.1, Scalar, and generated zero-runtime TypeScript clients"
use_when = "Make runtime validation, API documentation, client types, and a callable Fetch client share one contract."
repository = "https://github.com/hayatepy/hayate-openapi"
pypi = "https://pypi.org/project/hayate-openapi/"
source_commit = "5d274a7cc337c3336d5316421691779504e592f7"
source_commit = "2ed34215ec3dd5ebd0a0780f7b7903f0b3492a78"

[[packages]]
name = "hayate-sql"
Expand Down Expand Up @@ -99,4 +99,4 @@ status = "Reference application"
role = "Executable production integration"
use_when = "Review tested trust boundaries and deployment choices before shipping."
repository = "https://github.com/hayatepy/golden-app"
source_commit = "a424e1417baa2830518ce696bb96130f34c90259"
source_commit = "842fd2486f3d8bd5c284e44e4f8528b0441a574a"
17 changes: 15 additions & 2 deletions docs/ecosystem/compose.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,20 @@ uv add hayate hayate-openapi
```

Use explicit `Annotated` request sources and return types to drive runtime
binding, validation, JSON serialization, OpenAPI 3.1, and TypeScript types.
binding, validation, JSON serialization, OpenAPI 3.1, TypeScript types, and a
callable Fetch client.

## Typed client boundary

`hayate-openapi` emits `api-types.ts` and a status-discriminated
`api-client.ts` from the same OpenAPI 3.1.1 document. The generated client
uses the platform `fetch`, `URL`, `Headers`, `FormData`, and `Blob` APIs, so it
has no runtime npm dependency. Path, query, header, cookie, JSON,
URL-encoded, and multipart inputs stay tied to the published schema.

The [golden application executes the compiled client against a real ASGI
process](https://github.com/hayatepy/golden-app/blob/842fd2486f3d8bd5c284e44e4f8528b0441a574a/client/check-api-client.ts)
instead of treating generation or type-checking alone as interoperability.

## Server-rendered application

Expand All @@ -49,7 +62,7 @@ customer workflows.
them:

```sh
uvx --from create-hayate==0.12.0 create-hayate --help
uvx --from create-hayate==0.13.0 create-hayate --help
```

Use the [family map](index.md) for current release state and package links.
22 changes: 11 additions & 11 deletions docs/ecosystem/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,36 @@

Choose packages by the boundary your application needs. The core stays small; capabilities are explicit packages with their own release and evidence.

This snapshot is dated **2026-07-30** and is pinned to [`hayatepy/.github` at `0b44120a8e73`](https://github.com/hayatepy/.github/tree/0b44120a8e73d45fcfdfc1ce879faf5cd3452243). Every package is pre-1.0; check the compatibility snapshot before combining versions.
This snapshot is dated **2026-07-30** and is pinned to [`hayatepy/.github` at `975173da2c1b`](https://github.com/hayatepy/.github/tree/975173da2c1be720a4f902cde36ba3822b9b6e56). Every package is pre-1.0; check the compatibility snapshot before combining versions.

| Project | Version | Responsibility | Release state |
|---|---:|---|---|
| [`hayate`](https://github.com/hayatepy/hayate) | [`0.15.1`](https://pypi.org/project/hayate/) | Core framework and native runtime adapters | Published alpha |
| [`create-hayate`](https://github.com/hayatepy/create-hayate) | [`0.12.0`](https://pypi.org/project/create-hayate/) | Composable project generator | Published alpha |
| [`hayate`](https://github.com/hayatepy/hayate) | [`0.15.1`](https://pypi.org/project/hayate/) | Core framework and native ASGI, Workers, and Lambda adapters | Published alpha |
| [`create-hayate`](https://github.com/hayatepy/create-hayate) | [`0.13.0`](https://pypi.org/project/create-hayate/) | Composable applications with drift-checked first-party TypeScript clients | Published alpha |
| [`hayate-auth`](https://github.com/hayatepy/hayate-auth) | [`0.10.1`](https://pypi.org/project/hayate-auth/) | Sessions, API keys, OAuth, passkeys, and authorization server | Published alpha; independent audit pending |
| [`hayate-mcp`](https://github.com/hayatepy/hayate-mcp) | [`0.12.0`](https://pypi.org/project/hayate-mcp/) | MCP 2026-07-28 Streamable HTTP and discovery | Published alpha |
| [`hayate-openapi`](https://github.com/hayatepy/hayate-openapi) | [`0.7.0`](https://pypi.org/project/hayate-openapi/) | OpenAPI 3.1, typed endpoints, Scalar, and TypeScript contracts | Published alpha |
| [`hayate-openapi`](https://github.com/hayatepy/hayate-openapi) | [`0.8.1`](https://pypi.org/project/hayate-openapi/) | OpenAPI 3.1, Scalar, and generated zero-runtime TypeScript clients | Published alpha |
| [`hayate-sql`](https://github.com/hayatepy/hayate-sql) | [`0.1.1`](https://pypi.org/project/hayate-sql/) | Checked SQL contracts and typed query facades | Published alpha |
| [`hayate-fetch`](https://github.com/hayatepy/hayate-fetch) | [`0.1.3`](https://pypi.org/project/hayate-fetch/) | Portable outbound WHATWG-style fetch | Published alpha |
| [`hayate-admin`](https://github.com/hayatepy/hayate-admin) | `0.2.0` | Explicit checked-SQL operational administration | Pre-release source |
| [`hayate-htmx`](https://github.com/hayatepy/hayate-htmx) | `0.2.0` | Hypermedia, Jinja, htmx, fragments, and SSE | Pre-release source |
| [`golden-app`](https://github.com/hayatepy/golden-app) | `0.1.0` | Executable production integration | Reference application |

[Open the tested compatibility snapshot](https://github.com/hayatepy/.github/blob/0b44120a8e73d45fcfdfc1ce879faf5cd3452243/docs/COMPATIBILITY.md)
[Open the tested compatibility snapshot](https://github.com/hayatepy/.github/blob/975173da2c1be720a4f902cde36ba3822b9b6e56/docs/COMPATIBILITY.md)

## hayate

Build one Fetch-style Python application for ASGI, Workers, or Lambda.

**Current evidence:** Published alpha, version `0.15.1` · [source at `9e27b0191c7f`](https://github.com/hayatepy/hayate/tree/9e27b0191c7fa9f920ad6fe5b126e190268afba2)
**Current evidence:** Published alpha, version `0.15.1` · [source at `5592276315c9`](https://github.com/hayatepy/hayate/tree/5592276315c9b75e736d3fc204b4900e15f8867a)

[Repository](https://github.com/hayatepy/hayate) · [PyPI](https://pypi.org/project/hayate/)

## create-hayate

Start with a tested API, Workers, MCP, auth, SQL, admin, or frontend composition.
Start with a tested API, Workers, MCP, auth, SQL, admin, or frontend composition and keep its generated client in sync.

**Current evidence:** Published alpha, version `0.12.0` · [source at `a1974325ce62`](https://github.com/hayatepy/create-hayate/tree/a1974325ce62a4bce5c6ceab27211675e07b0001)
**Current evidence:** Published alpha, version `0.13.0` · [source at `9fdb98e5642f`](https://github.com/hayatepy/create-hayate/tree/9fdb98e5642ff047e04e24251be1c2747fc7572a)

[Repository](https://github.com/hayatepy/create-hayate) · [PyPI](https://pypi.org/project/create-hayate/)

Expand All @@ -55,9 +55,9 @@ Expose MCP tools on ASGI or native Cloudflare Workers.

## hayate-openapi

Make runtime validation, API documentation, and client types share one contract.
Make runtime validation, API documentation, client types, and a callable Fetch client share one contract.

**Current evidence:** Published alpha, version `0.7.0` · [source at `5d274a7cc337`](https://github.com/hayatepy/hayate-openapi/tree/5d274a7cc337c3336d5316421691779504e592f7)
**Current evidence:** Published alpha, version `0.8.1` · [source at `2ed34215ec3d`](https://github.com/hayatepy/hayate-openapi/tree/2ed34215ec3dd5ebd0a0780f7b7903f0b3492a78)

[Repository](https://github.com/hayatepy/hayate-openapi) · [PyPI](https://pypi.org/project/hayate-openapi/)

Expand Down Expand Up @@ -97,6 +97,6 @@ Build progressively enhanced server-rendered applications without a JavaScript S

Review tested trust boundaries and deployment choices before shipping.

**Current evidence:** Reference application, version `0.1.0` · [source at `a424e1417baa`](https://github.com/hayatepy/golden-app/tree/a424e1417baa2830518ce696bb96130f34c90259)
**Current evidence:** Reference application, version `0.1.0` · [source at `842fd2486f3d`](https://github.com/hayatepy/golden-app/tree/842fd2486f3d8bd5c284e44e4f8528b0441a574a)

[Repository](https://github.com/hayatepy/golden-app)
17 changes: 16 additions & 1 deletion docs/evidence/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ The current public snapshot is dated **2026-07-30**. All packages remain
pre-1.0, so compatible versions must be selected from evidence rather than
assumed from package names.

[Open the immutable compatibility snapshot](https://github.com/hayatepy/.github/blob/0b44120a8e73d45fcfdfc1ce879faf5cd3452243/docs/COMPATIBILITY.md){ .md-button .md-button--primary }
[Open the immutable compatibility snapshot](https://github.com/hayatepy/.github/blob/975173da2c1be720a4f902cde36ba3822b9b6e56/docs/COMPATIBILITY.md){ .md-button .md-button--primary }

## Golden runtime lock

Expand All @@ -19,5 +19,20 @@ assumed from package names.
| Workers flags | `python_workers` |
| Default Workers entrypoint | `WorkerEntrypoint` class |

## Released client evidence

- `hayate-openapi 0.8.1` generates the dependency-free callable TypeScript
client and validates it against a real Hayate ASGI process.
- `create-hayate 0.13.0` propagates the client, its types, and drift checks
into generated projects.
- The released generator passed all
[112 frontend compositions](https://github.com/hayatepy/create-hayate/actions/runs/30488857568).
The aggregate evidence JSON SHA-256 is
`fb3f4dc15e8d49bd1fdb6a658df70cc33e174a0f9342895f732dca8aa57a8bb9`.
- The [golden application main
run](https://github.com/hayatepy/golden-app/actions/runs/30488723553)
executes authenticated path, query, JSON, multipart, delete, and error
flows through the compiled client.

The generated [family map](../ecosystem/index.md) pins each listed project to
the source commit used for this site snapshot.
9 changes: 8 additions & 1 deletion docs/get-started/first-app.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Cloudflare Access, checked SQL, request correlation, and production middleware.
Install [uv](https://docs.astral.sh/uv/), then run:

```sh
uvx --refresh --from create-hayate==0.12.0 \
uvx --refresh --from create-hayate==0.13.0 \
create-hayate my-app --template workers --preset production
cd my-app
```
Expand All @@ -26,6 +26,10 @@ uv sync --locked
uv run pytest
uv run ruff check .
uv run python scripts/check_sql_contracts.py
sh scripts/export_api.sh
test -f openapi.json
test -f client/api-types.ts
test -f client/api-client.ts
```

Commit `uv.lock` and use `uv sync --locked` in CI. The generated `.dev.vars`
Expand All @@ -38,6 +42,9 @@ credentials.
- Uvicorn supplies local ASGI; SQLite supplies local data.
- Workerd supplies the native Workers adapter; D1 is a runtime binding.
- HTTP and MCP share request identity and checked storage.
- `client/api-types.ts` and the callable `client/api-client.ts` come from the
same OpenAPI document. The client uses platform Fetch APIs and adds no
runtime package dependency.
- The default Workers export is a `WorkerEntrypoint` class, preserving named
RPC and class handlers such as `scheduled`.

Expand Down
5 changes: 3 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,15 @@ description: One Fetch-style Python application across ASGI, Cloudflare Workers,
<p>
The published baseline records startup, dependencies, payload, throughput,
and a shared HTTP contract. Compatibility is backed by real ASGI,
Workerd/D1, and downstream package runs.
Workerd/D1, downstream package runs, and a generated zero-runtime
TypeScript client executed against real ASGI.
</p>
<a class="md-button" href="evidence/">Read the evidence</a>
</section>

<section class="hayate-final">
<p class="hayate-kicker">START FROM A TESTED COMPOSITION</p>
<h2>From empty directory to passing production checks.</h2>
<p><code>uvx --from create-hayate==0.12.0 create-hayate my-app --template workers --preset production</code></p>
<p><code>uvx --from create-hayate==0.13.0 create-hayate my-app --template workers --preset production</code></p>
<a class="md-button md-button--primary" href="get-started/first-app/">Follow the verified path</a>
</section>
Loading