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 floor.
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 floor. One ecosystem — dependency injection, ORM, web pipeline, telemetry, and testing — compiled native. No JIT. No cold start. No patchwork.
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.
- Dext vs .NET: architecture — modern patterns on a native compiler.
- Feature-by-feature matrix — 60+ items side by side.
- ORM capabilities — DbContext, change tracking, JSON, lazy/eager.
- Enterprise licensing — why Apache 2.0 is safe for commercial use.
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.
- Print in Brazil (UICLAP): loja.uiclap.com/titulo/ua197387
- Paperback on Amazon: amazon.com/dp/6502325033
- Kindle (Brazil): amazon.com.br/dp/B0HGYTSYYY
- Kindle (global): amazon.com/dp/B0HGYTSYYY
- Lab source: github.com/dotpas/book-dext-web
The English edition is in final review.
The README is the taste. The map lives under Docs.
- The Dext Book — the official guide: install, Minimal APIs, ORM, security, real-time, CLI, MCP. Start with Where to start and Installation.
- Complete features index — everything 1.0 ships, organized by module, with the implementing unit.
- .NET comparison pack — for the meeting where someone asks “why not migrate?”
The Portuguese editions of the same docs live under Docs/Book.pt-br and Docs/Features_Implemented_Index.pt-br.md.
- High-throughput APIs — Minimal APIs, Controllers, or
[DataApi]generating REST from the entity. - Web applications — SSR with the native template engine or Web Stencils, HTMX without a heavy SPA.
- Real concurrency —
TAsyncTask, cancellation tokens, async REST client. No hand-rolledTThread. - Mobile backends — the same API for iOS and Android, with JWT, rate limits, and health checks.
- Legacy that still has to run — DataSnap, ISAPI/Apache, VCL. Dext lands as a modern foundation without erasing twenty years of ERP.
- Jobs, microservices, IoT — persistent background jobs, MQTT, gRPC, Redis.
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.
📸 From the physical database to live data on the form
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.
- Core — DI (Singleton, Transient, Scoped), cached RTTI,
IOptions, Smart Properties. - Collections —
IList/IDictionarywithout the classic leak; Binary Code Folding against generic bloat. - ORM — Unit of Work, transactions, seven dialects, JSON/JSONB, soft delete, batch.
- Web — Minimal APIs, Controllers, DataAPI, middleware, Hubs/WebSockets, HTTP/2, HTMX, http.sys / epoll.
- AI — native MCP server; skills for Cursor, Claude, and Copilot under
Docs. - Testing —
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.dextIn 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:
- Tier 1: Delphi 10.4 Sydney, 11 Alexandria, 12 Athens.
- Tier 2: 10.1 Berlin – 10.3 Rio, with limitations (no inline vars).
- Compile floor: XE2+, with Indy fallback below XE8.
- Dependencies: none required. HTTP uses Indy (already in Delphi) — subject to evolution.
- Web Stencils: Delphi 12.2+ (Windows).
Recent Delphi frameworks chased convenience with unrestricted allocation. Dext gives the pace back without giving the pain back.
- Zero-allocation pipeline — JSON straight through
TSpan/ UTF-8, without gigabytes of temporarystringin the memory manager. - SIMD — parse and compare in AVX2/SSE2 blocks, a response in a handful of CPU ticks.
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.
- Star the repository — the simplest signal that the project exists.
- Real stories — what you built belongs in Discussions.
- Issues and PRs — CONTRIBUTING.md and the features workflow.
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.








