edgepress 2026.10.12 → 2026.10.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -5
- package/config.yml +171 -171
- package/content/assets/edgepress/brand/sources/export-manifest.json +181 -181
- package/content/assets/edgepress-markdown-guide.svg +21 -21
- package/content/guides/markdown-media.md +38 -0
- package/content/guides/product-demos.md +30 -30
- package/content/pages/deployment/en.json +1 -1
- package/content/posts/2026-09-24-edgepress-release-2026-9-1/en.md +1 -1
- package/content/posts/2026-09-24-edgepress-release-2026-9-1/zh-cn.md +1 -1
- package/languages/base/en.json +98 -98
- package/languages/packs/zh-CN.json +98 -98
- package/package.json +93 -90
- package/src/assets.js +187 -186
- package/src/browser-audit.js +158 -158
- package/src/build.js +293 -291
- package/src/cli.js +399 -364
- package/src/content.js +233 -233
- package/src/data-saver.js +3 -3
- package/src/generators.js +414 -420
- package/src/i18n.js +86 -86
- package/src/markdown.js +195 -160
- package/src/page-block-catalog.json +345 -0
- package/src/page-check.js +1 -1
- package/src/page-editor-client.js +396 -0
- package/src/page-editor-extension.js +86 -0
- package/src/page-editor.css +1 -0
- package/src/page-editor.html +40 -0
- package/src/page-editor.js +178 -0
- package/src/page-scaffold.js +70 -0
- package/src/plugin-api.js +77 -77
- package/src/report-visuals.js +642 -642
- package/src/revision-cards.js +30 -30
- package/src/rss.js +100 -0
- package/src/theme.js +4 -4
- package/src/video-metadata.js +36 -0
- package/static/edgepress/fonts/faces.css +2217 -2217
- package/static/edgepress/media-viewer.js +67 -10
- package/static/edgepress/project-demo.js +83 -83
- package/static/edgepress/search.js +84 -84
- package/tests/assets-runtime.test.mjs +26 -26
- package/tests/audit.test.mjs +142 -142
- package/tests/brand-regression.test.mjs +110 -110
- package/tests/document-package.test.mjs +4 -9
- package/tests/embed-syntax.test.mjs +68 -68
- package/tests/image-viewer.test.mjs +36 -36
- package/tests/markdown-media.test.mjs +119 -0
- package/tests/oembed-layout.test.mjs +13 -4
- package/tests/page-editor.test.mjs +106 -0
- package/tests/page-scaffold.test.mjs +125 -0
- package/tests/project-demo.test.mjs +73 -73
- package/tests/release-version.test.mjs +28 -0
- package/tests/rss.test.mjs +54 -0
- package/tests/video-metadata.test.mjs +28 -0
- package/tests/writing.test.mjs +83 -83
- package/themes/atelier/assets/style.css +340 -340
- package/themes/default/assets/style.css +371 -371
- package/themes/default/layouts/partials/head.html +1 -1
- package/themes/folio/assets/style.css +515 -515
- package/themes/folio/theme.json +5 -5
- package/themes/signal/assets/style.css +332 -332
- package/tools/README.md +10 -10
- package/tools/assets/generate-brand-assets.py +160 -160
- package/tools/assets/video-preview.mjs +15 -0
- package/tools/recordings/demo-workbench.mjs +53 -53
- package/tools/recordings/desktop-recording.mjs +70 -70
- package/tools/recordings/vm-desktop.mjs +59 -59
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ EdgePress automatically registers page-specific native WebMCP tools for reading
|
|
|
8
8
|
|
|
9
9
|
Document previews use the browser-only `document-viewer` package: PDF, DOC/DOCX, PPT/PPTX and XLS/XLSX render inside the page automatically without moving keyboard focus. Articles accept `!document[Report](/documents/report.docx)`; Pages support `type: document`. Remote direct-file URLs require a configured consent service and CORS. See the theme-development guide.
|
|
10
10
|
|
|
11
|
-
The dependency is pinned to a full commit in the public [document-viewer repository](https://github.com/jsw-teams/document-viewer). Cloud `npm
|
|
11
|
+
The dependency is pinned to a full commit in the public [document-viewer repository](https://github.com/jsw-teams/document-viewer). Cloud `npm install` needs no sibling checkout, bundled source snapshot or Office conversion software. Publish and validate document-viewer first, then update the dependency URL and lockfile here. Sites can consume the resulting pinned EdgePress commit without copying either implementation.
|
|
12
12
|
|
|
13
13
|
[](https://deploy.workers.cloudflare.com/?url=https://github.com/jsw-teams/edgepress)
|
|
14
14
|
[](https://edgeone.ai/pages/new?repository-url=https%3A%2F%2Fgithub.com%2Fjsw-teams%2Fedgepress&build-command=npm%20run%20build&install-command=npm%20ci&output-directory=dist)
|
|
@@ -36,7 +36,7 @@ Buttons open repository setup. Cloudflare, Vercel, Netlify and EdgeOne support r
|
|
|
36
36
|
|
|
37
37
|
## Quick start
|
|
38
38
|
|
|
39
|
-
The commands below install the published npm release and initialize a new project directory. For the latest GitHub changes, use the deployment buttons or clone this repository, then run `npm
|
|
39
|
+
The commands below install the published npm release and initialize a new project directory. For the latest GitHub changes, use the deployment buttons or clone this repository, then run `npm install` and `npm run dev` from its root:
|
|
40
40
|
|
|
41
41
|
mkdir my-edgepress-site
|
|
42
42
|
cd my-edgepress-site
|
|
@@ -45,10 +45,37 @@ The commands below install the published npm release and initialize a new projec
|
|
|
45
45
|
npm install
|
|
46
46
|
npm run dev
|
|
47
47
|
|
|
48
|
-
Use Node.js 22.12 or newer. Set the real site URL and operator contact in config.yml before publishing. Deploy with edgepress deploy. When developing EdgePress itself, use `npm
|
|
48
|
+
Use Node.js 22.12 or newer. Set the real site URL and operator contact in config.yml before publishing. Deploy with edgepress deploy. When developing EdgePress itself, use `npm install`, then `npm link` to expose the local CLI.
|
|
49
49
|
|
|
50
50
|
Run `edgepress init` in a new project directory to scaffold a site pinned to the installed EdgePress release. The initializer keeps the existing package name and scripts.
|
|
51
51
|
|
|
52
|
+
## Maintainer npm and GitHub releases
|
|
53
|
+
|
|
54
|
+
Releases use **year.month.number of updates in that month**, not the calendar day. For example, `2026.10.12` is the twelfth update in October 2026; `2026.10.13` follows it, and November starts at `2026.11.1`. The release workflow uses **UTC** for the month boundary and checks `package.json`, existing `vYYYY.M.N` tags and published npm versions to avoid reusing a version.
|
|
55
|
+
|
|
56
|
+
Once the npm package owner has configured **Trusted Publishing** at [npmjs.com](https://www.npmjs.com/package/edgepress/access), choose GitHub Actions with owner `jsw-teams`, repository `edgepress`, workflow filename **`publish.yml`**, and allow **`npm publish`** (not only staging). No environment name is used. This is a one-time npm-side setup; no long-lived `NPM_TOKEN` is required. Restrict traditional publish tokens after confirming the first successful trusted publish.
|
|
57
|
+
|
|
58
|
+
To publish new source, a repository maintainer opens **Actions → Publish npm and GitHub Release → Run workflow** on `main`. The manual-only job installs Node 22 and npm 11, determines the next monthly update number, updates both package manifests, audits dependencies, runs the full browser test suite, builds the project and packs the source. Only after all checks pass does it push a non-force release commit and tag, publish that exact archive to npm with provenance, and create a GitHub Release containing the same `.tgz` and SHA-256 checksum. Ordinary pushes and PRs cannot trigger a publish.
|
|
59
|
+
|
|
60
|
+
**Recovery:** If a run fails *after* pushing its version tag, do not launch a new release blindly: check whether the tag, npm version or GitHub Release already exists and reconcile the incomplete publish first. npm versions cannot be overwritten. Protected branches must explicitly permit the GitHub Actions bot to create the release commit/tag or use a maintainer-approved release branch process.
|
|
61
|
+
|
|
62
|
+
## Visual Pages editor / 可视化页面编辑器
|
|
63
|
+
|
|
64
|
+
Run `npm run editor` (or `npx edgepress editor` in an initialized site), then open **http://127.0.0.1:4178/**. The editor now supports **+ 新建页面**: choose a title, optional URL slug and configured language; the new JSON Page opens immediately in the visual canvas. Existing Pages can still be selected, arranged into 1–4 columns and edited without touching JSON.
|
|
65
|
+
|
|
66
|
+
从命令行也可以新建页面:
|
|
67
|
+
|
|
68
|
+
```sh
|
|
69
|
+
edgepress new pages "About our project" --lang en --slug about
|
|
70
|
+
edgepress new pages "关于我们" --lang zh-cn --slug about
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The shortcut `edgepress new page` is also accepted. By default, the CLI creates `content/pages/<slug>/<locale>.json` in the site's default language. Existing pages, legacy `.md` equivalents, and symlinked directories cannot be overwritten. The generated `$schema` reference points to the installed framework (or the local development schema). Run `npm run editor` to continue editing, and `npm run build` to validate the actual generated site.
|
|
74
|
+
|
|
75
|
+
**Shared block catalog:** `src/page-block-catalog.json` ships with the npm package and defines starter templates for **all 30 supported Pages block types**. This includes site-reusable `link-directory`, `media-text`, `feature-grid`, `privacy-controller`, `document`, `media-viewer` and consent-controlled integrations used by other frontends. Reuse the public EdgePress catalog from site projects (including private ones); do not copy private pages or integrate site-specific services into the framework. Third-party service, CAPTCHA, ad and local-tool blocks are available as templates but **require site configuration and valid resource URLs** before a build; inserting the template does not activate a service.
|
|
76
|
+
|
|
77
|
+
The editor runs **only on 127.0.0.1**, never on deployed static sites. It enforces origin checks, path restrictions, revision-conflict detection and atomic saves. Unrecognized block properties are kept; complex nested fields can still be edited in the inspector's advanced JSON input. The canvas previews structure, not theme-perfect output. Articles remain Markdown.
|
|
78
|
+
|
|
52
79
|
## External link prompts
|
|
53
80
|
|
|
54
81
|
The optional local prompt shows the complete destination URL (including path, query and fragment) once, with no duplicate hostname, and lets the visitor return or continue. It makes no request to the destination before confirmation. Configure exact origins, not wildcard domains:
|
|
@@ -173,7 +200,7 @@ Project guides are published from content/pages/: project introduction, quick st
|
|
|
173
200
|
|
|
174
201
|
Version 2026.10.1 starts the October 2026 release series. Read the [October release notes](content/posts/2026-10-01-edgepress-release-2026-10-1/). The September updates are recorded in the [request 1 notes](content/posts/2026-09-24-edgepress-release-2026-9-1/), [request 2 notes](content/posts/2026-09-25-edgepress-release-2026-9-2/), [request 3 notes](content/posts/2026-09-25-edgepress-release-2026-9-3/), [request 4 notes](content/posts/2026-09-25-edgepress-release-2026-9-4/), [request 5 notes](content/posts/2026-09-25-edgepress-release-2026-9-5/), [request 6 notes](content/posts/2026-09-25-edgepress-release-2026-9-6/), [request 7 notes](content/posts/2026-09-26-edgepress-release-2026-9-7/), [request 8 notes](content/posts/2026-09-26-edgepress-release-2026-9-8/), [request 9 notes](content/posts/2026-09-26-edgepress-release-2026-9-9/), and [request 10 notes](content/posts/2026-09-27-edgepress-release-2026-9-10/).
|
|
175
202
|
|
|
176
|
-
This release publishes page media from content/assets
|
|
203
|
+
This release publishes page media from content/assets/ and updates Wrangler to 4.144.0. GitHub Actions retains only scheduled and lockfile-change dependency security audits. Optional services remain disabled until a visitor makes an explicit choice.
|
|
177
204
|
|
|
178
205
|
## Journal categories, navigation, and author profiles
|
|
179
206
|
|
|
@@ -227,7 +254,7 @@ Multiple post lists on the same page share a displayed-article set: an article a
|
|
|
227
254
|
|
|
228
255
|
## Static platform deployment
|
|
229
256
|
|
|
230
|
-
Run npm run deploy:cloudflare, npm run deploy:vercel, npm run deploy:netlify, npm run deploy:edgeone -- -n my-site, or npm run deploy:esa -- --name my-site. Platform authentication is required.
|
|
257
|
+
Run npm run deploy:cloudflare, npm run deploy:vercel, npm run deploy:netlify, npm run deploy:edgeone -- -n my-site, or npm run deploy:esa -- --name my-site. Platform authentication is required. Deployments run locally; GitHub Actions is limited to dependency security audits.
|
|
231
258
|
|
|
232
259
|
|
|
233
260
|
All platforms build dist/. CSS and JS are fingerprinted, with one-year immutable cache policies for Cloudflare, Vercel, Netlify and EdgeOne. ESA uses the same assets; set its browser and edge cache rules for hashed CSS/JS while leaving HTML short-lived. See the [deployment guide](content/pages/deployment/en.json) and [ESA build configuration](https://help.aliyun.com/en/edge-security-acceleration/esa/user-guide/build-pages).
|
|
@@ -261,3 +288,5 @@ Real static website output demonstrates what the builder produces. Product recor
|
|
|
261
288
|
Project recordings use manual play/pause and a seekable progress bar, with theme colors and keyboard support. The reproducible CLI/editor workbench lives in [tools/recordings/demo-workbench.mjs](tools/recordings/demo-workbench.mjs); see [the recording guide](content/guides/product-demos.md). Built-in navigation and page icons come from the pinned Lucide 1.52 library, bundled locally with its license.
|
|
262
289
|
|
|
263
290
|
Development files: tests/ contains regression tests and fixtures; tools/assets/ maintains source assets; tools/recordings/ contains desktop capture workflows; tools/verification/ contains browser audits; tools/reports/ holds generated evidence. Run npm test and npm run check after changes.
|
|
291
|
+
|
|
292
|
+
Dependency maintenance uses compatible release ranges without retained lockfiles. The media and document viewers follow Git semver release ranges; audits resolve fresh dependency snapshots outside the checkout and remove them after use. Dependabot checks daily, including security updates; changed dependencies must pass the full browser suite before release.
|
package/config.yml
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Site configuration (site, theme, privacy, optional consent services).
|
|
2
2
|
# Build paths and enabled locales belong to edgepress.config.mjs.
|
|
3
|
-
site:
|
|
4
|
-
timeZone: Asia/Taipei
|
|
5
|
-
title: EdgePress
|
|
6
|
-
description: A static website builder for Cloudflare Workers with editable pages, Markdown posts, themes, and plugins.
|
|
7
|
-
url: https://example.org
|
|
3
|
+
site:
|
|
4
|
+
timeZone: Asia/Taipei
|
|
5
|
+
title: EdgePress
|
|
6
|
+
description: A static website builder for Cloudflare Workers with editable pages, Markdown posts, themes, and plugins.
|
|
7
|
+
url: https://example.org
|
|
8
8
|
language: en
|
|
9
9
|
dataSaver: # site (optional text view; requires the theme dataSaver assets)
|
|
10
10
|
enabled: false
|
|
@@ -13,169 +13,169 @@ site:
|
|
|
13
13
|
detectSlowConnection: false
|
|
14
14
|
respectBrowserPreference: false
|
|
15
15
|
promptAfterMs: 5000
|
|
16
|
-
head:
|
|
17
|
-
titleSuffix: ""
|
|
18
|
-
titleSeparator: " · "
|
|
19
|
-
header:
|
|
20
|
-
showBrand: true
|
|
21
|
-
brandLabel: ""
|
|
22
|
-
components:
|
|
23
|
-
header: true
|
|
24
|
-
primaryNavigation: true
|
|
25
|
-
languageNavigation: true
|
|
26
|
-
footer: true
|
|
27
|
-
footerNavigation: true
|
|
28
|
-
navigation:
|
|
29
|
-
- key: home
|
|
30
|
-
url: "@home"
|
|
31
|
-
labels:
|
|
32
|
-
en: Home
|
|
33
|
-
zh-CN: 首页
|
|
34
|
-
- key: guides
|
|
35
|
-
url: /project-introduction/
|
|
36
|
-
labels:
|
|
37
|
-
en: Guides
|
|
38
|
-
zh-CN: 项目指南
|
|
39
|
-
- key: quick-start
|
|
40
|
-
url: /quick-start/
|
|
41
|
-
labels:
|
|
42
|
-
en: Quick start
|
|
43
|
-
zh-CN: 快速入门
|
|
44
|
-
- key: posts
|
|
45
|
-
url: "@archives"
|
|
46
|
-
labels:
|
|
47
|
-
en: Posts
|
|
48
|
-
zh-CN: 文章
|
|
49
|
-
- key: search
|
|
50
|
-
url: "@search"
|
|
51
|
-
labels:
|
|
52
|
-
en: Search
|
|
53
|
-
zh-CN: 搜索
|
|
54
|
-
footerNavigation:
|
|
55
|
-
- key: privacy
|
|
56
|
-
url: /privacy-policy/
|
|
57
|
-
labels:
|
|
58
|
-
en: Privacy policy
|
|
59
|
-
zh-CN: 隐私政策
|
|
60
|
-
- key: feed
|
|
61
|
-
url: "@feed"
|
|
62
|
-
labels:
|
|
63
|
-
en: Atom feed
|
|
64
|
-
zh-CN: Atom 订阅
|
|
65
|
-
footer: ""
|
|
66
|
-
author:
|
|
67
|
-
name: toewpq
|
|
68
|
-
avatar: /edgepress/brand/avatar.png
|
|
69
|
-
seo:
|
|
70
|
-
author: toewpq
|
|
71
|
-
keywords:
|
|
72
|
-
- Markdown website builder
|
|
73
|
-
- Cloudflare Workers
|
|
74
|
-
- static site generator
|
|
75
|
-
image: https://example.org/edgepress/brand/og-image.png
|
|
76
|
-
robots: index,follow
|
|
77
|
-
agentSeo:
|
|
78
|
-
enabled: true
|
|
79
|
-
summary: A static website builder for Cloudflare Workers, with row-based editable pages, Markdown posts,
|
|
80
|
-
themes, plugins, and consent-gated integrations.
|
|
81
|
-
topics:
|
|
82
|
-
- Markdown website builder
|
|
83
|
-
- Cloudflare Workers
|
|
84
|
-
- composable page blocks
|
|
85
|
-
- plugin development
|
|
86
|
-
llmsTxt: true
|
|
87
|
-
agentCrawlers:
|
|
88
|
-
- GPTBot
|
|
89
|
-
- ClaudeBot
|
|
90
|
-
- PerplexityBot
|
|
91
|
-
privacy:
|
|
92
|
-
controller:
|
|
93
|
-
name: toewpq
|
|
94
|
-
contact: toewpq@gmail.com
|
|
95
|
-
policyUrl: /privacy-policy/
|
|
96
|
-
plugins:
|
|
97
|
-
consent:
|
|
98
|
-
enabled: true
|
|
99
|
-
proposedDate: 2026-09-26
|
|
100
|
-
effectiveDate: 2026-09-26
|
|
101
|
-
expiresDays: 180
|
|
102
|
-
services:
|
|
103
|
-
- id: cloudflare-web-analytics
|
|
104
|
-
provider: cloudflare-web-analytics
|
|
105
|
-
name:
|
|
106
|
-
en: Cloudflare Web Analytics
|
|
107
|
-
zh-CN: Cloudflare 网站分析
|
|
108
|
-
purpose:
|
|
109
|
-
en: Measure visits and page performance to improve this site, only after you opt in.
|
|
110
|
-
zh-CN: 在你同意后统计访问与页面性能,用于改进本站。
|
|
111
|
-
dataCategories:
|
|
112
|
-
en: Performance timing and page-view metrics; dimensions can include path, referrer, device, browser,
|
|
113
|
-
operating system, and country. Cloudflare receives the beacon request's source IP and says it
|
|
114
|
-
discards it at the nearest data center without storing it in core databases or logs.
|
|
115
|
-
zh-CN: 性能计时和页面浏览指标,维度可能包括页面路径、来源页、设备、浏览器、操作系统和国家或地区。Cloudflare 会在信标请求中接收来源 IP,并表示会在最近的数据中心将其丢弃,不保存到核心数据库或日志中。
|
|
116
|
-
recipient:
|
|
117
|
-
en: Cloudflare, Inc.
|
|
118
|
-
zh-CN: Cloudflare, Inc.
|
|
119
|
-
retention:
|
|
120
|
-
en: Unsampled beacon data is kept for 7 days, then aggregated to about 10% for long-term storage. Dashboard
|
|
121
|
-
history is available for 6 months.
|
|
122
|
-
zh-CN: 未采样的信标数据保留 7 天,之后会汇总为约 10% 的长期数据。仪表板可查看最近 6 个月的历史记录。
|
|
123
|
-
privacyUrl: https://developers.cloudflare.com/speed/observatory/rum-beacon/
|
|
124
|
-
token: 8347d72ba9f84e6783bf441e7832a80e
|
|
125
|
-
- id: youtube
|
|
126
|
-
provider: oembed
|
|
127
|
-
enabled: true
|
|
128
|
-
name: YouTube
|
|
129
|
-
purpose:
|
|
130
|
-
en: With your permission, load YouTube media and its player on request.
|
|
131
|
-
zh-CN: 在你同意后,按你的请求加载 YouTube 分享内容及播放器。
|
|
132
|
-
dataCategories:
|
|
133
|
-
en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
|
|
134
|
-
zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
|
|
135
|
-
recipient: YouTube
|
|
136
|
-
retention:
|
|
137
|
-
en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
|
|
138
|
-
zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
|
|
139
|
-
privacyUrl: https://policies.google.com/privacy
|
|
140
|
-
backendUrl: https://www.youtube.com
|
|
141
|
-
oembedEndpoint: https://www.youtube.com/oembed
|
|
142
|
-
sourceOrigins:
|
|
143
|
-
- https://www.youtube.com
|
|
144
|
-
- https://youtu.be
|
|
145
|
-
- https://youtube.com
|
|
146
|
-
- https://m.youtube.com
|
|
147
|
-
embedOrigins:
|
|
148
|
-
- https://www.youtube.com
|
|
149
|
-
- https://www.youtube-nocookie.com
|
|
150
|
-
- id: x-posts
|
|
151
|
-
provider: oembed
|
|
152
|
-
enabled: true
|
|
153
|
-
name: X
|
|
154
|
-
purpose:
|
|
155
|
-
en: With your permission, load X media and its player on request.
|
|
156
|
-
zh-CN: 在你同意后,按你的请求加载 X 分享内容及播放器。
|
|
157
|
-
dataCategories:
|
|
158
|
-
en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
|
|
159
|
-
zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
|
|
160
|
-
recipient: X
|
|
161
|
-
retention:
|
|
162
|
-
en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
|
|
163
|
-
zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
|
|
164
|
-
privacyUrl: https://x.com/en/privacy
|
|
165
|
-
backendUrl: https://x.com
|
|
166
|
-
oembedEndpoint: https://publish.x.com/oembed
|
|
167
|
-
sourceOrigins:
|
|
168
|
-
- https://x.com
|
|
169
|
-
- https://twitter.com
|
|
170
|
-
- https://www.x.com
|
|
171
|
-
- https://www.twitter.com
|
|
172
|
-
embedOrigins:
|
|
173
|
-
- https://platform.x.com
|
|
174
|
-
- https://platform.twitter.com
|
|
175
|
-
- https://syndication.twitter.com
|
|
176
|
-
- https://cdn.syndication.twimg.com
|
|
177
|
-
- https://pbs.twimg.com
|
|
178
|
-
- https://abs.twimg.com
|
|
179
|
-
- https://video.twimg.com
|
|
180
|
-
embedScripts:
|
|
181
|
-
- https://platform.x.com/widgets.js
|
|
16
|
+
head:
|
|
17
|
+
titleSuffix: ""
|
|
18
|
+
titleSeparator: " · "
|
|
19
|
+
header:
|
|
20
|
+
showBrand: true
|
|
21
|
+
brandLabel: ""
|
|
22
|
+
components:
|
|
23
|
+
header: true
|
|
24
|
+
primaryNavigation: true
|
|
25
|
+
languageNavigation: true
|
|
26
|
+
footer: true
|
|
27
|
+
footerNavigation: true
|
|
28
|
+
navigation:
|
|
29
|
+
- key: home
|
|
30
|
+
url: "@home"
|
|
31
|
+
labels:
|
|
32
|
+
en: Home
|
|
33
|
+
zh-CN: 首页
|
|
34
|
+
- key: guides
|
|
35
|
+
url: /project-introduction/
|
|
36
|
+
labels:
|
|
37
|
+
en: Guides
|
|
38
|
+
zh-CN: 项目指南
|
|
39
|
+
- key: quick-start
|
|
40
|
+
url: /quick-start/
|
|
41
|
+
labels:
|
|
42
|
+
en: Quick start
|
|
43
|
+
zh-CN: 快速入门
|
|
44
|
+
- key: posts
|
|
45
|
+
url: "@archives"
|
|
46
|
+
labels:
|
|
47
|
+
en: Posts
|
|
48
|
+
zh-CN: 文章
|
|
49
|
+
- key: search
|
|
50
|
+
url: "@search"
|
|
51
|
+
labels:
|
|
52
|
+
en: Search
|
|
53
|
+
zh-CN: 搜索
|
|
54
|
+
footerNavigation:
|
|
55
|
+
- key: privacy
|
|
56
|
+
url: /privacy-policy/
|
|
57
|
+
labels:
|
|
58
|
+
en: Privacy policy
|
|
59
|
+
zh-CN: 隐私政策
|
|
60
|
+
- key: feed
|
|
61
|
+
url: "@feed"
|
|
62
|
+
labels:
|
|
63
|
+
en: Atom feed
|
|
64
|
+
zh-CN: Atom 订阅
|
|
65
|
+
footer: ""
|
|
66
|
+
author:
|
|
67
|
+
name: toewpq
|
|
68
|
+
avatar: /edgepress/brand/avatar.png
|
|
69
|
+
seo:
|
|
70
|
+
author: toewpq
|
|
71
|
+
keywords:
|
|
72
|
+
- Markdown website builder
|
|
73
|
+
- Cloudflare Workers
|
|
74
|
+
- static site generator
|
|
75
|
+
image: https://example.org/edgepress/brand/og-image.png
|
|
76
|
+
robots: index,follow
|
|
77
|
+
agentSeo:
|
|
78
|
+
enabled: true
|
|
79
|
+
summary: A static website builder for Cloudflare Workers, with row-based editable pages, Markdown posts,
|
|
80
|
+
themes, plugins, and consent-gated integrations.
|
|
81
|
+
topics:
|
|
82
|
+
- Markdown website builder
|
|
83
|
+
- Cloudflare Workers
|
|
84
|
+
- composable page blocks
|
|
85
|
+
- plugin development
|
|
86
|
+
llmsTxt: true
|
|
87
|
+
agentCrawlers:
|
|
88
|
+
- GPTBot
|
|
89
|
+
- ClaudeBot
|
|
90
|
+
- PerplexityBot
|
|
91
|
+
privacy:
|
|
92
|
+
controller:
|
|
93
|
+
name: toewpq
|
|
94
|
+
contact: toewpq@gmail.com
|
|
95
|
+
policyUrl: /privacy-policy/
|
|
96
|
+
plugins:
|
|
97
|
+
consent:
|
|
98
|
+
enabled: true
|
|
99
|
+
proposedDate: 2026-09-26
|
|
100
|
+
effectiveDate: 2026-09-26
|
|
101
|
+
expiresDays: 180
|
|
102
|
+
services:
|
|
103
|
+
- id: cloudflare-web-analytics
|
|
104
|
+
provider: cloudflare-web-analytics
|
|
105
|
+
name:
|
|
106
|
+
en: Cloudflare Web Analytics
|
|
107
|
+
zh-CN: Cloudflare 网站分析
|
|
108
|
+
purpose:
|
|
109
|
+
en: Measure visits and page performance to improve this site, only after you opt in.
|
|
110
|
+
zh-CN: 在你同意后统计访问与页面性能,用于改进本站。
|
|
111
|
+
dataCategories:
|
|
112
|
+
en: Performance timing and page-view metrics; dimensions can include path, referrer, device, browser,
|
|
113
|
+
operating system, and country. Cloudflare receives the beacon request's source IP and says it
|
|
114
|
+
discards it at the nearest data center without storing it in core databases or logs.
|
|
115
|
+
zh-CN: 性能计时和页面浏览指标,维度可能包括页面路径、来源页、设备、浏览器、操作系统和国家或地区。Cloudflare 会在信标请求中接收来源 IP,并表示会在最近的数据中心将其丢弃,不保存到核心数据库或日志中。
|
|
116
|
+
recipient:
|
|
117
|
+
en: Cloudflare, Inc.
|
|
118
|
+
zh-CN: Cloudflare, Inc.
|
|
119
|
+
retention:
|
|
120
|
+
en: Unsampled beacon data is kept for 7 days, then aggregated to about 10% for long-term storage. Dashboard
|
|
121
|
+
history is available for 6 months.
|
|
122
|
+
zh-CN: 未采样的信标数据保留 7 天,之后会汇总为约 10% 的长期数据。仪表板可查看最近 6 个月的历史记录。
|
|
123
|
+
privacyUrl: https://developers.cloudflare.com/speed/observatory/rum-beacon/
|
|
124
|
+
token: 8347d72ba9f84e6783bf441e7832a80e
|
|
125
|
+
- id: youtube
|
|
126
|
+
provider: oembed
|
|
127
|
+
enabled: true
|
|
128
|
+
name: YouTube
|
|
129
|
+
purpose:
|
|
130
|
+
en: With your permission, load YouTube media and its player on request.
|
|
131
|
+
zh-CN: 在你同意后,按你的请求加载 YouTube 分享内容及播放器。
|
|
132
|
+
dataCategories:
|
|
133
|
+
en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
|
|
134
|
+
zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
|
|
135
|
+
recipient: YouTube
|
|
136
|
+
retention:
|
|
137
|
+
en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
|
|
138
|
+
zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
|
|
139
|
+
privacyUrl: https://policies.google.com/privacy
|
|
140
|
+
backendUrl: https://www.youtube.com
|
|
141
|
+
oembedEndpoint: https://www.youtube.com/oembed
|
|
142
|
+
sourceOrigins:
|
|
143
|
+
- https://www.youtube.com
|
|
144
|
+
- https://youtu.be
|
|
145
|
+
- https://youtube.com
|
|
146
|
+
- https://m.youtube.com
|
|
147
|
+
embedOrigins:
|
|
148
|
+
- https://www.youtube.com
|
|
149
|
+
- https://www.youtube-nocookie.com
|
|
150
|
+
- id: x-posts
|
|
151
|
+
provider: oembed
|
|
152
|
+
enabled: true
|
|
153
|
+
name: X
|
|
154
|
+
purpose:
|
|
155
|
+
en: With your permission, load X media and its player on request.
|
|
156
|
+
zh-CN: 在你同意后,按你的请求加载 X 分享内容及播放器。
|
|
157
|
+
dataCategories:
|
|
158
|
+
en: Requested content URL, IP address, browser information; provider cookies may be used after loading.
|
|
159
|
+
zh-CN: 请求的内容链接、IP 地址、浏览器信息;加载后平台可能使用其 Cookie。
|
|
160
|
+
recipient: X
|
|
161
|
+
retention:
|
|
162
|
+
en: The site keeps the consent choice for 180 days; provider retention follows its linked privacy policy.
|
|
163
|
+
zh-CN: 本站保存授权选择 180 天;平台处理与保留规则见所链接的隐私政策。
|
|
164
|
+
privacyUrl: https://x.com/en/privacy
|
|
165
|
+
backendUrl: https://x.com
|
|
166
|
+
oembedEndpoint: https://publish.x.com/oembed
|
|
167
|
+
sourceOrigins:
|
|
168
|
+
- https://x.com
|
|
169
|
+
- https://twitter.com
|
|
170
|
+
- https://www.x.com
|
|
171
|
+
- https://www.twitter.com
|
|
172
|
+
embedOrigins:
|
|
173
|
+
- https://platform.x.com
|
|
174
|
+
- https://platform.twitter.com
|
|
175
|
+
- https://syndication.twitter.com
|
|
176
|
+
- https://cdn.syndication.twimg.com
|
|
177
|
+
- https://pbs.twimg.com
|
|
178
|
+
- https://abs.twimg.com
|
|
179
|
+
- https://video.twimg.com
|
|
180
|
+
embedScripts:
|
|
181
|
+
- https://platform.x.com/widgets.js
|