What's New in Kittox 4
Kittox is the fourth generation of the Kitto framework. It is a complete rewrite of the client-side technology that preserves Kitto's core philosophy: declarative YAML-driven development where the server generates the UI.
This page is a scannable index of what Kittox adds over Kitto 1/2/3. Each feature is summarized in one or two lines — follow the link for the full reference.
Why Kittox
Kitto 3 was based on ExtJS, a paid commercial library that required a matching Delphi class for every client-side component — tight coupling that made the framework rigid, expensive and hard to evolve. Kittox replaces it with HTMX + AlpineJS + CSS custom properties: a lightweight, open-source stack where the server emits standard HTML fragments and HTMX handles partial page updates.
| Kitto 1/2/3 | Kittox | |
|---|---|---|
| Client library | ExtJS 3/4/7 (commercial, ~1.5MB) | HTMX + AlpineJS (~30KB total) |
| UI generation | Server emits ExtJS JavaScript code | Server emits HTML + HTMX attributes |
| Icons | ExtJS icon sprites (PNG) | 2122 Material Design SVG icons, 5 styles |
| Theming | ExtJS themes (SCSS compilation) | CSS custom properties (instant light/dark/auto) |
| License | Apache 2.0 + ExtJS commercial | Apache 2.0 (core) + AGPL/Commercial (enterprise) |
| Client-side coding | Required for any customization | Almost zero — HTML templates suffice |
New Client Architecture
The server generates HTML fragments that HTMX swaps into the DOM — no JavaScript framework to learn. All interactions (paging, filters, form submit, navigation) use HTMX attributes declared in the generated HTML, and client libraries load only when needed.
New Controllers
Core (Open Source)
| Controller | Description | Kitto 3 equivalent |
|---|---|---|
| List | Data grid with CRUD toolbar, paging, sorting, column layouts, row colors, card mode | TKExtGridPanel |
| GroupingList | Collapsible group headers with expand/collapse | TKExtGroupingGridPanel |
| Form | Data-aware editing with field pages, detail tabs, ViewMode/EditMode | TKExtFormPanelController |
| Wizard | Multi-step forms with Back/Next/Finish and per-step validation | new |
| BorderPanel | Layout with North/South/West/East/Center regions | TKExtBorderPanelController |
| TabPanel | Tabbed container with closable tabs | TKExtTabPanelController |
| FlexPanel | CSS Flexbox layout with configurable gap and wrapping | new |
| TreePanel | Hierarchical menu tree | TKExtTreePanel |
| TilePanel | Metro-style colored tile menu (mobile-friendly) | new |
| TemplateDataPanel | Custom HTML templates for read-only data display | new |
| HtmlPanel | Static HTML content | TKExtHtmlPanel |
| StatusBar | Status bar with text and icon | TKExtStatusBar |
| ToolBar | Horizontal toolbar menu | TKExtToolbar |
| ThemeSwitcher | Live Light / Auto / Dark theme picker, persisted per-app | new |
| LanguageSwitcher | Language dropdown with flags — per-session switch, on login and home | new |
Enterprise (AGPL-3.0 / Commercial)
| Controller | Description | Kitto 3 equivalent |
|---|---|---|
| ChartPanel | Chart.js charts (bar, line, pie, doughnut) | TKExtChartPanel (ExtJS charts) |
| CalendarPanel | Interactive event calendar (month/week/day) | new |
| GoogleMap | Google Maps with geocoding and markers | new |
| Dashboard | KPI cards with auto-refresh | new |
In-App Help Chat
A new Help Chat assistant (Core) gives the end user a floating bubble that answers "how do I…?" questions about the running application. Answers come from a pluggable provider: out of the box a deterministic engine (docsearch) searches the KittoX documentation and links the matching page — no API key, offline — while a claude provider adds AI answers grounded on the same docs (RAG). It is opt-in with one line (HelpChat/Enabled: True), context-aware (the toolbar ? button asks about the current screen) and fully localized. See Help Chat.
Notification Center & Background Tools
Long-running tools (large CSV/Excel/PDF exports, reports) can now run as background jobs on a worker pool separate from the HTTP threads: add RunMode: Background to the tool and the request returns immediately instead of blocking on a spinner. A new notification center — a bell in the topbar — tracks each job's progress, completion and errors, and lets the user download the result when ready; jobs are persisted on disk and survive a process restart. Opt-in with Notifications/Enabled: True. See Notification Center & Background Tools.
Mobile Support
Automatic mobile detection renders views fullscreen on phones and tablets, with device-specific home views (HomeTinyView / HomeSmallView / HomeView), a single kxApp.openView() entry point (tabs on desktop, fullscreen on mobile) and a body.kx-mobile styling hook. See Mobile Support.
Attribute-Based Routing (RTTI)
URL routing is a modular system based on Delphi custom attributes and RTTI (inspired by MARS/WiRL): enterprise modules register their own URL handlers just by including the unit — no central dispatch to edit. See Attribute-Based Routing.
REST API (JSON)
Beyond the HTML/HTMX GUI, an application can expose its data views as a REST/JSON web service under /api/v4/{ViewName}, using the same models, business rules (TKRules) and ACL as the GUI over real HTTP verbs:
| Verb | Endpoint | Operation |
|---|---|---|
GET | /api/v4/{View} | list — envelope {data, total}, paging / sort / filters |
GET | /api/v4/{View}/{id} | read one |
POST | /api/v4/{View} | create |
PUT / PATCH | /api/v4/{View}/{id} | update (full / partial) |
DELETE | /api/v4/{View}/{id} | delete |
It is opt-in (Kitto.Web.Rest, no third-party JSON dependency — plain System.JSON), with Bearer/JWT auth, model-level permissions, OpenAPI 3.0 + Swagger UI, and CORS, and is served in every deployment mode. See REST API (JSON).
JWT Authentication
A new Auth: JWT authenticator wraps any other authenticator (DB, TextFile, custom) as its Inner and, on success, issues a self-contained signed JWT in an HttpOnly cookie that replaces the opaque session-id cookie — stateless authentication that survives restarts and multiple instances, carrying the user profile (name, db, lang, roles) in the credential itself. It is opt-in and additive (apps on Auth: DB / TextFile are untouched), supports HS/RS/ES signing algorithms and sliding expiration, and is the extension point for external identity providers (OIDC / SAML). Being a wrapper, it must forward to its inner authenticator every decision that depends on the credential store: that contract is enforced by the compiler (TKAuthenticatorDecorator), so an authenticator added to the framework cannot quietly stop working under the JWT envelope. All three sample apps (TasKitto, HelloKitto, KEmployee) run on JWT over three different inner authenticators. See JWT Authenticator.
Access Control via JWT Claim
A new AccessControl: JWT controller reads grant rows from a kx_acl claim that the JWT authenticator snapshots into the token at login — same matching semantics as AccessControl: DB but zero DB hit per check. It is closed-world (anything not granted is denied) and best paired with a layered ACL design; because grants are frozen at login, mid-session permission changes apply only after the next login. See Access Control.
Open Core Licensing
| Component | License |
|---|---|
| Core (List, Form, Wizard, FlexPanel, routing, REST API, database, auth) | Apache 2.0 — free for any use |
| Enterprise (Chart, Calendar, Map, Dashboard) | AGPL-3.0 (open-source apps) / Commercial (closed-source) |
| KIDEx (Visual IDE) | Commercial only |
Separate packages: KittoXCore.dpk (core) and KittoXEnterprise.dpk (enterprise). See Licensing.
Five Deployment Modes
| Mode | Description | New in Kittox |
|---|---|---|
| Standalone | VCL desktop or Windows Service with Indy HTTP | inherited from Kitto 3 |
| Desktop Embedded | WebView2 inside a VCL window — looks like a native desktop app, no browser chrome | new |
| Console | Headless server (Docker-friendly) | new |
| ISAPI (IIS) | Native IIS integration | inherited, fully reworked |
| Apache Module | Native Apache 2.4 integration | inherited, fully reworked |
KIDEx — Visual IDE (Enterprise)
The visual IDE is modernized with RTTI-based property discovery — 6 Delphi attributes (YamlNode, YamlContainer, YamlSubNode, …) replace 215 manual YAML template files, so the IDE discovers properties, enums and sub-nodes straight from annotated classes. The New Project Wizard is reachable from three entry points sharing one template engine — KIDEx standalone, the RAD Studio IDE plugin and the MCP-KittoX project_create_app tool — and scaffolds Win64 projects for any of the four deployment modes, with JWT auth wired by default. See KIDEx.
MCP-KittoX — AI Agent Server (Enterprise)
A new standalone executable, MCPKittoX.exe, ships alongside KIDEx and exposes its functionality to AI agents via the Model Context Protocol — Claude Desktop, Claude Code, Codex, LM Studio and any MCP-compatible client. Agents can scaffold new applications, reverse-engineer Models from a database, generate Views and Layouts, introspect databases, validate metadata and refresh translation files — conversationally, without leaving the agent. Writes are opt-in and the workspace is sandboxed, and a single Enterprise license unlocks both KIDEx and MCP-KittoX.
Foundation shipping now
The base server is functional (STDIO transport, license gating, JSON-RPC envelope) with a growing tool catalog across the meta, project, models, views, layouts, resources, menu, db, config, locale and validate scopes. The live catalog with implementation status is on the MCP-KittoX feature matrix.
See MCP-KittoX for the full tool catalog, setup walkthrough and CLI reference.
Other Improvements over Kitto 3
- Performance: TStringBuilder optimization, AppName cache, FireDAC connection pooling
- Unified Editor Factory: centralized input rendering shared between forms and filter panels
- Draggable dialogs: all modal dialogs can be moved by dragging the title bar
- Toast notifications: brief messages after save/delete operations
- Error handling: DB errors shown as non-fatal dialogs (session preserved), driver prefixes stripped from messages
- Help button: configurable per-view help URL in forms and list toolbars
- Column sorting: click-to-sort with ascending/descending toggle, plus multi-column sort (Ctrl/Cmd/Shift+click) with position badges
IsLargegrid defaults: marking a modelIsLarge: Trueopens its List views empty with server-side paging enabled; overridable per view viaController/AutoOpenandController/PagingTools- Session safety: atomic session creation, session-lost detection with auto-reload
- Timeout handling: configurable AJAX timeout with Retry/Reset dialog
- Localization: per-session language selection, GNU gettext integration
- CSS theming: light/dark/auto via CSS custom properties; the structured, KIDEx-discoverable
Themenode (Theme/Mode+ per-mode palettes) replaces the old flatTheme: <mode>value. See Themes - User-selectable theme (4.0.8): with
Theme/Mode: Auto / UserSelection: True, drop aController: ThemeSwitcherin the GUI and end users pick Light / Auto / Dark live, persisted per-app. See Themes
Migration from Kitto 3
The YAML metadata format is largely compatible. The main changes are:
- Controller names:
GridPanel→List,FormPanel→Form, etc. - ExtJS-specific properties (theme names, ext panel properties) are replaced by HTML/CSS equivalents
UseKitto.pasreplacesKitto.Ext.AllwithKitto.Html.All+ optionalKitto.Web.Enterprise- The
.dprentry point remainsTKStart.Startfor standalone mode
See also
- Release Notes — detailed version history
- Installation — setup or manual install
- Getting Started — create your first app
