Rename SlideCraft to DeckCraft: crates, apps, binaries, app id, file extension (.deckcraft; .slidecraft files still open), packaging, docs; ROADMAP alpha and parity estimates

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Brandon Thomas
2026-10-06 01:46:40 -04:00
co-authored by Claude Opus 5.5
parent 49278565ea
commit ae9d525bce
216 changed files with 2021 additions and 1998 deletions
+13 -13
View File
@@ -1,22 +1,22 @@
# Hosting SlideCraft for the web
# Hosting DeckCraft for the web
`slidecraft-web-<version>.zip` (from the GitHub release, or `packaging/web/package.sh`) holds a
static site in `slidecraft-web-<version>/`:
`deckcraft-web-<version>.zip` (from the GitHub release, or `packaging/web/package.sh`) holds a
static site in `deckcraft-web-<version>/`:
| File | What it is |
|---|---|
| `index.html` | The page. It loads everything through relative URLs. |
| `slidecraft-web-<hash>.js` | wasm-bindgen glue (generated, ES module) |
| `slidecraft-web-<hash>_bg.wasm` | The app, size is printed by `packaging/web/package.sh` |
| `deckcraft-web-<hash>.js` | wasm-bindgen glue (generated, ES module) |
| `deckcraft-web-<hash>_bg.wasm` | The app, size is printed by `packaging/web/package.sh` |
| `_headers`, `.htaccess` | Sample header rules for Netlify/Cloudflare Pages and Apache |
There is no server-side code. Upload the folder's contents anywhere that serves static files.
## Any path works
All URLs in `index.html` are relative (`public_url = "./"` in `apps/slidecraft-web/Trunk.toml`),
All URLs in `index.html` are relative (`public_url = "./"` in `apps/deckcraft-web/Trunk.toml`),
so the site works at a domain root (`https://example.com/`), under a prefix
(`https://example.com/tools/slidecraft/`) and from a CDN bucket. The asset names carry a content
(`https://example.com/tools/deckcraft/`) and from a CDN bucket. The asset names carry a content
hash, so they can be cached forever. Only `index.html` needs revalidation.
## Required server settings
@@ -31,7 +31,7 @@ hash, so they can be cached forever. Only `index.html` needs revalidation.
`.js` files, and `no-cache` on `index.html`.
- **HTTPS:** WebGPU (and the clipboard) only work in a secure context, which means `https://`
or `http://localhost`. Over plain HTTP elsewhere, the app falls back to WebGL2.
- **No special isolation headers:** SlideCraft doesn't use `SharedArrayBuffer`, so it doesn't
- **No special isolation headers:** DeckCraft doesn't use `SharedArrayBuffer`, so it doesn't
need `Cross-Origin-Opener-Policy` or `Cross-Origin-Embedder-Policy`. If your site already sends
COEP `require-corp`, also send `Cross-Origin-Resource-Policy: same-origin` (or `cross-origin`
when the files live on a CDN) on the app's files.
@@ -39,7 +39,7 @@ hash, so they can be cached forever. Only `index.html` needs revalidation.
nginx example:
```nginx
location /slidecraft/ {
location /deckcraft/ {
types { application/wasm wasm; text/javascript js; text/html html; }
gzip on;
gzip_types application/wasm text/javascript text/html;
@@ -54,8 +54,8 @@ Local test: `python3 -m http.server 8765` inside the folder, then open http://lo
```html
<iframe
src="https://example.com/slidecraft/"
title="SlideCraft presentations"
src="https://example.com/deckcraft/"
title="DeckCraft presentations"
style="width: 100%; height: 720px; border: 0;"
allow="fullscreen; clipboard-read; clipboard-write"
allowfullscreen>
@@ -73,7 +73,7 @@ Local test: `python3 -m http.server 8765` inside the folder, then open http://lo
## Renderer selection and fallback flags
SlideCraft renders with wgpu. It uses **WebGPU** when the browser has it and falls back to
DeckCraft renders with wgpu. It uses **WebGPU** when the browser has it and falls back to
**WebGL2** on its own. URL query flags override this, and they work on the iframe `src` too:
| Flag | Effect |
@@ -83,6 +83,6 @@ SlideCraft renders with wgpu. It uses **WebGPU** when the browser has it and fal
| `?blank` | Start with an empty presentation instead of the sample deck |
| `?show` | Start the slide show immediately (kiosk/embedded decks) |
For example: `<iframe src="https://example.com/slidecraft/?webgl" ...>`.
For example: `<iframe src="https://example.com/deckcraft/?webgl" ...>`.
A browser with neither WebGPU nor WebGL2 gets a message in place of the app.
+4 -4
View File
@@ -1,10 +1,10 @@
#!/usr/bin/env bash
# Build the browser version and zip it: $DIST/slidecraft-web-<version>.zip
# Build the browser version and zip it: $DIST/deckcraft-web-<version>.zip
#
# Usage: packaging/web/package.sh [--skip-build]
#
# Needs: trunk (brew install trunk / cargo install trunk --locked) and the wasm32-unknown-unknown
# target. The zip holds a self-contained static site in slidecraft-web-<version>/ that works
# target. The zip holds a self-contained static site in deckcraft-web-<version>/ that works
# from any URL path and inside an <iframe>. Hosting notes: packaging/web/README.md.
set -euo pipefail
# shellcheck source=../common.sh
@@ -13,7 +13,7 @@ HERE="$ROOT/packaging/web"
if [ "${1:-}" != "--skip-build" ]; then
command -v trunk >/dev/null || { echo "error: trunk not found (cargo install trunk --locked)" >&2; exit 1; }
(cd "$ROOT/apps/slidecraft-web" && trunk build --release)
(cd "$ROOT/apps/deckcraft-web" && trunk build --release)
fi
SITE="$ROOT/dist/web"
@@ -24,7 +24,7 @@ if grep -Eq '(src|href)="/[^/]' "$SITE/index.html"; then
exit 1
fi
NAME="slidecraft-web-$VERSION"
NAME="deckcraft-web-$VERSION"
WORK="$CARGO_TARGET_DIR/web-package"
rm -rf "$WORK"
mkdir -p "$WORK/$NAME"