Skip to main content

Core Concepts

Capela's core concepts are simple but powerful. Here's what you need to know to build effective applications.

Nodes​

Nodes are the building blocks of your application. Each Node represents an entity and automatically gets persisted to the database.

from builtins import Node, Field

class User(Node):
name: str = Field(default="")
age: int = Field(default=0)

def activate(self):
this.is_active = True
return this.is_active

Fields​

Fields define a Node's properties. They're strongly typed and support default values.

class Task(Node):
title: str = Field(default="")
done: bool = Field(default=False)
tags: list[str] = Field(default_factory=list)
preferences: dict[str, bool] = Field(default_factory=dict)

Supported types:

  • Basic: int, bool, float, str, bytes
  • Collections: list[T], dict[K, V], set[T]
  • Custom: Classes that inherit from Model

References and Pointers​

Nodes can reference each other using references and pointers:

from builtins import Node, Field, Pointer, select

class User(Node):
name: str = Field(default="")
profile: Pointer[Profile] = Field(default=None)

def get_reference(self):
return this.make_reference()

def get_user_by_reference(self, reference):
return select(reference)

References and pointers enable:

  • One-to-One relationships
  • One-to-Many relationships
  • Many-to-Many relationships
  • Efficient data access and traversal

ChefProcess​

ChefProcess adds AI capabilities to your application. It consists of:

  • ChefProcess: Handles AI interactions
  • ChefMessage: Messages between your app and the AI
  • Image Class: Defines the AI's capabilities and behavior
  • Message List: Stores conversation history
class MyAIImage(Node):
"""
You are a helpful assistant designed to be a personal trainer.
You help users with fitness goals, training schedules, and exercise advice.
"""

def get_exercise_info(self, exercise_id: str) -> str:
"""Get information about an exercise."""
return f"Here's how to do the {exercise_id} exercise."

Partitions​

Partitions create isolated instances of your application:

# Create a partition
http POST 'http://localhost:22440/partitions' object_type=ai.asmc.hello.hello.Hello

Partitions provide:

  • Data isolation
  • Application scaling
  • State management
  • Access control

API Routes​

Capela generates API routes automatically:

  • Call functions with /d/:

    http POST 'http://localhost:22440/d/!partition_id/say_hello_to' name="Alice"
  • Get state with /g/:

    # Fetch a value
    http GET 'http://localhost:22440/g/!partition_id/count'

    # Set a dictionary value
    http POST 'http://localhost:22440/g/!partition_id/users/"Alice"' --raw '{"name": "Alice", "age": 30}'

    # Set an array value
    http POST 'http://localhost:22440/g/!partition_id/users/0' --raw '{"name": "Alice", "age": 30}'

WebSocket SDK​

The WebSocket SDK provides real-time interaction with your application:

import { getValue, setValue, subscribe } from 'capela-sdk';

// Get a value
const value = await getValue("!partition_id/variable_name");

// Set a value
await setValue("!partition_id/variable_name", new_value);

// Subscribe to changes
const unsubscribe = subscribe("!partition_id/variable_name", (newValue) => {
console.log("Value changed:", newValue);
});

// Later, when you want to stop listening:
unsubscribe();

Features:

  • Real-time state synchronization
  • Automatic reconnection handling
  • Type-safe value access
  • Efficient caching and subscription management
  • Children access and nested value support
  • Robust error handling

Explore Capela Core Concepts​