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 providers
  • custom - 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