Native Shell
Native Shell:AI 生成的 UI,在你的應用中原生呈現,涵蓋每個平台。iOS、Android、macOS、Windows 與 Linux 上的應用、GPUI 應用與網頁在執行時載入已簽名、沙箱隔離的 TSX 模組並繪製 th
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗The public website of EmiBSD: plain Jekyll, one stylesheet of its own (assets/css/site.css),
no theme and no framework. The code lives in EmiBSD/Kernel
(the redesigned kernel) and EmiBSD/LandingZone (the
file-by-file port, formerly EmiBSD.LZ); this repository holds only the site and reads nothing
from them at build time.
| File | URL | Nav |
|---|---|---|
index.md | / | Home |
about.md | /about/ | About |
process.md | /process/ | Process |
status.md | /status/ | Status |
news/index.md, news/_posts/ | /news/ | News |
docs-site.md | /docs/ | Docs |
contributing.md | /contributing/ | Contributing |
support.md | /support/ | footer only |
The navigation is the nav list in _config.yml; keep it at seven entries.
The devlog is _data/news.json, one object per line shown on the pages. The home page shows
the latest five, /news/ all of them, both through _includes/news-list.html, which sorts by
date, newest first, whatever the order in the file. Fields:
date: ISO 8601 with the offset, as git log -1 --date=iso-strict prints it; the pages
sort by it and show its day. Keep one offset for every entry so the string order is the time
order.post: the slug of a file news/_posts/YYYY-MM-DD-slug.md (n4-met for
2026-10-24-n4-met.md); the line takes that post's title and URL. A post has a title
and an optional description in its front matter; /news/feed.xml carries the posts only.title and url, when there is no post: the line itself and where it links (a milestone's
tag in Kernel, its closing commit in LandingZone).repo: LandingZone, Kernel, Userland, DevTools or OS, shown before the line: a LandingZone milestone or
sub-milestone (M16a), a Kernel slice (N5.0 done: ..., linking to its merge commit), or a
step of another repository, linking to its commit.Kernel's slices are written here, one line each when it merges; Kernel's milestones are not:
the list adds every met milestone of
_data/status.json (its date, url and optional post), labelled Kernel, so a milestone
close is recorded once, in that file.
status.md renders _data/status.json, which holds what changes at a milestone close, taken
from the Kernel repository at the commit it names:
commit, date, at: the commit the figures come from, its day, and what it was (the close of N4).crates: one object per crate, name, files, unsafe (the totals of cargo xtask unsafe-report), note, and an optional label shown after the name.milestones: one object per N milestone, name, title, scope; a met one has date
(the tag's, git log -1 --date=iso-strict n<N>-<name>) and url (the tag), and post when a
news post tells the story; one under way has state: "in progress"; the rest are pending.next: the milestone under way, name and its slices (slice, what, optional state
done or in progress).The prose of status.md (what works, the next milestone's paragraph) is edited by hand when
a milestone closes, in the same change as the data.
The site-updater agent (.claude/agents/site-updater.md) makes all of these edits from the
records of the two code repositories, checked out beside this one as ../Kernel and
../LandingZone: launch it with the tag of the close (n5-vfs) or the LandingZone commit.
It builds the site, reports every figure with its source, and never pushes.
bundle config set --local path vendor/bundle # once: gems stay inside vendor/
bundle install
bundle exec jekyll build # into _site/
bundle exec jekyll serve # http://127.0.0.1:4000
The Gemfile pins the Jekyll, Liquid, kramdown and jekyll-feed versions of GitHub Pages'
github-pages gem (v232); that gem itself does not install on Ruby 4.
Every push to main runs .github/workflows/jekyll.yml, which builds the site and deploys it to
GitHub Pages (Settings > Pages > Source: GitHub Actions). CNAME holds www.emibsd.org,
and _config.yml sets url: "https://www.emibsd.org" and baseurl: "". The DNS for emibsd.org points www at GitHub Pages (CNAME to
emibsd.github.io) and the apex at GitHub's Pages addresses, which redirect to www.
GitHub Pages sets the response headers and lets a site set none of its own. Cloudflare proxies
www.emibsd.org (the DNS of emibsd.org is there, every record proxied, SSL/TLS Full (strict)),
and a Response Header Transform Rule on that zone sets the headers GitHub does not:
Content-Security-Policy (the policy below plus frame-ancestors 'none'), X-Frame-Options: DENY,
X-Content-Type-Options: nosniff, Strict-Transport-Security: max-age=31536000 and
Referrer-Policy, and removes GitHub's Access-Control-Allow-Origin: *. Turning the proxy off
loses them all; what a page can carry itself, it still does:
_layouts/default.html has a <meta http-equiv="Content-Security-Policy"> that allows the
site's own stylesheet and images, and one script source besides the site's own: the Cloudflare
Web Analytics beacon (static.cloudflareinsights.com, reporting to cloudflareinsights.com),
which the proxy injects into each page with an integrity attribute. No forms, no <base>,
nothing inline. So no style= attribute, no <style> element and no <script>
without a src may appear in a page; the build fails if one does. The Cloudflare rule's
header must carry the same script-src and connect-src, or it blocks the beacon; a browser
applies the header and the meta tag both, so a source missing from either is blocked. Kramdown's |---:| column alignment writes a style attribute,
so a table that needs it takes the {: .numbers} class instead (assets/css/site.css).
Browsers ignore frame-ancestors in a meta tag, which is why the header exists.404.html replaces GitHub's own 404 page, whose policy allows inline styles.robots.txt carries only the Sitemap: line (sitemap.xml is jekyll-sitemap's). Cloudflare's
Bot Preference Sync, with the Training policy on Disallow, prepends its own block to the file it
serves: a User-agent: * group with the Content-Signal and Allow: /, then a Disallow: / per
AI training crawler. The repo's file has no group of its own so the served file has one, and
with Cloudflare's block gone a file with no group allows everything.A ZAP scan of the site should report only the two informational cache alerts; a Content Security Policy alert means a page broke the rule above, a header alert means the proxy or its rule is off.
GitHub Pages renders no Mermaid and the site's CSP allows no inline styles, so diagrams are
rendered here and committed: the sources are _diagrams/*.mmd with the site's palette in
_diagrams/theme-{light,dark}.json; tools/diagrams.sh (needs mermaid-cli,
npm install -g @mermaid-js/mermaid-cli) writes assets/img/<name>.svg and <name>-dark.svg;
a page shows them with <picture> and a prefers-color-scheme source, inside <figure class="diagram">.