From Flash to HTML5: How Browser Games Survived the End of an Era

On December 31, 2020, Adobe Flash Player officially reached end of life. Browsers began to refuse to run it. Flash content that had been playable in a tab for twenty-four years — from Homestar Runner cartoons to Zynga farming games to the first decade of tower defense — became, overnight, unrunnable.

This was the largest platform migration in the history of browser gaming. It is also one of the least well-documented, partly because it happened gradually over a decade, and partly because most of the reporting at the time focused on the tech industry angle (security, Apple vs Adobe, mobile) rather than on what actually happened to the millions of small games that had been built on Flash. This piece is the long version of the story, from the point of view of the games themselves: what Flash was, why it mattered, why it died, what replaced it, what survived the migration, and what quietly disappeared.

What Flash actually was

To understand the migration, you have to understand what Flash was — and specifically what it was when it peaked, not what it became in its final decade.

Flash started as FutureSplash Animator, a vector animation tool released by FutureWave Software in 1996. Macromedia acquired FutureWave that same year and renamed the product Flash 1.0. The original use case was vector animation over the low-bandwidth web of the late 1990s — animated banner ads, navigation intros, cartoon shorts. Games came later.

The inflection point was Flash 5 (2000), which introduced ActionScript — a JavaScript-derived programming language that made Flash into a genuine application platform rather than just a vector animator with timelines. A developer could now write a program that ran in a Flash file, responded to input, drew to the screen, and made sounds. That was all you needed to ship a game, and people started shipping them immediately.

Between 2000 and roughly 2012, the browser game industry was Flash. The reasons were four:

1. Universal installation. By the mid-2000s, the Flash Player browser plugin was installed on roughly 98% of desktop browsers. Nothing else in the history of the web has ever matched that reach. If you wrote a Flash game, you could send a link to anyone and they could play it without installing anything, registering for anything, or downloading anything.

2. Consistent runtime. A Flash file looked and behaved the same on Windows, Mac, and Linux, and across every browser that supported the plugin. The web of 2005 was deeply inconsistent — CSS rendered differently on different browsers, JavaScript APIs were half-implemented, audio barely worked — and Flash was an island of stability in the middle of that mess.

3. A real IDE. The Flash authoring tool (later Adobe Animate) was a genuine game-development environment with a timeline, visual asset management, scripting, and one-click export. Indie developers and hobbyists could make something publishable in a weekend. The only comparable environment for browser JavaScript at the time was "text editor + 17 browser-quirk workarounds."

4. Binary asset format. A Flash .swf file was a single bundle of vector art, code, audio, and animation data, compressed and ready to stream. You could send one file, and the player got the whole game. The web did not have an equivalent until roughly 2015.

The golden portal era (2005-2012)

The combination of those four advantages produced a specific cultural moment: the Flash portal era. A small number of websites became the Netflix of browser gaming — you went there, you browsed, you clicked, you played. The ecosystem that emerged is worth naming precisely, because it is where most of the genres we still play today were invented.

Newgrounds (founded 1995, Flash portal from ~2000) was the original. It combined user-submitted games and animations with a genuine community — forums, voting, "Daily Top 5" curation — and the quality of work that passed through it between roughly 2003 and 2012 is breathtaking in retrospect. Alien Hominid, Line Rider, Crush the Castle, and the Kingdom Rush demos all came through Newgrounds first.

Kongregate (founded 2006) professionalised the model. Where Newgrounds was scrappy, Kongregate was corporate-quality: developer revenue share, API integration for achievements, an actively curated front page. Kongregate's closure announcement in 2020 (they ended user game hosting in 2021, pivoting to other business) was one of the most visible moments of the Flash decline.

Armor Games (2004) and CrazyMonkeyGames and AddictingGames filled in the portal landscape. Each had slightly different editorial taste — Armor leaned strategy and RPG, CrazyMonkey leaned arcade, Addicting leaned casual — but all operated on the same basic model: curate, host, monetise with display ads.

Miniclip and Y8 were the European equivalents, and still exist today in HTML5 form, having survived the migration by rebuilding their catalogs. Their survival is one of the underrated stories of the transition.

Individual games from this era are the genre cornerstones of modern browser gaming. Bloons Tower Defense (2007) established tower defense; Desktop TD (2007) established maze TD; Canabalt (2009) established the endless runner; Cookie Clicker (2013) established the idle genre; Agar.io (2015, late-Flash era) established the .io genre. Almost nothing invented on mobile in the same period has as much design influence as the Flash portal era.

The cracks appear (2010-2014)

The story from 2010 onward is one of accumulating structural problems that Flash, as a closed-source Adobe-controlled plugin, could not solve.

Security. Flash Player became one of the most frequently exploited pieces of software on the internet. Zero-day Flash vulnerabilities were a steady drumbeat throughout the 2010s, and every security advisory pushed more enterprise IT departments to disable it. By 2015, many companies were blocking Flash at the firewall. The plugin's code complexity and its deep integration with the browser process made it almost impossible to secure.

Mobile. The iPhone launched in 2007 without Flash support, and Apple's stance hardened in April 2010 when Steve Jobs published Thoughts on Flash — a 1,700-word open letter that enumerated Adobe's failures on performance, security, and power consumption, and formally committed Apple to never shipping Flash on iOS. This was the moment of certainty. If Flash could not run on the fastest-growing browser in the world (mobile Safari), then the universal-installation advantage was over. Android briefly supported Flash on mobile, then dropped it in 2012. By 2013, "mobile browser game" and "Flash game" were disjoint sets.

Performance. Flash had always been a single-threaded interpreted runtime, and browsers around it were getting much faster at running native JavaScript. By 2012-2014, a well-written HTML5 Canvas game could outperform an equivalent Flash game, which was an earthquake — for a decade, the performance argument had been flipped. Modern JavaScript engines (V8, SpiderMonkey) plus hardware-accelerated Canvas and WebGL drawing eliminated Flash's last technical advantage.

Ad-blocking and monetisation collapse. The portal business model depended on display ads, and Flash-based video ads were the single most common vector for the malware and security issues that drove ad-blocker installation. When ad-blockers hit mainstream adoption around 2014-2016, portal revenue collapsed. Portals that were making $5-10 CPMs in 2010 were making $0.50-1.50 CPMs by 2017, and many of them could not survive the drop. This is the economic half of the story that the "Flash was replaced by HTML5" narrative misses: even if Flash had stayed technically viable, the business of Flash games was already dying.

The technologies that replaced it

Flash did not have a single successor. It had four, each replacing one of its capabilities:

Canvas 2D is the direct replacement for Flash's 2D drawing primitives. Standardised in 2012 as part of HTML5, Canvas gives JavaScript a simple imperative drawing API — paint rectangles, arcs, paths, text to a bitmap. It is lower-level than Flash's vector animation system, but a handful of libraries (Pixi.js, Phaser, Construct) layer the missing abstractions on top. Almost every 2D HTML5 browser game today uses Canvas or a Canvas-based library underneath.

WebGL is the GPU-accelerated replacement. Released in 2011, it exposes OpenGL ES 2.0 to JavaScript and lets browser games render thousands of sprites or full 3D scenes at 60 FPS. Flash only got hardware-accelerated 3D in 2011 (Stage3D), and by then WebGL was already shipping. Modern 3D browser games, including most of the ragdoll-physics and driving games in our catalog, run on WebGL.

Web Audio API replaced the Flash audio pipeline. Shipped across browsers between 2012 and 2014, it gives JavaScript real-time audio synthesis, effects, and mixing — on par with native game audio engines. Before Web Audio, HTML5 audio was basically "play an MP3 file;" after it, you could build a synth in a browser tab.

WebAssembly is the newest and most interesting piece. Shipped in all major browsers in 2017, WebAssembly (Wasm) is a compiled bytecode format that runs at near-native speed in the browser. It solves the specific problem that Flash originally solved — "I have a C++ codebase and I want it to run in a browser" — except in an open-standard, secure-by-design, cross-platform way. Games compiled to Wasm (via Emscripten, Rust-wasm, or native Unity/Unreal targets) can match Flash's "single-file bundle, runs everywhere" model while being dramatically more performant.

The four technologies together are more capable than Flash ever was. They just took a while to arrive as a usable stack: Canvas was good enough by 2013, WebGL by 2014, WebAudio by 2015, WebAssembly by 2018. Each year of the migration, the "HTML5 is not ready" objection got weaker, until by the time Flash formally died in 2020, HTML5 was not just equivalent — it was visibly better for most game use cases.

Adobe's timeline

The official deprecation happened in three steps.

In July 2017, Adobe announced the end of life: Flash would be unsupported after December 31, 2020. This gave the industry three and a half years to migrate.

Throughout 2018-2020, browsers progressively made Flash harder to run. Chrome moved Flash from "enabled by default" to "ask before running" to "blocked by default unless specifically allowed." Firefox followed a similar path. Every browser update eroded Flash content's reach further.

On December 31, 2020, Adobe stopped supporting Flash Player. In early 2021, Flash Player began refusing to run content entirely, returning an error message with a link to Adobe's EOL announcement instead. A decade of browser games went dark in a week.

What survived

The migration was not a total loss. Three specific survival strategies worked:

Rebuilding on HTML5. Portals that had enough runway to invest in migration survived. Y8, Miniclip, and Crazy Games are the most visible examples. They rebuilt their catalogs from scratch in HTML5 (or asked developers to), updated their front ends, and continued as HTML5-first portals. The experience for end users barely changed; the underlying tech stack was entirely replaced. Our own PhyFun library is a successor to this lineage — an HTML5-only portal built after the migration, carrying forward the Flash-era editorial model.

Migration to other platforms. Many individual Flash games were ported to Steam, to iOS, or to Android. Bloons Tower Defense, Kingdom Rush, and Plants vs. Zombies all survived because they had mobile versions before Flash died. Cookie Clicker migrated to Steam. Canabalt migrated to mobile. The catch with this strategy is that the free-in-a-browser-tab experience is lost; these games now cost money and require installation. The accessibility regression was real.

Emulation and preservation. Two open-source projects stand out here. Ruffle (ruffle.rs, ongoing) is a Flash Player re-implementation in Rust that compiles to WebAssembly and runs in a browser, with no plugin. It is actively developed and already runs a majority of Flash content from the ActionScript 1/2 era correctly. The Newgrounds archive now ships Flash games through Ruffle by default. BlueMaxima's Flashpoint (flashpointproject.github.io) is a downloadable archive of over 190,000 Flash games and animations — the largest preservation effort in browser-game history. Neither of these replaces live-playable Flash content on the open web, but they keep the cultural record intact.

What didn't survive

Some things genuinely died in the migration, and it is worth being honest about them.

Long-form browser RPGs. The Flash era had extraordinary browser RPGs — Sonny, Epic Battle Fantasy, Dungeon Developer — that were 5-to-15-hour games built around save states and character progression. Almost none of those made the jump to HTML5. The economics did not work: by the time HTML5 was ready, ad CPMs had collapsed, and the "free browser RPG" business model could no longer support the dev time a good RPG requires.

Animation-heavy platformers. Flash's vector timeline made it cheap to author hand-animated platformers in the Alien Hominid/Super Mario World vein. HTML5's animation story is comparatively primitive — you are drawing bitmap frames or running a skeletal animation system, and neither matches the ease of the Flash timeline. Several beloved indie studios pivoted away from the genre entirely.

The "submit your game to a portal" economy. The default pathway for an indie developer in 2010 was to make a Flash game and submit it to Kongregate or Armor Games for distribution and ad revenue share. That pathway no longer exists. Modern indie developers targeting browser play usually go direct: their own site, itch.io, or a direct Steam release. The portal intermediary is mostly gone, and the discovery ecosystem for small browser games is weaker because of it.

Small multiplayer experiments. Flash had rudimentary networking, but the combination of Flash + Java servers + open sockets made it relatively easy to ship small-scale multiplayer games in the mid-2000s. When that stack died, the replacement (WebSockets + Node.js) was technically better but organisationally harder. A lot of ambitious small-multiplayer Flash prototypes never found a modern home.

The state of the art in 2026

HTML5 is now the default, and the question "how do I ship a browser game" has a clear answer for the first time in fifteen years. A modern browser game is typically built on one of four stacks:

  • Canvas + Phaser or Pixi.js — the default for 2D games. Lightweight, mature, wide framework support.
  • WebGL + Three.js or Babylon.js — the default for 3D, including the .io multiplayer wave and modern physics games.
  • Unity/Unreal WebGL export — used when a team wants an existing native codebase to run in the browser. Heavy initial download but full engine features.
  • Rust/WebAssembly with Bevy, Macroquad, or native WebGPU — the newest stack, used for cutting-edge physics and graphics work that pushes the browser's limits.

And WebGPU, shipping across all major browsers in 2023-2025, is doing to WebGL what WebGL did to Flash — offering an order of magnitude more performance headroom and enabling a generation of games that would have been impossible to run in a tab five years ago.

What to play today

The games in our catalog are all HTML5. Many of them are direct descendants of Flash-era designs — same core loop, same genre, different underlying engine. If you grew up on Flash portals, the specific titles will be unfamiliar but the feel will be immediate.

For the classic-puzzle corner of the old Flash portal experience, 12-in-1 Solitaire, Spider Solitaire, and the rest of the Puzzle category (326 games) cover the ground that used to be Bejeweled, Bubble Shooter, and their endless Flash variants. For the .io wave that emerged in Flash's final years, Ragdoll.io, ColorWars.io, 2048 Mayhem.io, MergeDuel.io, and Conquer.io cover the HTML5 continuation of that lineage — see our IO category for the full list.

For the physics-comedy lineage (the Happy Wheels / Line Rider / Crush the Castle family), see our piece on physics-based browser games. For the tower-defense lineage (which was almost entirely a Flash-portal invention), see our piece on tower defense. For the IO genre specifically, see our earlier post on why IO games work.

Flash was the browser's first serious game platform. HTML5 is the one that replaced it, and — nearly a decade and a half after the cracks started appearing — HTML5 is meaningfully better for almost every use case Flash served. The games we lost in the transition were real losses; the games we gained on the other side are, by almost any measure, more durable, more performant, and more widely playable. A full history of browser gaming is a history of migration, and this was the biggest one we have seen so far.