
Write HTML. Render video. Built for agents.
Dext is a native Delphi framework for building web apps, REST APIs, data layers, background work, and testable app structure in one package. It brings together DI, ORM, Minimal APIs, Data API generation, SSR, HTMX, telemetry, and MCP tools for agent workflows.
Builders who are creating Delphi apps, APIs, and agent-connected services and want a reusable foundation.
You can build and ship native Delphi systems with one framework instead of assembling separate libraries for each layer.
Provides singleton, transient, and scoped services, plus configuration binding with `IOptions`-style patterns.
Supports Minimal APIs, controllers, middleware, HTTP clients, and Data API generation from entities.
Includes Unit of Work, transactions, change tracking, query building, JSON support, and stored procedure commands.
Adds testing helpers such as auto-mocking, snapshots, and web application factory style tests.
Exposes Delphi business rules through MCP tools and includes agent-facing docs and skills.
Provides a built-in dashboard for logs, SQL tracing, latency, and spans.
Uses zero-allocation parsing paths and SIMD-based operations for high-throughput work.
tms server-enable community tms install dotpas.dext
Lê em português? Este README está em inglês. A versão completa em português — com os mesmos exemplos, o livro e o mapa de features — está em README.pt-br.md. Se o português for mais confortável, clique e leia o documento inteiro por lá, em vez de passar o olho num atalho.
Native full-stack for Delphi.
The Delphi compiler was never the bottleneck. The missing piece was the infrastructure.
For years, a modern Object Pascal backend meant stitching a dozen libraries: one for DI, one for HTTP, one for ORM, one for tests. Each with its own dialect. None of them slept in the same house.
Dext 1.0 is that infrastructure. One ecosystem — dependency injection, ORM, web pipeline, telemetry, and testing — compiled native. No JIT. No cold start. No patchwork.
"Simplicity is Complicated." — Rob Pike
A Minimal API fits on one screen because the engine underneath does not. UTF-8 JSON, DI, binding, validation, Direct-to-JSON: the ceremony lives in the framework.
"Make what is right easy and what is wrong difficult." — Steve "Ardalis" Smith
Reading a catalog is an entity. Changing the world is a command with a rule. The test is born in the constructor. With Dext, the right path is the short one.
And it is Apache 2.0: free for the twenty-year ERP and for the product that does not have a name yet.
If the team is glancing at C# because “Delphi has no industry-standard stack,” Dext closes that gap without rewriting the system.
Functional parity with ASP.NET Core and Entity Framework Core, in the language you already ship, plus what the managed runtime does not give away: a native binary, a small memory footprint, instant startup.
This is not a feature catalog. It is a real corporate product — Dext Faturamento — built from scratch across five labs: Minimal APIs, persistence, multi-tenant SaaS, JWT, jobs, Redis, Hubs, Docker, gRPC, and tools for AI agents. The model stays yours. The agent does not get to invent SQL.
Desenvolvimento Web Profissional com Delphi e Dext Framework — Cesar Romero, 1st edition, 2026. ISBN 978-65-02-32503-2.
The English edition is in final review.
The README is the taste. The map lives under Docs.
The Portuguese editions of the same docs live under Docs/Book.pt-br and Docs/Features_Implemented_Index.pt-br.md.
[DataApi] generating REST from the entity.TAsyncTask, cancellation tokens, async REST client. No hand-rolled TThread.An endpoint with DI and model binding does not ask for ceremony:
program MyAPI;
uses Dext.Web;
begin
var App := WebApplication;
App.MapGet('/hello', function: string
begin
Result := 'Hello from Dext! Modern full-stack for Delphi.';
end);
App.MapPost<TUserDto, IEmailService, IResult>('/register',
function(Dto: TUserDto; EmailService: IEmailService): IResult
begin
EmailService.SendWelcome(Dto.Email);
Result := Results.Created('/login', 'User successfully registered');
end);
App.Run(8080);
end.
Convention over Configuration. The class becomes a table — and, if you want, an API:
[Table]
[DataApi('/api/orders')]
TOrder = class
private
FId: IntType;
FStatus: Prop<TOrderStatus>;
FNotes: StringType;
FTotal: Nullable<CurrencyType>;
FItems: Lazy<IList<TOrderItem>>;
public
[PK, AutoInc]
property Id: IntType read FId write FId;
property Status: Prop<TOrderStatus> read FStatus write FStatus;
property Notes: StringType read FNotes write FNotes;
property Total: Nullable<CurrencyType> read FTotal write FTotal;
property Items: Lazy<IList<TOrderItem>> read FItems write FItems;
end.
No more magic strings that fail in production. Dext builds the query AST in Pascal:
var O := Prototype.Entity<TOrder>;
var Orders := DbContext.Orders
.Where((O.Status = TOrderStatus.Paid) and (O.Total > 1000))
.Include('Customer')
.Include('Items')
.OrderBy(O.Date.Desc)
.Take(50)
.ToList;
DbContext.Products
.Where(Prototype.Entity<TProduct>.Category = 'Outdated')
.Update
.Execute;
TThread complexity becomes a pipeline. Thread pool, chaining, a safe return to the UI:
var CTS := TCancellationTokenSource.Create;
TAsyncTask.Run<TStream>(
function: TStream
begin
Result := AsyncClient.DownloadStream('https://api.company.com/data', CTS.Token);
end)
.Then<TReport>(
function(Stream: TStream): TReport
begin
Result := JsonSerializer.Deserialize<TReport>(Stream);
Stream.Free;
end)
.OnComplete(
procedure(Report: TReport)
begin
ShowReport(Report);
end)
.OnException(
procedure(Ex: Exception)
begin
ShowError('Process failed: ' + Ex.Message);
end)
.Start;
JSON, YAML, User Secrets, environment variables, command line — Twelve-Factor order:
var Builder := WebApplication.CreateBuilder;
Builder.Configuration
.AddJsonFile('appsettings.json')
.AddYamlFile('config.yaml')
.AddEnvironmentVariables;
Builder.Services
.Configure<TDatabaseSettings>(Builder.Configuration.GetSection('Database'))
.AddSingleton<IEmailService, TSmtpEmailService>
.AddScoped<IOrderRepository, TDbOrderRepository>;
var App := Builder.Build;
TEntityDataSet puts POCOs on the DBGrid, FastReport, and the Object Inspector. Real design-time: TFields and live data in the IDE, without compiling the project.
Everyone ships CRUD. 1.0 was built for what comes next: scale, governance, and the rest of the week.
Full REST from the entity — paging, filters, roles, and Swagger — with one attribute:
[Table, DataApi('/api/products')]
TProduct = class
private
FId: IntType;
[Required, MaxLength(100)]
FName: StringType;
FPrice: CurrencyType;
public
[PK, AutoInc]
property Id: IntType read FId write FId;
property Name: StringType read FName write FName;
property Price: CurrencyType read FPrice write FPrice;
end;
App.MapDataApis.Configure<TProduct>(
DataApiOptions.RequireAuth.RequireWriteRole(['admin'])
);
Dext exposes Delphi business rules as tools for agents (Claude, Cursor, Antigravity) over MCP, in the same process:
type
[MCPTool('search_products', 'Search active products with price filters')]
[MCPParam('query', 'Product search query term')]
[MCPParam('maxPrice', 'Optional maximum price filter')]
TSearchProductsTool = class
public
function Execute(const AQuery: string; AMaxPrice: Currency): TList<TProduct>;
end;
Decoupling does not have to kill RAD. Context-menu scaffolding, metadata in the Object Inspector, a DBGrid with real rows before you press F9.
No hand-wired parameters. The procedure becomes a compile-time-checked object:
type
[StoredProcedure('ProcessFiscalNotes')]
TProcessNotesCommand = class
private
FStartDate: TDateTime;
FProcessedCount: Integer;
public
[DbParam('StartDate')]
property StartDate: TDateTime read FStartDate write FStartDate;
[DbParam('ProcessedCount', pdOutput)]
property ProcessedCount: Integer read FProcessedCount write FProcessedCount;
end;
The built-in dashboard collects structured logs, physical SQL, HTTP latency, and Gantt spans — in the background, without stalling the request.
When operations grow, Seq and OpenTelemetry sinks (SigNoz, Datadog) are already in the pipeline.
You include what the solution needs. The rest stays out.
IOptions, Smart Properties.IList / IDictionary without the classic leak; Binary Code Folding against generic bloat.Docs.TAutoMocker, snapshots, WebApplicationFactory, Test Explorer in the IDE.Full features list and modules — the 1.0 index, chapter by chapter.
The short path is TMS Smart Setup. The long path is in the Book.
Dext is a community package. Enable the Community Server once:
tms server-enable community
tms install dotpas.dext
In the GUI: open TMS Smart Setup, enable Community Server in settings, search for dotpas.dext, and click Install.
[!TIP] No Smart Setup yet? Download page.
Paths, Dext.inc, design-time packages:
Recent Delphi frameworks chased convenience with unrestricted allocation. Dext gives the pace back without giving the pain back.
TSpan / UTF-8, without gigabytes of temporary string in the memory manager.Apache License 2.0. Free for open source and for commercial software. Build, ship, embed. No catch.
Dext grows with the people who use it.
Roadmap: Docs/ROADMAP.md. Conduct: CODE_OF_CONDUCT.md.
Stop rebuilding foundations. Spend the energy on the customer's problem. Dext takes care of the rest.
Built with pride for the Delphi ecosystem.
Sign in to join the discussion.
No comments yet. Be the first to say what this is good for.

Write HTML. Render video. Built for agents.
Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps
SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents — swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.
A theoretical reconstruction of the Claude Mythos architecture, built from first principles using the available research literature.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!