If you haven’t yet decided what to actually move off TIBCO BusinessWorks and what to retire, that’s the strategic question underneath everything below. Every TIBCO migration starts with the same spreadsheet. Someone exports the estate, and column A fills up with the vocabulary a BusinessWorks shop lives in: BW processes, EMS destinations, a shelf of adapters, Mapper activities full of XPath, Hawk rules, AppManage scripts, an ActiveMatrix layer nobody wants to touch. Column B is supposed to be the answer — the thing each of these becomes on the new platform.
The migration guides you’ll find fill column B with a like-for-like swap. EMS becomes a managed queue, adapters become connectors, XSLT becomes some other transform language. It reads clean, and it’s how you end up rebuilding TIBCO on newer infrastructure with the same shape and the same problems.
The useful version of the component map has three columns, not two: replace, delete, and retire. Some BW components have a direct equivalent you rebuild. Some don’t need an equivalent at all, because a modern iPaaS does that job as a property of the platform. And a whole category was only ever there to compensate for the ESB being a black box, so it leaves when the ESB does.
Here’s the honest map.
BW processes become patterns, not code

A BusinessWorks process is an orchestration: a starter, a chain of activities, transitions between them, error paths. The instinct on migration is to preserve that graph faithfully — every activity gets a corresponding node, every transition a corresponding link. You end up with a one-to-one redraw of the old flow, which means you’ve also preserved every quirk and workaround baked into it over a decade.
Most BW processes aren’t actually bespoke. Strip the TIBCO-specific packaging and what’s underneath is a small set of integration patterns your team already knows by name: a Content-Based Router deciding where an order goes, a Splitter fanning a batch into line items, an Aggregator collecting them back, a Saga holding a multi-step transaction together, a Circuit Breaker keeping one slow downstream from taking out the rest. The Enterprise Integration Patterns vocabulary an ESB taught your team didn’t expire when the industry moved to the cloud.
A modern iPaaS that ships those patterns as first-class building blocks lets you rebuild a standard process as configuration rather than a hand-drawn activity graph. You pick the Content-Based Router pattern; you don’t re-implement routing. That’s the difference between migrating the intent of a flow and transcribing its implementation. The handful of genuinely custom processes — a stateful orchestration someone spent a quarter getting right — still get rebuilt deliberately, by a human, with tests. But those are the exception in any estate, not the rule.
Rebuild BW processes from the pattern they implement, not the activity graph they happen to be drawn as.
EMS and the adapter shelf: replace the queue, delete the adapters
This is where the three-column distinction earns its keep, because these two live in different columns even though the spreadsheet lists them side by side.
TIBCO EMS is a real messaging broker, and the asynchronous patterns running through it are real integration. That’s a replace. A modern iPaaS connects natively to the brokers an enterprise estate already runs — IBM MQ, ActiveMQ, Kafka, RabbitMQ, NATS, JMS-style destinations — so an EMS-mediated flow moves onto messaging you already operate or already trust, without the per-core licensing that made scaling EMS an accounting exercise. You keep the messaging semantics; you drop the meter.
The adapter shelf is different. TIBCO adapters — the SAP adapter, the JDBC adapter, the file adapter, each licensed, each proprietary, each a small integration project of its own — exist because the ESB needed a paid, TIBCO-specific bridge to every system. On a platform where enterprise connectors ship in the box (SAP S/4HANA and ECC, NetSuite, Salesforce, databases, SFTP, EDI X12 and EDIFACT), most of that shelf doesn’t get replaced. It gets deleted. The connector is a property of the platform, not a separate SKU you license and maintain. The migration line item for “SAP adapter” becomes zero, not “SAP connector, TBD.”
The queue is worth replacing. The adapter shelf was a tax you were paying to make the ESB talk — and it’s the first thing that leaves.
XSLT, Mapper, and XPath: keep the logic, drop the ceremony
Transformation is where migrations quietly bleed time. A BW estate is full of Mapper activities and XSLT stylesheets, some of them thousands of lines, encoding mappings nobody has read since they were written. The vendor pitch to “automatically convert your XSLT” sounds like a shortcut and is usually a trap. A machine translation of transformation logic no human documented produces new transformation logic no human understands. You haven’t removed the opacity. You’ve moved it.
The transformations worth carrying forward are the business rules inside the ceremony — this field maps to that field, this code list translates to that one, this amount gets recalculated this way. On a modern iPaaS those live as JSONata expressions and mapping steps that read like the rule they encode, not as XSLT wrapped around it. And for the genuinely gnarly transformation — the one with a decade of special cases that no declarative language expresses cleanly — you don’t contort it. You drop into a JavaScript or Python script step, or a container step, and write it as code, in the open, with the rest of the flow. The escape hatch is the point: you’re never forced to express hard logic in a language that fights you, the way an XSLT-only estate forced you to.
Migrate the mapping rules, not the XSLT that happened to carry them; keep a real code escape hatch for the few that resist.
Hawk, Administrator, and AppManage: don’t replace them, retire the whole category

This is the column-C insight most migration guides miss, because they’re written to sell a replacement for every box.
A large share of a TIBCO estate isn’t integration at all. It’s the machinery that exists to operate the integration: Hawk rules watching for failures the platform couldn’t surface itself, AppManage scripts stitching together a deployment the platform couldn’t do natively, the Administrator UI as the one place to see what ran. You don’t migrate these to equivalents. They’re compensation for an ESB that couldn’t observe or version itself, and on a platform that can, the whole category evaporates.
Observability stops being a bolt-on. When every step of a migrated flow emits an OpenTelemetry trace — the same OTLP your existing stack already ingests — you don’t build Hawk rules to infer that something failed; you read the trace, and a failed delivery shows you its full payload and lets you replay it. That telemetry exports to your own Datadog, Grafana, Honeycomb, or Splunk, on every tier, so the observability belongs to you rather than to a vendor dashboard.
Deployment stops being AppManage. When a flow is a real file in your Git repository, versioned and branchable and reviewable through the same GitHub or GitLab flow every other artifact you ship already goes through, “how do we deploy this” has the same answer as everything else you build. To be precise about the boundary: you branch inside the platform and raise pull requests through your existing provider’s flow — the review and merge happen where your team already does them, not in a bespoke platform UI.
The migration table gets shorter here, not longer. Three TIBCO components map to zero replacements and one platform property.
The operational tooling around an ESB is column C: you don’t rebuild Hawk or AppManage, you retire the reason they existed.
The map, in one table
| TIBCO component | What it becomes | Column |
|---|---|---|
| BW process | A native EIP pattern (router, splitter, saga) as config | Replace |
| EMS destination | A native broker connector (Kafka, IBM MQ, MQ, JMS) | Replace |
| Adapter (SAP, JDBC, file) | A built-in connector — no separate SKU | Delete |
| XSLT / Mapper / XPath | JSONata mapping, with a script-step escape hatch | Replace |
| Hawk / Administrator / AppManage | OpenTelemetry + Git you own | Retire the category |
The shape of a good migration is right there: a short replace list of genuine integration, a delete list of proprietary bridges you stop paying for, and a whole retire category of tooling that only existed to compensate for the ESB’s blind spots. The estate that lands on the new platform is smaller than the one you left, because a lot of TIBCO was TIBCO managing itself.
Where this doesn’t apply
If your BW estate is genuinely, deeply custom — heavy stateful orchestration, exotic protocols, transformation logic that’s effectively an application — then the delete and retire columns shrink and the replace column does most of the work, and the migration is real engineering however you slice it. The component map doesn’t make hard integration easy. What it does is stop you from treating easy integration as hard, and from carrying forward the parts of TIBCO that were never yours to begin with.
This is one facet of a larger argument about renting versus owning your integration layer — a migration is simply the moment you get to choose which one you’re buying.
Koodisi is built on that choice: integrations as versioned Git files, OpenTelemetry on every tier, native EIP patterns and enterprise connectors, and no per-execution billing so a month-end spike doesn’t become an overage invoice. It starts at $399/mo for the Professional tier, with no required implementation partner. You can rebuild one real BW flow on the permanent Community tier — 30 active workflows, 1,000 executions a month, no credit card — and see how much of your column A turns out to be column C.