Modernization path

Port a Delphi application to Java and expose its data to cloud workflows.

Migration of Delphi applications (Object Pascal, VCL, FireDAC) to Java 21 and Spring Boot, under the ATLAS methodology. Legacy capture, characterization tests, pattern-by-pattern migration, parity audit, REST API exposure for cloud integration and agentic workflows.

Key figures
1.5:1
ratio measured on Raptor Delphi → TypeScript
1:1 to 1.5:1
projection Delphi → Java, to validate on client POC (Java more verbose than TypeScript)
By batches
incremental delivery, duration set at scoping
ATLAS methodology applied

From scoping to deployment, five structured phases.

Each phase aggregates one or more of the ten ATLAS steps. No phase starts until the previous one has delivered its validated artefact. The ATLAS methodology makes AS/400 migration predictable and auditable.

  1. 01Phase 1

    Scoping

    ATLAS steps
    E1 Intake · E2 Discovery · E2b Functional spec

    Understand the Delphi estate: projects, DFM forms, DataModule, BPL, third-party components, native Windows integrations. Rebuild a functional analysis from the code. Define scope, constraints, success criteria, target architecture choice (web SPA, Vaadin, JavaFX).

    Phase deliverable
    Estate inventory + functional spec + pricing with explicit range
  2. 02Phase 2

    Capture & dependencies

    ATLAS steps
    E2e Capture · E3 Dependency mapping

    Set the ground truth: captured VCL screens, datasets, printed reports, key transactions. Map subsystems, third-party components (DevExpress, TMS, FastReport) and their Java equivalents, FireDAC or dbExpress schemas, Windows COM/OLE integrations to replace.

    Phase deliverable
    Reference transactions and screens bench + complete dependency map
  3. 03Phase 3

    Target architecture

    ATLAS steps
    E4 Target architecture · E4b Pre-migration tests

    Design the target Java architecture: Spring Boot, JPA, managed PostgreSQL, Docker containerization, OpenAPI-documented REST API exposure, separate SPA frontend or Vaadin. Define cloud strategy (Azure App Service, AWS Elastic Beanstalk, GCP Cloud Run, self-managed Kubernetes) and observability. Prepare characterization tests.

    Phase deliverable
    Signed target architecture + test suite + UI mockups if web redesign
  4. 04Phase 4

    Migration & parity

    ATLAS steps
    E5 Migration · E6 Parity validation

    Translate Pascal → Java pattern by pattern: properties → Lombok getter/setter, FireDAC → Spring Data JPA, VCL Form → REST endpoint + frontend component, TObject lifecycle → Java garbage collection. Incremental subsystem migration, parallel runs, internal parity audit per batch. Boundary tests (overflow, nullity, encoding) added to characterization suite.

    Phase deliverable
    Java code + parity audit per subsystem + tracked discrepancy registry
  5. 05Phase 5

    Deployment & handover

    ATLAS steps
    E7 Delivery

    Progressive go-live with Delphi ↔ Java coexistence during transition (duration set at scoping based on risk profile), batched transactional cutover, REST API exposure to cloud workflows and third-party integrations, ops handover to client team with documentation and pair-programming.

    Phase deliverable
    Java application in production + exposed APIs + autonomous client team + maintenance plan
At the core of the ATLAS method

AI to understand Delphi, not to translate it.

In Delphi, business logic is rarely isolated: it lives inside VCL form event handlers, between an OnClick and an OnDataChange. No converter can separate interface concerns from business rules. Automatic conversion therefore carries business logic into the target presentation layer. End-to-end automatic translation isn't a modernization method, it's a debt transfer.

Our approach is the opposite. ATLAS relies on multiple readings of the source code, from several angles. Here, what we read first: vCL form events hiding business rules, FireDAC and dbExpress queries embedded in the UI, and third-party components with no Java equivalent to reimplement. AI comes in as a comprehension accelerator, to decipher years of accumulated business logic, reverse-document uncommented branches, surface the intent behind the code. It doesn't decide and it doesn't translate. It informs the architect's work, who then designs the target architecture and drives the migration pattern by pattern, under parity audit.

This understanding still requires humans who know the source technologies. That's our edge: where Europe and North America face a retirement wave on these skills, Tunisia retains experienced Delphi and Object Pascal developers, paired with Java/Spring architects. Together they ensure continuity between the original business intent and the target system.

Who is concerned

Business context and modernization stakes.

Who runs Delphi today

Delphi (Object Pascal on VCL, then FireMonkey) remains present in industrial SMEs, regional and mutualist banks, insurers, and business software vendors (sectoral ERPs, management applications, scientific and technical software) developed between 1995 and 2015. Its historical strength: RAD productivity (Rapid Application Development) — a single developer could deliver a full desktop application with embedded database, rich forms, and printed reports in a few weeks. Its weakness today: inactive Embarcadero vendor, rapidly thinning Delphi developer pool, client-server architecture incompatible with mobile, modern web, and cloud-native. Adjacent 4GL family: PowerBuilder follows the same migration patterns.

Why migrate now

Three forces drive migration. First, the gradual disappearance of Delphi developers: profiles trained in the 2000s are retiring or reconverting, with almost no new graduates. Second, the accumulated technical debt on third-party components (DevExpress, TMS, FastReport) whose older versions are no longer supported and prevent Windows OS upgrades. Third, and often the trigger, the impossibility of opening the application to modern channels: mobile, web, third-party APIs, cloud workflows, AI agents. Our ATLAS methodology frames this transition predictably, without service disruption.

Why Java — and why this migration opens the application to cloud

Java as a Delphi target makes sense when the target IT ecosystem is Java-dominated (integration with existing Spring applications, Java ERP, Java EE middleware), when the organization has strong internal Java expertise but no C# expertise, or when multi-OS portability is required (Linux server preferred). But the real gain goes beyond a code-for-code port: Spring Boot natively exposes business logic as REST APIs, which transforms a closed desktop application into composable services consumable by cloud workflows (Azure Logic Apps, AWS Step Functions, n8n, Power Automate, Make), AI agents, and third-party integrations. Data trapped in a Paradox database becomes a governed, observable, monetizable API source. If Microsoft dominates the IT, see Delphi to .NET Core. If the goal is true cloud-native web modernization, see Delphi to TypeScript.

Source platform

Delphi (Object Pascal, VCL, FireDAC, dbExpress, third-party components)

Target technology

Java 21, Spring Boot, JPA, PostgreSQL, REST API, SPA or JavaFX frontend

Technology alternatives

Compare target trajectories.

Java 21 + Spring Boot + PostgreSQL + SPA frontend

Default choice: web modernization, native REST API exposure, integration with cloud workflows and AI agents. Separate React or Angular frontend for true modern UX.

Java 21 + JavaFX + PostgreSQL

Confirmed desktop need (offline mode, hardware integration, native performance, internal Windows user constraints). JavaFX only if Java is imposed by the target IT — otherwise .NET Core WinForms is simpler.

Java 21 + Vaadin server-side

Backend-heavy Java team without SPA frontend expertise, low-traffic internal applications, time-to-market over UX. Vaadin hides the frontend but limits interactive richness.

.NET Core 8 or TypeScript (other paths)

Microsoft ecosystem → Delphi to .NET Core (Pascal-C# syntactic proximity). Pure cloud-native web modernization → Delphi to TypeScript (larger rewrite effort but most open target).

Scoping reference

Typical duration and team for this path.

A Delphi to Java migration is planned as a sequence of functional batches, with the cadence set at scoping based on volume, the number of VCL screens, and the target interface (SPA web, Vaadin, or JavaFX desktop). The typical cell combines a Delphi-Java architect, a senior Java tech lead, Java developers (ideally with Pascal or C++ background to understand strict typing and object model), a senior Delphi developer for business knowledge (essential early in the program), a UX designer if web redesign, a QA specialized in characterization tests, and a DBA for embedded database migration. Composition and headcount are not fixed upfront: they are determined after the POC and scoping, once the real work has been measured. Pascal-Java syntactic distance is more pronounced than Pascal-C#: plan deep Java training for transitioning Delphi developers.

Challenges

  • Porting Object Pascal logic to Java while preserving behaviors, event handling, and object lifecycle.
  • Choosing the target interface: separate web SPA (React, Angular), Vaadin server-side, or JavaFX if confirmed desktop need.
  • Migrating embedded databases (Paradox, Firebird, dBase, local SQL Server) or historical DBMS to managed or cloud PostgreSQL.
  • Finding Java equivalents for third-party components (DevExpress VCL, TMS, FastReport, EhLib) without degrading user experience.

ATLAS approach

  • Exhaustive Delphi estate capture: DFM forms, DataModule, BPL, third-party component dependencies, FireDAC schemas, native Windows integrations.
  • Upstream characterization test suite on the legacy as ground truth, automated to enable legacy/target comparisons.
  • Documented pattern-by-pattern migration: Pascal properties → Java getter/setter with Lombok, FireDAC → Spring Data JPA, VCL Form → REST endpoint + SPA frontend, TObject lifecycle → Java garbage collection.
  • Parallel runs Delphi / Java with signed parity audit and systematic business-logic exposure as REST API to open cloud workflows (Azure Logic Apps, n8n, Power Automate, Make, AI agents).

Expected outcomes

  • Java 21 code compliant with modern standards: dependency injection, unit tests, observability, Docker containerization.
  • Automated regression test suite, reusable for future evolutions.
  • Documentation of migrated patterns delivered with the internal classified discrepancy registry.
  • Business data and logic exposed as REST APIs, consumable by cloud workflows, AI agents, and third-party integrations — the application leaves the desktop to become a composable service.
Identified pitfalls and ATLAS response

What we learned on this migration path.

Pitfall 01

Underestimating the Pascal-Java syntactic distance. Unlike C#, Java has no native properties, no delegates, no records before Java 16, automatic memory management via GC (vs explicit TObject lifecycle in Delphi), no native set type, no variants.

ATLAS response

Documented and tested translation patterns: Pascal properties → Java getter/setter with Lombok or Java records, delegates → Java 8+ functional interfaces, Pascal sets → Java EnumSet, variants → generic Object or Java 21 sealed classes. Unit parity tests on each pattern. Principle P1 — tests first, migration second systematically applied.

Pitfall 02

Choosing JavaFX desktop by default without re-evaluating the business need. JavaFX is less maintained than Swing, much less rich than React/Angular for web, and requires the end user to install the Java runtime. For most Delphi applications, it is a false continuity choice.

ATLAS response

Systematic re-evaluation of desktop vs web need during phase E4 Target architecture. If users are internal on Windows, .NET Core WinForms may be simpler. If true modernization is desired, separate SPA frontend (React, Angular) with Spring Boot backend. JavaFX only if Java is imposed and offline need is proven.

Pitfall 03

Not anticipating the handling of Delphi third-party components (DevExpress VCL, TMS, FastReport, EhLib). These components have no direct Java equivalent — concerned screens often have to be rewritten using native target framework primitives (AG Grid for grids, JasperReports or Apache POI for reports, ApexCharts for charts).

ATLAS response

Exhaustive mapping of third-party components from phase E2 Discovery. For each identified component, explicit mapping to its modern Java equivalent and estimation of rewrite effort. Include this effort in the initial scoping — it typically represents 30% to 50% of the total UI effort on a mature Delphi application.

Pitfall 04

Migrating code-for-code without rethinking business-logic exposure. This misses the opportunity to transform the desktop application into services consumable by cloud workflows, AI agents, or third-party integrations — delivering a modern Java that is just as closed as the original Delphi.

ATLAS response

REST-API-oriented target architecture from phase E4: Spring Boot exposes business logic as documented REST endpoints (OpenAPI), with standard authentication (OAuth2, JWT), versioning, observability (Micrometer + Prometheus). The UI consumes the API like any other client — cloud workflow, n8n, Power Automate, AI agent. This is what justifies the migration beyond mere technical debt.

Pitfall 05

Declaring the migration complete after code conversion, without validating real user workflows or functional parity on the client's datasets. Screens may compile and display correctly while breaking a business calculation inherited from a specific Delphi RTL.

ATLAS response

Principle E7 — browser and business workflow validation mandatory before delivery. Parallel runs Delphi / Java on key transactions, automated comparison of results, parity audit with an internal classified discrepancy registry following a CRITICAL / ADAPTATION / COSMETIC grid. No cutover without proven parity on critical workflows.

Cell composition

A specialized cell for this modernization path.

Several distinct profiles, mobilized over the full program duration. Reproducing this cell internally is rarely realistic — the legacy skills shortage and ATLAS expertise depth make outsourcing structurally faster and less risky.

Duration
Set at scoping based on volume and target interface
Volume
Determined after the POC and scoping
Profiles

Delphi ↔ Java architect

Bridge between Object Pascal/VCL and the modern Java ecosystem, able to map Delphi patterns and define Java equivalents

Java Tech Lead

Java 21, Spring Boot, JPA, REST API design, Pascal→Java migration patterns, line-by-line traceability

Java developers

Ideally with Pascal or C++ background to understand strict typing and object model; dedicated Java training for transitioning Delphi developers

Senior Delphi developer

Accumulated business knowledge, legacy code reading, resolving interpretation ambiguities early in the program (essential)

UX designer & frontend

Web ergonomic redesign (React, Angular, or Vaadin), responsive, accessibility — only if web target (not required for JavaFX)

DBA & data migration

Migration of embedded databases (Paradox, Firebird, dBase, local SQL Server) or historical DBMS to PostgreSQL, data parity audit

QA & functional parity

Characterization test bench, legacy/target comparison, ATLAS audit validation

Frequently asked questions

What decision-makers ask about this path.

Why choose Java rather than .NET or TypeScript to migrate Delphi?+

Three cases justify Java: (1) target IT dominated by Java (Spring, JEE, existing integrations), (2) organization with strong internal Java expertise without C# expertise, (3) multi-OS portability required with Linux server preferred. Otherwise, .NET Core is more natural (Pascal-C# syntactic proximity) or TypeScript if the goal is pure cloud-native web. The ATLAS methodology applies to all three targets with the same rigor.

What happens to my Delphi data after migration to Java?+

This is the most underestimated opportunity of this modernization. Data historically trapped in embedded databases (Paradox, Firebird, dBase, local SQL Server) is migrated to managed PostgreSQL (Azure Database for PostgreSQL, AWS RDS, GCP Cloud SQL, or on-premise per strategy). Business logic is exposed as OpenAPI-documented REST APIs by Spring Boot. Concretely, this enables: (1) consumption by cloud workflows (Azure Logic Apps, n8n, Power Automate, Make, AWS Step Functions), (2) integration with AI agents that can query or feed the system, (3) opening to modern channels (mobile, customer portal, partner integrations) without additional redesign. The application leaves the desktop to become a composable service.

How to handle Delphi third-party components (DevExpress, TMS, FastReport)?+

These components have no direct Java equivalent — concerned screens have to be rewritten using native target framework primitives. Typical mapping: DevExpress grids → AG Grid (web side) or JavaFX TableView (desktop side); TMS Aurelius → Spring Data JPA; FastReport → JasperReports, Apache POI, or Stimulsoft Java; EhLib → web spreadsheet components (Handsontable, SpreadJS) or extended JavaFX TableView. This rewrite effort typically represents 30% to 50% of the total UI effort on a mature Delphi application — it must be included in initial scoping, not discovered mid-program.

JavaFX desktop, Vaadin, or separate web SPA — how to choose?+

Separate SPA (React or Angular): default choice for any true web modernization. Modern UX, mobile-friendly, maximum cloud opening, large talent pool. More initial effort but durable investment. Server-side Vaadin: for backend-heavy Java teams without frontend skills, low-traffic internal applications, time-to-market priority. Limits interactive richness. JavaFX desktop: only if desktop need is confirmed (offline mode, hardware integration, native performance) AND if Java is imposed by the target IT. Otherwise, .NET Core WinForms is simpler for staying Windows desktop. The decision is taken in phase E4 Target architecture, not by default.

How much does a Delphi to Java migration cost?+

Three variables drive the cost of a Delphi to Java migration. The share of business logic buried in VCL events, which must be extracted before any porting. The number of third-party components with no Java equivalent, to be reimplemented one by one. And the target UI choice: separate web frontend or JavaFX rich client. Intake measures all three before quoting. Free initial scoping call, 30 minutes to 2 hours.

Can AI migrate Delphi to Java?+

Yes, but not on its own. AI accelerates two things: reading Delphi code (mapping DFM form intent, extracting business logic from VCL events, identifying dead code) and writing target Java code pattern by pattern with traceability. We measure 2x to 3x throughput on legacy migration projects when AI is paired with a structured methodology and systematic human review. What AI does not replace: the Discovery phase (understanding third-party components used, native Windows integrations, specific RTLs), characterization tests written before any target code is touched, and parity audit on real datasets. Our position: AI is the default operating mode (vibe coding) inside the ATLAS methodology — never a replacement for it.

Should we keep Delphi developers after migration?+

Yes, during the Delphi/Java coexistence phase. These profiles remain valuable for two reasons: resolving interpretation ambiguities on business rules undocumented in the original Delphi code, and supporting parity tests on edge cases rarely covered by documentation. Once this business knowledge has been sufficiently absorbed on the Java side, these profiles evolve into architecture, governance, or a new scope. Keeping a senior Delphi developer during the Delphi/Java coexistence phase is non-negotiable — it is the safety net that prevents silent regressions.

How long does a Delphi to Java migration take?+

It depends on volume, number of VCL screens, and modernization ambition. ATLAS delivers in successive functional batches rather than on a monolithic plan: each batch is defined with you at scoping, delivered with validated parity, then the next one starts. The variable that weighs most is not volume — it is the legacy state (obsolete third-party components, native Windows dependencies, accumulated debt) and the target interface choice (web redesign = additional UX effort). A 4 to 6 week POC on the client's actual code measures real productivity and prices the full program reliably.

How does ATLAS guarantee functional parity between Delphi and Java?+

Four combined disciplines. (1) Upstream characterization tests on the Delphi legacy: the suite characterizes behavior before any Java code is touched. (2) Pattern-by-pattern migration with line-by-line traceability — each Pascal→Java transformation is documented and unit-tested. (3) Parallel runs Delphi / Java on client datasets with automated result comparison — target > 99% equivalence on critical paths before cutover. (4) Signed discrepancy registry by the program committee: every identified gap is documented, weighted, arbitrated between Access and the client, and signed as a contractual deliverable. This is what makes the deliverable enforceable: Access does not self-validate. See the full ATLAS methodology.

Considering a Delphi to Java migration?

Three concrete ways to start — from a short diagnosis to a full cell. Our Delphi → Java 21 approach is documented, priced, and applicable from the first meeting, with a 4 to 6 week POC to measure real productivity on your code.