LunaForge is a 100% client-side, offline-friendly platform that combines developer tools with bite-sized mini games. It is designed to be modular, accessible, and ready for open-source collaboration.
- Client-side only (no backend, no database)
- Fast, lightweight, and privacy-first
- Offline-ready with localStorage-based persistence
- Extensible via plugins without modifying core files
- Accessible and keyboard-friendly
Web Demo - https://lunaforge.onrender.com
- Clone the repository.
- Open
index.htmlin a browser or serve locally:python3 -m http.server 8080
- Navigate to
http://localhost:8080.
/lunaforge-root
/tools
index.html
/plugins
plugin-registry.js
<tool>/manifest.json
<tool>/<tool>.js
/games
index.html
play.html
/modules
game-registry.js
<game>/manifest.json
<game>/<game>.js
/leaderboard
leaderboard.js
/core
router.js
plugin-loader.js
plugin-validator.js
game-loader.js
storage.js
/css
style.css
/js
main.js
data-management.js
index.html
about.html
README.md
CONTRIBUTING.md
LICENSE
All tools and games must include a manifest.json file with:
{
"id": "unique-kebab-case-id",
"name": "Plugin Name",
"version": "1.0.0",
"type": "tool",
"description": "Short summary",
"entry": "./plugins/my-tool/my-tool.js",
"author": "Your Name",
"permissions": []
}Tool plugins export a default object with:
export default {
init: () => ({}),
render: (container, state) => {},
destroy: (container, state) => {}
}- init returns per-instance state.
- render mounts UI and binds events.
- destroy cleans up any resources.
Game modules export a default function:
export default function createGame({ container, onScore, onMessage, onGameOver }) {
return { start, reset, stop, destroy };
}- start begins a session.
- reset restarts the game.
- stop/destroy handle cleanup.
LunaForge stores settings, tool preferences, and leaderboards in localStorage. Use the About page to export or import a versioned JSON bundle.
The architecture can be split into two repositories:
- LunaForge-Tools:
/tools,/core,/css,/js - LunaForge-Games:
/games,/core,/css,/js
Both repositories are static and can be deployed to GitHub Pages.
- Full keyboard navigation
- Visible focus indicators
- ARIA labels where needed
- High-contrast dark theme
MIT License. See LICENSE.