Package Ecosystem
Packages are the force multiplier. Install via the Platform Panel and use immediately. The install order
for the core three is strict: AppBuilder → CRUD → Workflow.
The catalogue
AppBuilder core
The React shell. Provides ZangoApp, sidebar navigation, routing, themes, and auth UI.
Routes and menus are configured in App Panel, no frontend rebuild for nav changes. Read the docs →
CRUD core
The data-management layer: BaseCrudView + ModelTable + BaseForm +
CrudHandler. The most commonly used package, since most business UI is CRUD UI. Read the docs →
Workflow
Lifecycle management: statuses, transitions, tags, audit trail. Install after CRUD. Read the docs →
Communication
SMS, email, audio & video. Configure providers (e.g. Infobip), send from code or dashboard. Read the docs →
Appointment
A full scheduling vertical: types, hosts, reminders, custom workflows, CRUD UI.
Packages compose. Pair the Communication package with a workflow done method (when a
case is approved, send the user an SMS), or call it from an AI agent's @tool function.
CRUD in practice
CRUD is the package you reach for most, since most business UI is list, create, edit, and delete on a
model. A BaseCrudView wires a model, a ModelTable, and a BaseForm
into one endpoint, and the CrudHandler React component renders the full screen. A complete
management view is about twenty lines:
from packages.crud.views import BaseCrudView
from packages.crud.table import ModelTable, DateCol, StatusCol
from packages.crud.forms import BaseForm
from .models import Patient
class PatientTable(ModelTable):
columns = ['name', StatusCol('status'), 'doctor', DateCol('modified_at')]
class PatientForm(BaseForm):
class Config:
model = Patient
fields = ['name', 'date_of_birth', 'gender', 'doctor']
class PatientCrudView(BaseCrudView):
model = Patient
table = PatientTable
form = PatientForm
add_btn_title = 'Add patient'
The route-to-component mapping is served at runtime via /appbuilder/initializer/, so adding a
page or changing a menu needs no frontend rebuild. In practice the
plugin writes this view, its table, and its form from your
description.