Skip to content

What's New in Kittox 4.0

Kittox is the fourth generation of the Kitto framework. It represents a complete rewrite of the client-side technology while preserving Kitto's core philosophy: declarative YAML-driven development where the server generates the UI.

Why Kittox

Kitto 3 was based on ExtJS, a paid commercial library that required a corresponding Delphi server-side class for every client-side component. This tight coupling made the framework rigid, expensive, and hard to evolve.

Kittox replaces ExtJS with HTMX + AlpineJS + CSS custom properties — a lightweight, open-source client stack where the server generates standard HTML fragments and HTMX handles partial page updates transparently.

Kitto 1/2/3Kittox 4.0
Client libraryExtJS 3/4/7 (commercial, ~1.5MB)HTMX + AlpineJS (~30KB total)
UI generationServer emits ExtJS JavaScript codeServer emits HTML + HTMX attributes
IconsExtJS icon sprites (PNG)2122 Material Design SVG icons, 5 styles
ThemingExtJS themes (SCSS compilation)CSS custom properties (instant light/dark/auto)
LicenseApache 2.0 + ExtJS commercialApache 2.0 (core) + AGPL/Commercial (enterprise)
Client-side codingRequired for any customizationAlmost 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 (pagination, filters, form submit, navigation) use HTMX attributes (hx-get, hx-post, hx-target, hx-swap) declared directly in the generated HTML.

Client-side libraries are loaded only when needed via the TKXScriptRegistry — enterprise modules (Chart.js, EventCalendar) register their JS/CSS in the Delphi initialization section and the page template emits them automatically.

New Controllers

Core (Open Source)

ControllerDescriptionKitto 3 equivalent
ListData grid with CRUD toolbar, paging, sorting, column layouts, row colors, card modeTKExtGridPanel
GroupingListCollapsible group headers with expand/collapseTKExtGroupingGridPanel
FormData-aware editing with field pages, detail tabs, ViewMode/EditModeTKExtFormPanelController
WizardMulti-step forms with Back/Next/Finish and per-step validationnew
BorderPanelLayout with North/South/West/East/Center regionsTKExtBorderPanelController
TabPanelTabbed container with closable tabsTKExtTabPanelController
FlexPanelCSS Flexbox layout with configurable gap and wrappingnew
TreePanelHierarchical menu treeTKExtTreePanel
TilePanelMetro-style colored tile menu (mobile-friendly)new
TemplateDataPanelCustom HTML templates for read-only data displaynew
HtmlPanelStatic HTML contentTKExtHtmlPanel
StatusBarStatus bar with text and iconTKExtStatusBar
ToolBarHorizontal toolbar menuTKExtToolbar

Enterprise (AGPL-3.0 / Commercial)

ControllerDescriptionKitto 3 equivalent
ChartPanelChart.js charts (bar, line, pie, doughnut)TKExtChartPanel (ExtJS charts)
CalendarPanelInteractive event calendar (month/week/day)new
GoogleMapGoogle Maps with geocoding and markersnew
DashboardKPI cards with auto-refreshnew

Server-Side Store

Kittox maintains data stores in server memory across HTTP requests, bringing back a capability from Kitto 1 that was lost in Kitto 2/3:

  • Record state tracking: New, Clean, Dirty, Deleted
  • Transactional master-detail save: master + all detail records saved in a single database transaction (INSERT/UPDATE/DELETE cascading)
  • Detail CRUD in memory: add/edit/delete detail records without DB round-trips until final Save All
  • Blob lazy-loading: blob fields loaded on demand from the session store, no full SELECT needed
  • ViewMode/EditMode state machine: forms toggle between read-only and edit mode with Save All for master-detail

Mobile Support

Automatic mobile detection with fullscreen rendering on phones and tablets:

  • IsModal: controls whether a view appears as a dialog overlay (True for forms) or inline in a tab (False for lists)
  • Maximized: forces the dialog to fill the viewport — automatically True on mobile
  • AllowClose: controls the close button visibility (False for Login)
  • kxApp.openView(): single JS function for view opening from any menu type — desktop opens in tabs, mobile opens fullscreen
  • Home view selection: HomeTinyView (phone), HomeSmallView (tablet), HomeView (desktop)
  • body.kx-mobile CSS class for mobile-specific styling

See Mobile Support for details.

Attribute-Based Routing (RTTI)

Inspired by MARS/WiRL, Kittox features a modular URL routing system based on Delphi custom attributes and RTTI:

pascal
[TKXPath('/kx/view/{ViewName}')]
TKXChartHandler = class
public
  [TKXPath('/chart-data')]
  [TKXGET]
  procedure HandleChartData(
    [TKXPathParam('ViewName')] const AViewName: string;
    [TKXContext] ADataView: TKDataView);
end;

This enables enterprise modules to register their own URL handlers independently — just include the unit and it auto-registers. See Attribute-Based Routing.

Open Core Licensing

ComponentLicense
Core (List, Form, Wizard, FlexPanel, routing, 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

ModeDescriptionNew in Kittox
StandaloneVCL desktop or Windows Service with Indy HTTPinherited from Kitto 3
Desktop EmbeddedWebView2 inside a VCL windownew
ConsoleHeadless server (Docker-friendly)new
ISAPI (IIS)Native IIS integrationinherited, fully reworked
Apache ModuleNative Apache 2.4 integrationinherited, fully reworked

All examples (HelloKitto, TasKitto, KEmployee) include projects for all four modes.

Desktop Embedded Mode

Run your Kittox application inside a native Windows window with an embedded Edge WebView2 browser — no browser chrome, no address bar, looks like a traditional desktop app. See Desktop Embedded.

KIDEX — Visual IDE (Enterprise)

The visual IDE has been modernized with RTTI-based property discovery — replacing 215 manual YAML template files with 6 custom Delphi attributes (YamlNode, YamlContainer, YamlSubNode, etc.). The IDE automatically discovers available properties, enums, and sub-nodes from annotated Delphi classes.

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 and sort arrows
  • 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 themes via CSS custom properties, configurable primary color and font

Migration from Kitto 3

The YAML metadata format is largely compatible. The main changes are:

  • Controller names: GridPanelList, FormPanelForm, etc.
  • ExtJS-specific properties (theme names, ext panel properties) are replaced by HTML/CSS equivalents
  • UseKitto.pas replaces Kitto.Ext.All with Kitto.Html.All + optional Kitto.Web.Enterprise
  • The .dpr entry point remains TKStart.Start for standalone mode

See also

Released under Apache License, Version 2.0.