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 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