The seed system allows developers to build custom launchers by defining a we-seed.json file that specifies which applications to embed and how to configure the launcher.
A seed file is a JSON configuration that defines:
- Project metadata (name, version, author)
- Host customization (launcher UI, settings)
- Embedded applications (paths, capabilities, commands)
The launcher automatically adapts based on the number of apps:
- Single app: Full-screen layout (no sidebar)
- Multiple apps: Sidebar navigation + app routing
# Clone the WE framework
git clone https://github.com/yourusername/we.git
# Clone applications you want to embed
git clone https://github.com/juntofoundation/flux.git
git clone https://github.com/yourusername/my-app.gitCreate we/we-seed.json:
{
"project": {
"name": "My Custom Launcher",
"version": "1.0.0",
"description": "A custom launcher with my favorite apps",
"author": "Your Name"
},
"host": {},
"ad4m": {},
"apps": [
{
"id": "flux",
"name": "Flux",
"route": "/flux",
"capabilities": ["perspectives", "languages", "agents"],
"paths": {
"projectRoot": "../flux/app",
"dist": "../flux/app/dist",
"devServer": {
"port": 3030,
"host": "localhost"
}
},
"commands": {
"install": "yarn install",
"build": "yarn build",
"dev": "yarn dev"
}
}
]
}cd we
pnpm install
pnpm build
cd apps/we-web
pnpm devOpen http://localhost:3000 to see your launcher!
{
"project": {
"name": "string", // Required: Display name
"version": "string", // Required: Semantic version
"description": "string", // Optional: Description
"author": "string" // Required: Author name
}
}{
"host": {
"ui": {
"bootScreen": {}, // Optional: Custom boot screen schema
"appSettings": {}, // Optional: Custom app settings schema
"enableTemplateSwitching": true // Optional: Allow template switching
}
}
}Note: The launcher shell UI (boot screen, app settings) can be fully customized via inline JSON schemas. See LAUNCHER-UI-CUSTOMIZATION.md for detailed examples and best practices.
Each app in the apps array:
{
"id": "string", // Required: Unique identifier
"name": "string", // Required: Display name
"route": "/path", // Required: Route path (e.g., /flux)
"capabilities": [], // Required: AD4M capabilities (see below)
"paths": {
"projectRoot": "string", // Path to app's project root
"dist": "string", // Path to built app (production)
"devServer": {
"port": 3000, // Dev server port
"host": "localhost" // Dev server host
}
},
"commands": {
"install": "string", // Install command (npm/yarn/pnpm)
"build": "string", // Build command
"dev": "string" // Dev server command
}
}Available AD4M capabilities:
perspectives- Access to AD4M perspectiveslanguages- Language managementagents- Agent operationsfilesystem- File system accessnetwork- Network requests
Capabilities automatically configure iframe permissions (camera, microphone, etc.).
When apps array has 1 app:
- App loads at root route
/ - No sidebar or navigation
- 100% viewport width/height
- Ideal for standalone launchers
When apps array has 2+ apps:
- Sidebar (100px) with navigation buttons
- Each app has its own route
- Click sidebar buttons to switch apps
- Content area fills remaining space
- Edit seed file: Modify
we/we-seed.json - Rebuild:
cd packages/app-framework && pnpm build - Restart dev server:
cd apps/we-web && pnpm dev - See changes: Refresh browser
{
"project": {
"name": "Flux Launcher",
"version": "1.0.0",
"author": "Your Name"
},
"host": {},
"ad4m": {},
"apps": [
{
"id": "flux",
"name": "Flux",
"route": "/",
"capabilities": ["perspectives", "languages", "agents"],
"paths": {
"projectRoot": "../flux/app",
"dist": "../flux/app/dist",
"devServer": { "port": 3030, "host": "localhost" }
},
"commands": {
"install": "yarn install",
"build": "yarn build",
"dev": "yarn dev"
}
}
]
}Result: Full-screen Flux at http://localhost:3000
{
"project": {
"name": "My Multi-App Workspace",
"version": "1.0.0",
"author": "Your Name"
},
"host": {},
"ad4m": {},
"apps": [
{
"id": "flux",
"name": "Flux",
"route": "/flux",
"capabilities": ["perspectives", "languages", "agents"],
"paths": {
"projectRoot": "../flux/app",
"dist": "../flux/app/dist",
"devServer": { "port": 3030, "host": "localhost" }
},
"commands": {
"install": "yarn install",
"build": "yarn build",
"dev": "yarn dev"
}
},
{
"id": "my-app",
"name": "My App",
"route": "/my-app",
"capabilities": [],
"paths": {
"projectRoot": "../my-app",
"dist": "../my-app/dist",
"devServer": { "port": 3040, "host": "localhost" }
},
"commands": {
"install": "npm install",
"build": "npm run build",
"dev": "npm run dev"
}
}
]
}Result: Sidebar with Flux and My App navigation
- Build time:
initializeIntegrations.tsimportswe-seed.jsonvia static import - Module load: Seed is validated and launcher template is generated
- Template registration: Generated launcher replaces placeholder in
templateRegistry - Render time: Template store reads registry and renders launcher
- Runtime: Apps load in iframes with configured permissions
we/
we-seed.json ← Your seed file (REQUIRED)
packages/app-framework/src/
shared/
initializeIntegrations.ts ← Loads seed, generates launcher
integrationComposer.ts ← Generates template from seed
seedLoader.ts ← (unused) Future async loading
registries/
templateRegistry.ts ← Stores generated launcher
- Seed file location: Must be at
we/we-seed.json(workspace root) - Requires rebuild: Changes require
pnpm buildin app-framework - Dev server ports: Ensure no conflicts (Flux: 3030, WE: 3000, etc.)
- Path resolution: Relative paths are from workspace root (
we/)
Launcher not updating?
- Rebuild app-framework:
cd packages/app-framework && pnpm build - Restart dev server:
cd apps/we-web && pnpm dev - Hard refresh browser (Cmd/Ctrl + Shift + R)
App not loading in iframe?
- Check dev server is running (e.g.,
cd flux/app && yarn dev) - Verify port in seed matches actual dev server port
- Check browser console for CORS/permission errors
Sidebar not showing?
- Ensure
appsarray has 2+ items - Check console for "Generating multi-app launcher" message
- Verify each app has unique
routevalue
- Template forking (customize launcher UI beyond seed config)
- Dynamic seed loading (hot-reload without rebuild)
- Seed validation CLI tool
- Production build support