- Rust 35.6%
- CSS 23%
- wisp 19.7%
- JavaScript 19.2%
- Shell 1.2%
- Other 1.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .cursor/rules | ||
| .forgejo | ||
| .github | ||
| .wisp/fonts | ||
| ask | ||
| build | ||
| examples | ||
| fonts-src | ||
| notes | ||
| playground | ||
| src | ||
| static | ||
| tests | ||
| tools | ||
| .gitignore | ||
| AGENTS.md | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| LICENSE | ||
| PRODUCT.md | ||
| README.md | ||
| wrangler.toml | ||
Wisp docs
The documentation and launch site for Wisp, a fast, fun web framework for Rust. It is a Wisp app: the launch page is src/routes/+page.md, and every docs page is src/routes/docs/<slug>/+page.md. Canonical address: https://wispweb.dev.
It is also a working example of a real Wisp app (deployed to Cloudflare Pages). Look here to see how to:
- write pages in Markdown (
+page.md) and build them from.wispcomponents (src/components/) - add browser JavaScript from
src/lib/, such as the copy buttons (src/lib/copy.js), while every page still works with JavaScript off - serve generated files from Rust endpoints, such as the RSS feed and the sitemap (
+server.rs) - keep state in a cookie so forms work without JavaScript (the home page todo demo,
src/db.rs) - deploy to Cloudflare Pages, with the Ask Wisp chat (
POST /api/chat) as a Wisp app of its own (ask/, built withwisp build --target pagesinto the Pages_worker.js;tools/site.shbuilds both) - the
/changelogpage (the list of versions, and downloads) and the page of each version (/changelog/<version>/,/changelog/unreleased/for the section with no release) are made at build frombuild/CHANGELOG.md, a copy of the Wisp repo'sCHANGELOG.md(build.rs rewrites it from the Wisp checkout on every build, so it cannot go stale; without a checkout the committed copy is used;cargo test --test changelogchecks it).TAGGEDinbuild/changelog.rslists the versions that have a tag, which link to their release page
License
MIT. Made by Wyzie LLC for the community.
Deploy
Always build with sh tools/site.sh (needs SITE_URL=https://wispweb.dev, the Wisp checkout at ../Wisp or $WISP, and the wasm32-unknown-unknown target), then npx --yes wrangler@4 pages deploy dist --project-name wisp-docs --branch main. Never deploy a dist/ from wisp build --static alone: it has no _worker.js, app.wasm or _routes.json, so POST /api/chat (Ask Wisp) answers a static 405. Check after a deploy: run curl -s -o /dev/null -w '%{http_code}' -X POST https://wispweb.dev/api/chat. It must not print 405. A 403 without an Origin header is fine.
The Pages project secrets are DEEPSEEK_API_KEY (required), ASK_DISABLED=1 (kill switch) and ASK_SALT. ASK_SALT is any long random text. It salts the IP hash of the per-IP limits in KV. Without it, the salt comes from DEEPSEEK_API_KEY, so the per-IP limits in KV always run. The worker sends only the user turns of a request to the model: a client can forge assistant turns.