Skip to content

Commit c17d95d

Browse files
committed
docs: launch unified Hayate documentation
0 parents  commit c17d95d

37 files changed

Lines changed: 3834 additions & 0 deletions

.github/dependabot.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: uv
4+
directory: /
5+
schedule:
6+
interval: weekly
7+
groups:
8+
documentation-dependencies:
9+
patterns: ["*"]
10+
11+
- package-ecosystem: github-actions
12+
directory: /
13+
schedule:
14+
interval: weekly
15+
groups:
16+
workflow-actions:
17+
patterns: ["*"]
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
name: Documentation
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
12+
concurrency:
13+
group: docs-${{ github.ref }}
14+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
15+
16+
jobs:
17+
build:
18+
runs-on: ubuntu-latest
19+
timeout-minutes: 10
20+
steps:
21+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
22+
with:
23+
persist-credentials: false
24+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
25+
with:
26+
enable-cache: false
27+
python-version: "3.12"
28+
- run: uv sync --locked
29+
- run: uv run ruff check scripts tests
30+
- run: uv run ruff format --check scripts tests
31+
- run: uv run pytest -q
32+
- run: uv run python scripts/export_ecosystem.py --check
33+
- run: uv run zensical build --clean --strict
34+
- run: uv run python scripts/write_headers.py site
35+
- run: uv run python scripts/check_site.py site
36+
- uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0
37+
with:
38+
args: >-
39+
--verbose
40+
--no-progress
41+
--accept 200,206,429
42+
--root-dir ./site
43+
'./site/**/*.html'
44+
fail: true
45+
lycheeVersion: v0.24.2
46+
token: ${{ secrets.GITHUB_TOKEN }}
47+
48+
audit-dependencies:
49+
runs-on: ubuntu-latest
50+
timeout-minutes: 10
51+
steps:
52+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
53+
with:
54+
persist-credentials: false
55+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
56+
with:
57+
python-version: "3.12"
58+
- run: uv sync --locked
59+
- run: uv run --with pip-audit==2.10.0 pip-audit
60+
61+
lint-workflows:
62+
runs-on: ubuntu-latest
63+
timeout-minutes: 5
64+
steps:
65+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
66+
with:
67+
persist-credentials: false
68+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
69+
- run: uvx zizmor==1.28.0 .github/workflows
70+
env:
71+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
72+
73+
deploy:
74+
if: github.event_name != 'pull_request'
75+
needs: [build, audit-dependencies, lint-workflows]
76+
runs-on: ubuntu-latest
77+
timeout-minutes: 10
78+
env:
79+
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
80+
environment:
81+
name: cloudflare-production
82+
url: ${{ steps.deploy.outputs.deployment-url }}
83+
steps:
84+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
85+
with:
86+
persist-credentials: false
87+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
88+
with:
89+
enable-cache: false
90+
python-version: "3.12"
91+
- run: uv sync --locked
92+
- run: uv run zensical build --clean --strict
93+
- run: uv run python scripts/write_headers.py site
94+
- id: deploy
95+
if: env.CLOUDFLARE_API_TOKEN != ''
96+
uses: cloudflare/wrangler-action@ebbaa1584979971c8614a24965b4405ff95890e0 # v4.0.0
97+
with:
98+
apiToken: ${{ env.CLOUDFLARE_API_TOKEN }}
99+
accountId: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
100+
wranglerVersion: "4.114.0"
101+
- if: env.CLOUDFLARE_API_TOKEN == ''
102+
run: >-
103+
echo "::warning::Cloudflare deploy skipped because
104+
CLOUDFLARE_API_TOKEN is not configured"

.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.venv/
2+
.pytest_cache/
3+
.ruff_cache/
4+
__pycache__/
5+
*.py[cod]
6+
site/
7+
.cache/
8+
lychee/
9+
node_modules/
10+
.DS_Store
11+
.wrangler/

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Yusuke Hayashi and the Hayate contributors
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Hayate documentation
2+
3+
Unified documentation and the public home for the
4+
[Hayate Python ecosystem](https://github.com/hayatepy), built with
5+
[Zensical](https://zensical.org/) and deployed as
6+
[Cloudflare Workers Static Assets](https://developers.cloudflare.com/workers/static-assets/).
7+
8+
Production: <https://hayate-docs.yusuke8h.workers.dev/>
9+
10+
## Work locally
11+
12+
```sh
13+
uv sync --locked
14+
npm ci
15+
uv run python scripts/export_ecosystem.py --check
16+
uv run zensical serve
17+
```
18+
19+
Run the complete local gate before opening a pull request:
20+
21+
```sh
22+
uv run ruff check scripts tests
23+
uv run ruff format --check scripts tests
24+
uv run pytest -q
25+
uv run zensical build --clean --strict
26+
uv run python scripts/write_headers.py site
27+
uv run python scripts/check_site.py site
28+
```
29+
30+
Preview the exact Cloudflare runtime locally:
31+
32+
```sh
33+
npm run preview
34+
```
35+
36+
Deploy with the account authenticated by Wrangler:
37+
38+
```sh
39+
npm run deploy
40+
```
41+
42+
The central site owns cross-package onboarding, runtime selection, ecosystem
43+
navigation, and evidence interpretation. Package-specific API details remain
44+
next to their implementation repositories.

data/ecosystem.toml

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
schema_version = 1
2+
as_of = "2026-07-28"
3+
source_repository = "hayatepy/.github"
4+
source_commit = "4a835741aed9790fc9a9de9c007860187cbc4881"
5+
compatibility_url = "https://github.com/hayatepy/.github/blob/4a835741aed9790fc9a9de9c007860187cbc4881/docs/COMPATIBILITY.md"
6+
7+
[[packages]]
8+
name = "hayate"
9+
version = "0.15.1"
10+
status = "Published alpha"
11+
role = "Core framework and native runtime adapters"
12+
use_when = "Build one Fetch-style Python application for ASGI, Workers, or Lambda."
13+
repository = "https://github.com/hayatepy/hayate"
14+
pypi = "https://pypi.org/project/hayate/"
15+
source_commit = "9e27b0191c7fa9f920ad6fe5b126e190268afba2"
16+
17+
[[packages]]
18+
name = "create-hayate"
19+
version = "0.11.1"
20+
status = "Published alpha"
21+
role = "Composable project generator"
22+
use_when = "Start with a tested API, Workers, MCP, auth, SQL, admin, or frontend composition."
23+
repository = "https://github.com/hayatepy/create-hayate"
24+
pypi = "https://pypi.org/project/create-hayate/"
25+
source_commit = "c8543a3487d2ff2e534e8f1e7a6b954e2704a6ce"
26+
27+
[[packages]]
28+
name = "hayate-auth"
29+
version = "0.10.1"
30+
status = "Published alpha; independent audit pending"
31+
role = "Sessions, API keys, OAuth, passkeys, and authorization server"
32+
use_when = "Add first-party identity or protect an HTTP or MCP resource server."
33+
repository = "https://github.com/hayatepy/hayate-auth"
34+
pypi = "https://pypi.org/project/hayate-auth/"
35+
source_commit = "eff705c335d0903084988edea5b783be258f42e8"
36+
37+
[[packages]]
38+
name = "hayate-mcp"
39+
version = "0.11.1"
40+
status = "Published alpha"
41+
role = "MCP 2025-11-25 Streamable HTTP"
42+
use_when = "Expose MCP tools on ASGI or native Cloudflare Workers."
43+
repository = "https://github.com/hayatepy/hayate-mcp"
44+
pypi = "https://pypi.org/project/hayate-mcp/"
45+
source_commit = "c1f42c55d47a68fc935460e4a8c07e262a1a7e56"
46+
47+
[[packages]]
48+
name = "hayate-openapi"
49+
version = "0.7.0"
50+
status = "Published alpha"
51+
role = "OpenAPI 3.1, typed endpoints, Scalar, and TypeScript contracts"
52+
use_when = "Make runtime validation, API documentation, and client types share one contract."
53+
repository = "https://github.com/hayatepy/hayate-openapi"
54+
pypi = "https://pypi.org/project/hayate-openapi/"
55+
source_commit = "5d274a7cc337c3336d5316421691779504e592f7"
56+
57+
[[packages]]
58+
name = "hayate-sql"
59+
version = "0.1.1"
60+
status = "Published alpha"
61+
role = "Checked SQL contracts and typed query facades"
62+
use_when = "Keep native SQLite, D1, or PostgreSQL while checking migrations and result shapes."
63+
repository = "https://github.com/hayatepy/hayate-sql"
64+
pypi = "https://pypi.org/project/hayate-sql/"
65+
source_commit = "583591cb5d0a8b4ae75395117bc7ffc2c2bd29b9"
66+
67+
[[packages]]
68+
name = "hayate-fetch"
69+
version = "0.1.3"
70+
status = "Published alpha"
71+
role = "Portable outbound WHATWG-style fetch"
72+
use_when = "Use Hayate Request and Response types for outbound HTTP on CPython and Workers."
73+
repository = "https://github.com/hayatepy/hayate-fetch"
74+
pypi = "https://pypi.org/project/hayate-fetch/"
75+
source_commit = "e38fd7f862a07c1de3af81fa39e9db2a38fd6cb4"
76+
77+
[[packages]]
78+
name = "hayate-admin"
79+
version = "0.2.0"
80+
status = "Pre-release source"
81+
role = "Explicit checked-SQL operational administration"
82+
use_when = "Give trusted operators bounded CRUD, relationships, audit history, and exports."
83+
repository = "https://github.com/hayatepy/hayate-admin"
84+
source_commit = "aedd4c47cbbe7c7d26cdf39b6c65fa201996369d"
85+
86+
[[packages]]
87+
name = "hayate-htmx"
88+
version = "0.2.0"
89+
status = "Pre-release source"
90+
role = "Hypermedia, Jinja, htmx, fragments, and SSE"
91+
use_when = "Build progressively enhanced server-rendered applications without a JavaScript SPA."
92+
repository = "https://github.com/hayatepy/hayate-htmx"
93+
source_commit = "c133900998c487a44d40a103c52f2d469047deda"
94+
95+
[[packages]]
96+
name = "golden-app"
97+
version = "0.1.0"
98+
status = "Reference application"
99+
role = "Executable production integration"
100+
use_when = "Review tested trust boundaries and deployment choices before shipping."
101+
repository = "https://github.com/hayatepy/golden-app"
102+
source_commit = "bc07ff927ce5ca3533f0a006b9000098b9df6e25"

docs/404.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
hide:
3+
- navigation
4+
- toc
5+
title: Page not found
6+
description: The requested Hayate documentation page does not exist.
7+
---
8+
9+
# The page moved faster than the link
10+
11+
The requested documentation page does not exist.
12+
13+
[Return to the Hayate documentation](index.md){ .md-button .md-button--primary }
14+
15+
[Browse the ecosystem](ecosystem/index.md){ .md-button }

docs/assets/images/favicon.png

43.4 KB
Loading

docs/assets/images/hayate-mark.png

605 KB
Loading

0 commit comments

Comments
 (0)