Back in 2008, I was deep in the world of Adobe Flex and AIR—building apps that parsed data with regex, converted PDFs to SWFs, and ran on Flash runtimes. It was a different era: Flash Player was everywhere, desktop apps were built with AIR, and MXML ruled the frontend.
Fast forward to today, and the landscape has shifted dramatically. Flash is dead, mobile dominates, and frameworks like React, Vue, and Svelte lead the charge in modern web development. This post is both a reflection and a comparison—how frontend development has evolved from Flex to React and what we gained (and lost) along the way.
🧱 Structure and Philosophy: MXML vs JSX
Flex relied on MXML, a markup language that looked a lot like XML, for structuring UI. While verbose, it was readable and declarative. In React, we now use JSX, which blends HTML-like syntax directly into JavaScript.
| Feature | Flex (MXML) | React (JSX) |
|---|---|---|
| Syntax | XML-based UI | HTML-in-JS |
| Componentization | Custom MXML Components | Functional/ES6 Class Components |
| Logic | Inline or AS3 | Inline or Hooks/JS |
What JSX improved over MXML was the developer experience: better tooling, ecosystem support, and the power of JavaScript under the hood.
⚙️ State Management Then and Now
In Flex, state was managed via bindings ([Bindable]) and ActionScript logic. While it worked, it was limited and hard to scale.
React brought a revolution in state management—first with useState, then with useReducer, and now with powerful libraries like Redux, Zustand, and Jotai.
You’re no longer tied to a monolithic framework to manage your app’s state—you pick your tools.
🔁 Data Handling: AMF vs REST/GraphQL
Flex developers often used AMF (Action Message Format) for RPC-style communication with a PHP backend (e.g., amfphp). It was fast but tightly coupled.
Today, we lean on REST APIs and GraphQL, with tools like Axios, Apollo, and TRPC providing clear separation between client and server. The emphasis now is on decoupling and developer velocity.
📦 Build Tools & Deployment
Flex apps were often deployed as SWFs or .air files. Deployment meant targeting Flash Player or the AIR runtime.
In 2025, we use tools like Vite, Next.js, or Astro, deploying to CDNs with blazing-fast builds and static generation. Modern apps run in the browser or as PWAs, and deployment is a Git push away with platforms like Vercel or Netlify.
🛠️ Dev Tools: Then vs Now
| Tool | Then | Now |
|---|---|---|
| Editor | Flex Builder (based on Eclipse) | VS Code, WebStorm |
| Debugging | Flash Debugger | Chrome DevTools, React DevTools |
| Package Manager | None | npm, pnpm, yarn |
| UI Kits | Custom/Skin-based | Tailwind CSS, Chakra UI, MUI |
🎯 Lessons from Flex
Despite its demise, Flex taught many of us foundational lessons:
-
Component architecture matters
-
Declarative UIs are powerful
-
Tooling makes or breaks a framework
-
Separation of concerns is critical
Modern web dev is better because of what Flex started. JSX, Web Components, and even things like Flutter owe some DNA to it.
🔚 Wrapping Up
If you were around for the Flex days, you probably have some nostalgia for its simplicity and the joy of building “rich internet applications.” But the web has moved on—and it’s more open, powerful, and flexible than ever.
As we continue building modern apps, it’s worth remembering the lessons from the past. After all, today’s best practices are often rooted in yesterday’s innovations.


