# Web App Guide (Preview) YAZE is available as a **preview** web application that runs in your browser. The web port is under active development - expect bugs and incomplete features. > **⚠️ Preview Status**: The web app is experimental. For production ROM hacking, use the [desktop build](../build/quick-reference.md). ## Quick Start ### Try it Now Visit your deployed instance to access the web version. The application is served via GitHub Pages or custom deployment. ### Loading a ROM 1. Click **"Open ROM"** or drag and drop your Zelda 3 ROM file onto the page 2. The ROM is stored locally in your browser using IndexedDB - it never leaves your computer 3. Start editing using a subset of the desktop interface ### Saving Your Work - **Auto-save**: Changes are automatically saved to browser storage (when working) - **Download ROM**: Click the download button to save your modified ROM to disk - **Backup recommended**: Download frequently; browser storage can be cleared ## Feature Status The web version is in preview with varying editor support: | Feature | Status | Notes | |---------|--------|-------| | ROM Loading | ✅ Working | Drag & drop, file picker | | Overworld Editor | ⚡ Preview | Basic tile editing, incomplete features | | Dungeon Editor | ⚡ Preview | Room viewing, editing incomplete | | Palette Editor | ⚡ Preview | Basic palette viewing/editing | | Graphics Editor | ⚡ Preview | Tile viewing, editing incomplete | | Sprite Editor | ⚡ Preview | Limited functionality | | Message Editor | ⚡ Preview | Text viewing, editing incomplete | | Hex Editor | ✅ Working | Direct ROM editing | | Asar Patching | ⚡ Preview | Basic assembly patching | | Emulator | ❌ Not Available | Use desktop build | | Real-time Collaboration | ⚡ Experimental | Requires server setup | | Audio Playback | ⚡ Experimental | Limited SPC700 support | **Legend**: ✅ Working | ⚡ Preview/Incomplete | ❌ Not Available ## Browser Requirements ### Recommended Browsers - **Chrome/Edge** 90+ (best performance) - **Firefox** 88+ - **Safari** 15.4+ (macOS/iOS) ### Required Features The web app requires modern browser features: - **WebAssembly**: Core application runtime - **SharedArrayBuffer**: Multi-threading support (requires HTTPS or localhost) - **IndexedDB**: Local ROM and project storage - **File System Access API**: Better file handling (Chrome/Edge) ### Mobile Support ✅ **Tablets**: Full support on iPad and Android tablets ⚠️ **Phones**: Limited - interface designed for larger screens ## Performance Tips ### For Best Performance 1. **Use Chrome or Edge** - Fastest WebAssembly implementation 2. **Close other tabs** - Free up browser memory 3. **Desktop/laptop recommended** - Better than mobile for complex editing 4. **Stable internet** - Only needed for initial load; works offline after ### Troubleshooting Slow Performance - Clear browser cache and reload - Disable browser extensions temporarily - Check browser console for errors (F12) - Use the debug build for better error messages (see Development section) ## Storage & Privacy ### What's Stored Locally - ROM files (IndexedDB) - Project settings and preferences - Auto-save data - Recent file history ### Privacy Guarantee - **All data stays in your browser** - ROMs and edits never uploaded to servers - **No tracking** - No analytics or user data collection - **No login required** - No accounts or personal information needed ### Clearing Data ```javascript // Open browser console (F12) and run: localStorage.clear(); sessionStorage.clear(); // Then reload the page ``` Or use your browser's "Clear browsing data" feature. ## Keyboard Shortcuts The web app supports desktop keyboard shortcuts: | Shortcut | Action | |----------|--------| | **Ctrl/Cmd + O** | Open ROM | | **Ctrl/Cmd + S** | Save/Download ROM | | **Ctrl/Cmd + Z** | Undo | | **Ctrl/Cmd + Y** | Redo | | **`** (backtick) | Toggle terminal | | **Esc** | Close panels/dialogs | | **Tab** | Cycle through editors | **Note**: Some shortcuts may conflict with browser defaults. Use the menu bar as an alternative. ## Advanced Features ### Terminal Access Press **`** (backtick) to open the integrated terminal: ```bash # List all dungeons z3ed dungeon list --rom current # Get overworld info z3ed overworld info --map 0 # Apply a patch z3ed asar my_patch.asm ``` ### Collaboration (Experimental) When enabled, multiple users can edit the same ROM simultaneously: 1. Click **"Start Collaboration"** in the toolbar 2. Share the session URL with collaborators 3. See real-time cursors and changes from other users **Note**: Requires a collaboration server to be deployed. See deployment docs for setup. ### Developer Tools Open browser console (F12) for debugging: ```javascript // Check if WASM module is ready window.yazeDebug.isReady() // Get ROM status window.yazeDebug.rom.getStatus() // Get current editor state window.yaze.editor.getActiveEditor() // Read ROM data window.yaze.data.getRoomTiles(roomId) ``` See [`docs/internal/wasm-yazeDebug-api-reference.md`](../../internal/wasm-yazeDebug-api-reference.md) for full API documentation. ## Known Limitations ### Not Yet Supported - **Emulator**: No built-in emulator in web version (use desktop) - **Custom plugins**: Plugin system requires desktop build - **Large file export**: Browser limits on file size (typically 2GB+) ### Browser-Specific Issues - **Safari**: Slower performance, some SharedArrayBuffer limitations - **Firefox**: Clipboard access may require permissions - **Mobile Chrome**: Touch controls under development ## Offline Usage After first load, the web app works offline: 1. Visit the site once while online 2. Service worker caches the application 3. Disconnect from internet 4. App continues to function normally **Note**: Initial load requires internet; updates require reconnection. ## Building from Source To build and deploy your own instance: ```bash # Build the web app ./scripts/build-wasm.sh # Serve locally for testing ./scripts/serve-wasm.sh # Deploy dist/ folder to your web server # Artifacts are in build-wasm/dist/ ``` See [`docs/internal/agents/wasm-development-guide.md`](../../internal/agents/wasm-development-guide.md) for detailed build instructions. ## Deployment ### GitHub Pages (Automated) Pushes to `master` automatically build and deploy via GitHub Actions: ```yaml # See .github/workflows/web-build.yml ``` ### Custom Server Requirements: - Static file server (nginx, Apache, etc.) - HTTPS enabled (required for SharedArrayBuffer) - Proper CORS headers Minimal nginx config: ```nginx server { listen 443 ssl http2; server_name yaze.yourdomain.com; root /var/www/yaze; # Required for SharedArrayBuffer add_header Cross-Origin-Opener-Policy same-origin; add_header Cross-Origin-Embedder-Policy require-corp; # Cache WASM files location ~* \.(wasm|js)$ { expires 1y; add_header Cache-Control "public, immutable"; } } ``` ## Getting Help - **Discord**: [Oracle of Secrets](https://discord.gg/MBFkMTPEmk) - **Issues**: [GitHub Issues](https://github.com/scawful/yaze/issues) - **Docs**: [`docs/public/index.md`](../index.md) ## Comparison: Web vs Desktop | Feature | Web (Preview) | Desktop (Stable) | |---------|---------------|------------------| | **Installation** | None required | Download & install | | **Platforms** | Modern browsers | Windows, macOS, Linux | | **Performance** | Moderate | Excellent | | **Editor Completeness** | Preview/Incomplete | Full-featured | | **Emulator** | ❌ | ✅ | | **Plugins** | ❌ | ✅ | | **Stability** | Experimental | Production-ready | | **Updates** | Automatic | Manual download | | **Offline** | After first load | Always | | **Collaboration** | Experimental | Via server | | **Mobile** | Tablets (limited) | No | **Recommendation**: - **For serious ROM hacking**: Use the desktop build - **For quick previews or demos**: Web app is suitable - **For learning/exploration**: Either works, but desktop is more complete