Creating an SWF file today is still possible, but the right workflow depends on whether you are designing visually, compiling from code, or reopening a legacy project. In 2026, the format is best treated as a specialised delivery choice for old Flash-based animation, interactive banners, archived e-learning and other controlled environments. I would not approach it as a general video format; it is narrower than that, and the tool you pick matters more than ever.
The practical facts before you build an SWF file
- SWF is legacy. Adobe ended Flash Player support on 31 December 2020 and blocked Flash content from running from 12 January 2021.
- Adobe Animate is the fastest visual route. It suits timeline animation, banner work and older interactive projects.
-
Haxe and OpenFL are the code-first route. They let you compile a Flash target with commands such as
lime build flash. - Old projects often need a frozen toolchain. If a file depends on older components or ActionScript behaviour, a virtual machine may be the cleanest way to keep it alive.
- Modern web playback is not the goal anymore. If you need broad delivery, HTML5, MP4 or SVG is usually the better choice.
What an SWF file is and when it still makes sense
SWF stands for a Flash-based file format that can carry text, vector graphics, raster graphics and animation, including interactive elements. That mix is exactly why the format was so useful for banners, games, menus and small multimedia experiences: it combined motion and logic in one package.
What matters now is the boundary around it. Adobe no longer supports Flash Player, and modern browsers do not run Flash content natively, so SWF is no longer a modern web delivery format. In practice, I only recommend it when the playback environment is already fixed, such as an internal kiosk, a legacy archive, or a project that must preserve an existing Flash workflow exactly as it was.
If your actual goal is broad public playback, I would steer away from SWF immediately. If your goal is to maintain a specific old asset or recreate a known Flash experience, then the format still has a place. That decision point leads directly to the question of tooling, because the method you choose determines how painful the rest of the job will be.
The three workable ways to create one
| Method | Best for | Main strength | Main limitation |
|---|---|---|---|
| Adobe Animate | Visual animation, banners, timeline-driven content | Fastest path for designers and motion work | Legacy workflow, proprietary tooling |
| Haxe and OpenFL | Code-first projects, games, reusable builds | Reproducible compilation and cross-platform structure | Requires development setup and more technical skill |
| Legacy toolchain | Maintaining older projects exactly as they were | Best chance of preserving original behaviour | Fragile, outdated and often dependent on old software |
For a new file, I would start with Adobe Animate if the work is design-led, or with Haxe and OpenFL if the file is being generated from code. I would reserve the legacy route for cases where the source already exists and the priority is compatibility, not convenience. That split is the simplest way to avoid spending a day forcing the wrong tool to do the wrong job.
Once you know which path fits the project, the next step is understanding the actual mechanics of each workflow.

How I would make one in Adobe Animate
For visual work, Adobe Animate is still the most straightforward route. The key is to treat the publish profile as the source of truth, because Adobe’s export commands do not keep settings with the file the way Publish does. That matters when you need to rebuild the same SWF later with the same frame rate, compression choices and script settings.
- Open or create your FLA document and set the stage size, frame rate and asset structure first.
- Go to
File > Publish Settingsand enable the Flash/SWF output you need. - Save a publish profile so you can reuse the same settings without rebuilding them from scratch.
- Check the ActionScript version, font embedding, image compression and any linked media before publishing.
- Use
Publishfor the final output, then inspect the generated SWF in the environment where it will actually be used.
If the project includes video, I would be conservative. Adobe notes that embedded video inside an Animate document is only suitable for small clips and typically works best under 10 seconds; beyond that, file size climbs fast and audio sync becomes easier to break. In other words, SWF can carry video, but it is rarely the cleanest container for it. I would keep longer clips external whenever possible and let the SWF handle animation and interaction instead.
That workflow is ideal when a designer owns the file and the timeline is the main asset. When the project is built from code rather than keyframes, I switch to a different toolchain.
How to compile one with Haxe and OpenFL
Haxe and OpenFL are the right answer when the project is software first and animation second. This route is useful if you are building a small app, a game, or a repeatable pipeline where the SWF is just the compiled target rather than the thing you edit by hand.
The basic build flow is simple:
- Set up your Haxe project and choose Flash as the target.
- Compile with
lime build flash. - Add
-debugwhen you want debugger-friendly output. - Add
-releasewhen you are preparing a production build. - Use
lime test flashwhen you want to compile and launch in one step.
Haxe also lets you embed external SWF or SWC libraries with --swf-lib, or reference them for type checking with --swf-lib-extern. That is useful when you are rebuilding around older assets instead of replacing them outright. OpenFL can also process SWF assets for broader targets, which helps when the same source needs to live in more than one output format.
The limitation is that this is a developer workflow, not a drawing workflow. You need to think in terms of compilation, assets and runtime behaviour. If the project relies heavily on ActionScript-era timeline tricks, I would test those assumptions early rather than discovering the mismatch at the end.
That brings us to the messy part of the topic: keeping old files alive without breaking them.
How to keep legacy SWF projects alive
If you already have old SWF content, the main problem is usually not creation but preservation. The source files, extensions, font files and publish settings are often more important than the SWF itself, because the compiled file does not preserve the full working environment.
- Keep the original FLA, ActionScript and asset folders together.
- Document the exact Flash or Animate version if the project depends on a specific behaviour.
- Use a virtual machine or pinned environment if newer systems cannot open the project cleanly.
- Avoid making the SWF the only surviving copy of the work.
- Test legacy playback outside the authoring app, because the file may still compile but behave differently at runtime.
OpenFL’s SWF support is useful here, but it is not magic. Its documentation notes that many display-list features are supported, while things like frame scripts, some audio behaviour and a few tweening features are not handled in the same way. My practical read is simple: it is a good bridge for selected legacy assets, not a perfect substitute for the original Flash runtime. If a project depends on exact ActionScript behaviour, I would not assume a modern wrapper will reproduce it flawlessly.
So before you declare the file finished, there are a few checks I would run every time.
Checks I run before I call the file finished
- Playback check. Open the SWF in the same kind of player or emulator that will actually consume it.
- Font check. Confirm that embedded or substituted fonts render correctly and do not shift layout.
- Timing check. Watch the first few loops for frame drift, dropped frames or broken sync.
- Asset check. Make sure linked images, audio and video are present and not broken by path changes.
- Script check. Look for ActionScript errors, missing classes or broken event handlers.
- Size check. Review the final file size, especially if the document includes video or heavy bitmap content.
The size check matters more than people expect. A file that looks fine in the authoring tool can become unwieldy once you embed large images or short video clips, and the penalty is not just download size. Bigger files are slower to load, harder to archive and more annoying to maintain later. I would rather simplify the assets now than debug a bloated file after the fact.
At this point the decision is usually clear: use the visual workflow when the project is artistic, use the code workflow when the project is software, and use the legacy route only when compatibility is the priority. That is the rule I would follow if I had to pick one path for 2026.
The safest choice if you still need an SWF in 2026
If I were starting from scratch, I would not build new web content around SWF unless the destination was already locked down and the client specifically needed a Flash-era deliverable. For modern distribution, I would choose HTML5 Canvas, MP4, SVG or another current format that does not depend on retired browser support.
If I had an existing project, my choice would depend on the source: Adobe Animate for visual timelines, Haxe and OpenFL for code-driven builds, and a frozen legacy toolchain only when exact behaviour matters more than convenience. That approach keeps the file manageable, which is the real challenge with SWF in 2026. The format itself is not the hard part; keeping the surrounding workflow stable is.
My rule is simple: create SWF only when the playback target is known in advance. If the target is uncertain, the format turns into maintenance debt very quickly, and a modern export path is usually the better investment.