Source of https://wispweb.dev, the Wisp docs site (built with Wisp itself). Pre-release. https://wispweb.dev
  • Rust 35.6%
  • CSS 23%
  • wisp 19.7%
  • JavaScript 19.2%
  • Shell 1.2%
  • Other 1.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Image itzcozi e86a8ea007
Some checks failed
build / build (push) Failing after 40s
home: no ghost on a phone
2026-11-03 12:41:14 -05:00
.cursor/rules api-requests: Value accessors, as_f64 None for non-finite 2026-10-05 07:54:18 -04:00
.forgejo Ask: skip client assistant turns, per-IP limits in KV always on; previews use the Cargo.lock of Wisp; no PR on the self-hosted runner; npm.lock docs 2026-10-31 15:39:36 -04:00
.github api-requests: Value accessors, as_f64 None for non-finite 2026-10-05 07:54:18 -04:00
.wisp/fonts examples: rebuilt wasm, zips, bridge.js and apps.json; fonts subset again; the builder accepts the empty static/ Wisp makes 2026-10-24 23:17:59 -04:00
ask Fix low findings G3/G4: keyframes name clash, test loops and anchors, ask fab room, ui docs 2026-10-31 17:07:02 -04:00
build benchmarks: TFB of v1.0.0-pre.3 in a WSL2 VM with wrk on 4 CPUs 2026-11-03 01:23:28 -05:00
examples site: pin the remaining install commands, shorten new comments 2026-10-31 15:19:17 -04:00
fonts-src fonts: OFL.txt beside the fonts, subsets keep name IDs 0/13/14 and are rewritten only when their code points change, metrics files (.wisp/fonts) give the fallback face size-adjust so faces swap without shift; fonts test skips a stale dist; search shortcut in the layout (no inline stub); docs: sheet as a late link, client:load deferred, fold trade-off 2026-10-09 11:19:25 -04:00
notes site.sh: start from a clean dist/; self-unregistering examples/sw.js removes the old worker 2026-10-25 18:35:56 -04:00
playground hunt13: Ask Wisp cuts long earlier replies, build reads only the local Wisp checkout, safer changelog links, guards in ask.js, toc.js, search, site.sh, instant example declares open 2026-10-30 10:39:21 -04:00
src home: no ghost on a phone 2026-11-03 12:41:14 -05:00
static site: keep the install host wisp.ar0.eu (WISP_DEP), pin the tag on every install command 2026-10-31 14:44:01 -04:00
tests g3lows review fixes: TS naming doc, img alt in icon test, fab note 2026-10-31 17:07:06 -04:00
tools docs: sql skip fields, pattern step budget; site.sh pretty JSON, examples grip listeners, tip describedby, ask stored sources 2026-11-01 14:48:08 -05:00
.gitignore examples: static previews of the examples that need no server, in sandboxed frames 2026-10-25 22:27:49 -04:00
AGENTS.md AGENTS.md: sync with the Wisp llms/AGENTS.md 2026-10-27 09:21:57 -04:00
build.rs Landing: tfb bar charts, framed tokens card 2026-11-02 13:48:13 -05:00
Cargo.lock Cargo.lock: pulldown-cmark 0.13.5 (RUSTSEC-2026-0414) 2026-10-29 21:58:35 -04:00
Cargo.toml use ../Wisp for the sibling checkout everywhere, split the CLAUDE.md rules sentence 2026-10-27 09:23:32 -04:00
CLAUDE.md use ../Wisp for the sibling checkout everywhere, split the CLAUDE.md rules sentence 2026-10-27 09:23:32 -04:00
LICENSE Speed pages: all contenders from data, no invalid runs, rank tables pending; license footer, LICENSE and Cargo metadata say Wyzie LLC 2026-10-05 12:51:52 -04:00
PRODUCT.md Rewrite docs prose in Simplified Technical English 2026-10-18 17:58:01 -04:00
README.md Merge gatesite 2026-10-31 17:04:37 -04:00
wrangler.toml ask: without ASK_SALT keep the global KV caps, skip only the per-IP KV record. Document ASK_SALT 2026-10-27 09:29:03 -04:00

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 .wisp components (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 with wisp build --target pages into the Pages _worker.js; tools/site.sh builds both)
  • the /changelog page (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 from build/CHANGELOG.md, a copy of the Wisp repo's CHANGELOG.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 changelog checks it). TAGGED in build/changelog.rs lists 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.