App Manifest
Define your Fiberwise app configuration, metadata, and permissions.
Overview
The app manifest (app_manifest.yaml
) is the configuration file that defines your Fiberwiseapplication. It specifies app metadata, data models, routes, agents, functions, and other components.
Basic Structure
Every Fiberwiseapp requires an app_manifest.yaml
file in the root directory:
app:
name: My App
app_slug: my-app
version: 1.0.0
description: A description of my app
entryPoint: index.js
icon: fas fa-rocket
category: productivity
publisher: Your Name
models:
- name: User
model_slug: users
# ... model configuration
routes:
- path: /
component: main-app
title: Home
agents:
- name: assistantAgent
agent_type_id: llm
# ... agent configuration
functions:
- name: processData
# ... function configuration
App Section
The app
section defines basic application metadata:
Field | Type | Required | Description |
---|---|---|---|
name |
string | Yes | Display name of the app |
app_slug |
string | Yes | URL-safe identifier (lowercase, hyphens only) |
version |
string | Yes | Semantic version (e.g., "1.0.0") |
description |
string | No | Brief description of app functionality |
entryPoint |
string | Yes | Main JavaScript file (typically "index.js") |
icon |
string | No | FontAwesome icon class (e.g., "fas fa-rocket") |
category |
string | No | App category: simple, productivity, communication, utility |
publisher |
string | No | Name of the app publisher/developer |
Models Section
Define data models for your app. Each model creates a database table accessible via the Data API:
models:
- name: Chat
model_slug: chats
description: Chat session container
fields:
- name: Chat ID
field_column: chat_id
type: GENERATED_UUID
required: true
is_primary_key: true
description: "Auto-generated unique identifier"
- name: Title
field_column: title
type: string
required: true
default: "New Chat"
- name: Created At
field_column: created_at
type: timestamp
default: CURRENT_TIMESTAMP
is_system_field: true # System timestamp field
- name: User ID
field_column: user_id
type: integer
required: true
default: CURRENT_USER
is_system_field: true # System field for user isolation
Model Fields
Field | Type | Required | Description |
---|---|---|---|
name |
string | Yes | Human-readable field name |
field_column |
string | Yes | Database column name (lowercase, underscores) |
type |
string | Yes | Data type: string, integer, float, boolean, timestamp, uuid, text, json, GENERATED_UUID |
required |
boolean | No | Whether field is required (default: false) |
is_primary_key |
boolean | No | Whether field is the primary key |
default |
any | No | Default value (use "CURRENT_TIMESTAMP" for auto timestamps) |
is_system_field |
boolean | No | Mark as system field (true for user_id to enable automatic user isolation) |
Routes Section
Define app routes and their associated components:
routes:
- path: /
component: main-app
title: Home
icon: fas fa-home
- path: /settings
component: settings-page
title: Settings
icon: fas fa-cog
Agents Section
Define agents that can be used within your app:
agents:
- name: chatAgent
agent_type_id: llm
version: 0.0.1
description: Chat assistant agent
agent_config:
model: gpt-4
temperature: 0.7
system_message: You are a helpful chat assistant.
Agent Types
llm
- Large Language Model agents that use configured LLM providerscustom
- Custom Python agents with user-defined code
📚 Learn More About Agent Types
For comprehensive documentation on agent types, configuration options, use cases, and best practices, visit our dedicated Agent Types guide.
Functions Section
Define executable functions for your app:
functions:
- name: processUserInput
description: Process and validate user input
input_schema:
type: object
properties:
message:
type: string
description: User message to process
output_schema:
type: object
properties:
processed_message:
type: string
implementation: |
async def run(input_data):
message = input_data.get("message", "")
processed = message.strip().lower()
return {"processed_message": processed}
Complete Example
Here's a complete example of a chat app manifest:
app:
name: Activation Chat
app_slug: activation-chat
version: 0.0.21
description: A chat application that uses agent activations and dynamic data as the message store
entryPoint: index.js
icon: fas fa-comments
category: simple
publisher: FIberwise
models:
- name: Chat
model_slug: chats
description: Simple chat session container
fields:
- name: Chat ID
field_column: chat_id
type: GENERATED_UUID
required: true
is_primary_key: true
description: "Auto-generated unique identifier"
description: Primary key used as chat_id in agent activation context
- name: Title
field_column: title
type: string
required: true
default: New Chat
- name: Created At
field_column: created_at
type: timestamp
default: CURRENT_TIMESTAMP
is_system_field: true # System timestamp field
- name: User ID
field_column: user_id
type: integer
required: true
default: CURRENT_USER
is_system_field: true # System field for user isolation
routes:
- path: /
component: chat-app
title: Chat
icon: fas fa-comments
agents:
- name: chatAgent
agent_type_id: llm
version: 0.0.2
Best Practices
- Use semantic versioning - Increment versions properly (major.minor.patch)
- Descriptive naming - Use clear, descriptive names for models and fields
- Primary keys - Always define a primary key for each model
- Required fields - Mark essential fields as required
- Documentation - Include descriptions for models and complex fields
- Consistent naming - Use consistent naming conventions throughout
Validation
Fiberwisevalidates your manifest during app installation. Common validation errors include:
- Missing required fields (name, app_slug, version)
- Invalid app_slug (must be lowercase with hyphens only)
- Duplicate field_column names within a model
- Missing primary key in models
- Invalid data types