- Removed complex nested feature dependencies
- Each app now lists only its direct crate dependencies
- Apps can be tested independently without inter-dependencies
- Simplified structure: Core Infrastructure + Flat App List + Bundles
- Core: automation, drive, cache, directory (always needed)
- Apps: chat, mail, tasks, docs, etc. (independent)
- Bundles: minimal, lightweight, full (convenience)
This makes it easy to test each app individually and matches
the app launcher menu structure.
Verified: cargo check with chat+automation+drive+cache ✅
4.6 KiB
4.6 KiB
App Launcher Integration Guide
Overview
The apps-manifest.json file provides a complete mapping between Cargo.toml features and user-friendly app descriptions for the botui app launcher.
File Location
botserver/apps-manifest.json
Structure
Categories
Apps are organized into 8 categories:
- Communication (💬) - Chat, Mail, Meet, WhatsApp, Telegram, etc.
- Productivity (⚡) - Tasks, Calendar, Project, Goals, Workspaces, etc.
- Documents (📄) - Drive, Docs, Sheet, Slides, Paper
- Media (🎬) - Video, Player, Canvas
- Learning (📚) - Learn, Research, Sources
- Analytics (📈) - Analytics, Dashboards, Monitoring
- Development (⚙️) - Automation, Designer, Editor
- Administration (🔐) - Attendant, Security, Settings, Directory
- Core (🏗️) - Cache, LLM, Vector DB
App Schema
Each app includes:
{
"id": "tasks",
"name": "Tasks",
"description": "Task management with scheduling",
"feature": "tasks",
"icon": "✅",
"enabled_by_default": true,
"dependencies": ["automation", "drive", "monitoring"]
}
Bundles
Pre-configured feature sets:
- minimal - Essential infrastructure (chat, automation, drive, cache)
- lightweight - Basic productivity (chat, drive, tasks, people)
- full - Complete feature set
- communications - All communication apps
- productivity - Productivity suite
- documents - Document suite
Integration with botui
Reading the Manifest
// In botui/ui/suite/js/app-launcher.js
fetch('/api/apps/manifest')
.then(res => res.json())
.then(manifest => {
renderAppLauncher(manifest);
});
Rendering Apps
function renderAppLauncher(manifest) {
const categories = manifest.categories;
for (const [categoryId, category] of Object.entries(categories)) {
const categoryEl = createCategory(category);
category.apps.forEach(app => {
const appCard = createAppCard(app);
categoryEl.appendChild(appCard);
});
}
}
App Card Template
<div class="app-card" data-feature="${app.feature}">
<div class="app-icon">${app.icon}</div>
<div class="app-name">${app.name}</div>
<div class="app-description">${app.description}</div>
<div class="app-toggle">
<input type="checkbox"
${app.enabled_by_default ? 'checked' : ''}
${app.core_dependency ? 'disabled' : ''}>
</div>
${app.dependencies.length > 0 ?
`<div class="app-deps">Requires: ${app.dependencies.join(', ')}</div>`
: ''}
</div>
Backend API Endpoint
Add to botserver/src/main.rs:
async fn get_apps_manifest() -> Json<serde_json::Value> {
let manifest = include_str!("../apps-manifest.json");
let value: serde_json::Value = serde_json::from_str(manifest)
.expect("Invalid apps-manifest.json");
Json(value)
}
// In router configuration:
api_router = api_router.route("/api/apps/manifest", get(get_apps_manifest));
Compilation Testing
Use the test_apps.sh script to verify all apps compile:
cd /home/rodriguez/src/gb
./test_apps.sh
This will:
- Test each app feature individually
- Report which apps pass/fail compilation
- Provide a summary of results
Core Dependencies
These apps cannot be disabled (marked with core_dependency: true):
- automation - Required for .gbot script execution
- drive - S3 storage used throughout
- cache - Redis integrated into sessions
Feature Bundling
When a user enables an app, all its dependencies are automatically enabled:
- Enable
tasks→ Automatically enablesautomation,drive,monitoring - Enable
mail→ Automatically enablesmail_core,drive - Enable
research→ Automatically enablesllm,vectordb
Syncing with Cargo.toml
When adding new features to Cargo.toml:
- Add the feature definition in
Cargo.toml - Add the app entry in
apps-manifest.json - Update the app launcher UI in botui
- Run
./test_apps.shto verify compilation - Commit both files together
Example: Adding a New App
1. In Cargo.toml
[features]
myapp = ["dep:myapp-crate", "drive"]
2. In apps-manifest.json
{
"id": "myapp",
"name": "My App",
"description": "My awesome app",
"feature": "myapp",
"icon": "🚀",
"enabled_by_default": false,
"dependencies": ["drive"]
}
3. Test
cargo check -p botserver --no-default-features --features myapp
Notes
- Icons use emoji for cross-platform compatibility
- Dependencies are automatically resolved by Cargo
- Core dependencies are shown but cannot be toggled off
- The manifest version matches botserver version