🏗️ Framework Management
Every framework is defined once, in frameworks.json. The scripts, GitHub Actions workflows, website and READMEs all read from it, so there are no framework lists to keep in sync by hand.
📋 Configuration
{
"frameworks": [
{
"id": "vue",
"name": "Vue",
"displayName": "Vue 3",
"dir": "vue",
"assetsDir": "public",
"build": {
"buildCommand": "vite build",
"hasNodeModules": true,
"devCommand": "vite --port 3000",
"lintFiles": ["js", "vue"]
},
"meta": {
"emoji": "💚",
"iconName": "vuedotjs",
"website": "https://vuejs.org/",
"docs": "https://vuejs.org/guide/",
"github": "https://github.com/vuejs/core",
"npmPackage": "vue",
"color": "#4FC08D",
"accentColor": "#4FC08D",
"logo": "https://.../vue.png",
"description": "One-line summary shown in lists",
"longDescription": "Longer summary shown on the framework page",
"video": "YouTube video ID"
},
"exampleRealApp": {
"title": "Dashy",
"description": "Highly configurable self-hostable server dashboard",
"repo": "https://github.com/Lissy93/dashy",
"website": "https://dashy.to",
"logo": "https://.../dashy.png"
}
}
]
}
🔧 Properties
id: Unique identifier, used in script names, file names and URLsname: Display name (displayNameoptionally overrides it in the READMEs)dir: Directory underapps/assetsDir: Directory inside the app that shared assets are synced to (usuallypublic)buildDir: Build output directory, if it isn'tdist(.for apps with no build step)build.buildCommand/build.devCommand: Run from the app directory.npxis added automatically for the tools listed underbuildTools.requiresNpxinconfig.jsonbuild.hasNodeModules: Whether the app needsnpm installbuild.lintFiles: File extensions ESLint should checkmeta: Links, branding and descriptions used by the website and READMEsexampleRealApp: Optional real-world app built with the framework, shown on its website page
The full schema is scripts/verify/frameworks-schema.json. npm run verify validates frameworks.json against it.
➕ Adding a Framework
- Build the app in
apps/<id>/ - Add its entry to
frameworks.json - Run
npm run generate-scripts, which regenerates thepackage.jsonscripts and createstests/config/playwright-<id>.config.js - Run
npm run setupto install its dependencies and sync the shared assets
The GitHub Actions matrices, website and READMEs pick the new framework up automatically.
⚡ Useful Commands
npm run generate-scripts # Regenerate package.json scripts and test configs
python scripts/get_frameworks.py # Comma-separated framework IDs (used by the CI matrices)
npm run verify # Validate frameworks.json and config.json, then check, test and lint
npm run test:vue # Run the tests against one framework