stagexl 1.4.4

  • Readme
  • Changelog
  • Installing
  • 89

StageXL #

StageXL is a fast and universal 2D rendering engine for HTML5 and Dart. It provides a wide range of features for 2D games and other graphically rich content. The WebGL based engine is highly optimized to reduce the number of draw calls sent to the GPU and therefore delivers top-class performance. The automatic fallback to a Canvas2D based engine guarantees compatibility with older browsers or legacy hardware.

Some of the features provided by StageXL are: texture atlas support, draw call batching, pixel masking, pixel filters, pixel blending, texture filtering, hierarchical display list, sprite sheet animations, rich animation framework, audio and video support, interaction events, 3D transformations of 2D objects, resource management, text rendering and many other features as well as extensibility for even more features.

Build Status

Extension Libraries #

StageXL provides a rich set of built-in features. Even more advanced use cases may require an extension library with a specialised set of features. The number of extension libraries is growing over time, here is a list of the most popular StageXL extension libraries.

Getting Help #

The easiest way to get started or to accomplish a task is to ask questions. We are actively tracking the following websites and answer questions as fast as possible. We would like to get more FAQs on StackOverflow to help other developers to find answers quickly, therefore it would be great to get your questions on StackOverflow.

Examples #

We are working on more examples to covering a wider range of use cases. Please take a look at the StageXL samples repository for our ongoing work. Don't hesitate to send example requests that would help you to learn about a particular feature.

Roadmap #

Besides improving our existing features and improving performance as much as possible, we are always thinking about new features we want to add next. Please send us your ideas and requests to make those things a reality you care about most. Some of the things we will tackle in the near future are:

  • Support for Flutter (native runtime environment for Android and iOS).
  • A new StageXL homepage with more articles / blog posts.
  • Runtime support for Tiled Map Editor.

Adobe Flash heritage #

StageXL started as an easy migration path for Adobe Flash developers and their products to HTML5. Therefore StageXL provides the same display list API you may have used in Flash for many years. Furthermore the Dart programming language is easy to use for everyone who is familiar with ActionScript.

Change Log #

This file contains highlights of the changes we have made in each version. For questions regarding new features or breaking changes, please follow the announcements on the StageXL forum or use one of the support links below:


  • Support the latest release of package:xml.



  • fixed linter warnings
  • Require Dart 2.7


  • Require Dart 2.4


  • Require Dart 2.
  • Support Dart 2 stable.


  • Fixed issues with Dart 2.


  • Fixed issues with Dart 2.


  • Fixed issues with Dart 2.


  • Fixed issue with rectangle masks and TextField updates.


  • Replaced deprecated value AudioParam in WebAudio API.
  • Allow colors with alpha value for TextField backgrounds.
  • Fixed issue with rectangular masks within filters.
  • Fixed issue with masks relative to parent.


  • Added SoundChannel.position setter.
  • Added support for non integer HiDpi pixel ratios.
  • Added BitmapDataLoadOptions.pixelRatios list.
  • Added TextureAtlas.pixelRatio getter.
  • Removed BitmapDataLoadOptions.maxPixelRatio.
  • Removed SoundChannel.onComplete workaround for WebAudio API.
  • Fixed infinite scaleX/scaleY on DisplayObjects.
  • Fixed scissor masks on RenderBufferFrames.


  • Added ViewportContainer display object.
  • Added Stage.console to show render statistics.
  • Added support for GraphicsGradient with WebGL renderer.
  • Added support for GraphicsPattern with WebGL renderer.
  • Added StageRenderMode.AUTO_INVALID for lower CPU/GPU load.
  • Optimized stage-aligned rectangular masks.
  • Improved DisplayObject width and height setters.

Special thanks to John Talley for his work on the WebGL graphics code to support gradient and pattern fills and strokes.


  • Added Graphics.arcElliptical method.
  • Added support for SVG encoded graphics paths.
  • Optimized EaselJS encoded graphics paths.
  • Updated to Dart 1.21 and use generic functions.
  • Fixed bug in Sprite.bounds with


  • Stable release


  • Added FxaaFilter.
  • More strong mode fixes.
  • Improved error handling for image, sound and video loader.


  • Added ResourceManager.remove(BitmapData/Sound/...) methods.
  • Added ResourceManager.dispose method to unload all resources.
  • Added RenderContext.renderStatistics to measure WebGL operations.
  • Improved graphics stroke rendering in WebGL mode.
  • Improved renderTextureMesh in Canvas2D mode.
  • Improved BlurFilter in Canvas2D mode.
  • Fixed bug in ColorMatrixFilter.
  • Fixed bug in BitmapContainer.
  • Updated SDK dependency to Dart 1.19


  • Fixed joints of strokes in graphics.
  • Added graphics.undoCommand method.


  • Added SoundEngine enum.
  • Added SoundMixer.engine setter to overrule the detected engine.
  • Added SoundLoadOptions.engine to load with a specific engine.
  • Added Sound.engine to get the underlying engine.


  • Added support for opus audio codec.
  • Added support for SoundLoadOptions in Sound.loadDataUrl.
  • Fixes and optimizations in graphics methods.
  • Removed support for legacy CocoonJS workarounds.
  • Enabled analysis options for strong mode.
  • Updated SDK dependency to Dart 1.17


  • Replaced deprecated WebGL methods
  • Updated SDK dependency to Dart 1.16


  • Added support for Starling JSON texture atlas format.
  • Allow all number types in DisplayObject.applyCache.
  • Fixed ColorMatrixClass for some use cases.
  • Fixed Mesh.setVertexUV method.
  • Simplified TintFilter


  • Fixed TextField cache update on scale changes.
  • Fixed int/num type ambiguity in BitmapData.


  • Fixed an issue with filters caused by resizing of FrameBuffers.
  • Fixed AlphaMaskFilter with better fragment shader code (again).


  • Moved the 'Toolkit for Dart' to a dedicated StageXL extension package.
  • Fixed Graphics.fillGradient and Graphics.fillPattern return types.


  • Added BitmapContainer for extensive Bitmap rendering.
  • Fixed AlphaMaskFilter with better fragment shader code.


  • Added better support for vector graphics in WebGL.
  • Added DisplayObject.alignPivot method.
  • Fixed Sprite.bounds with graphics.
  • Fixed Sprite.getObjectsUnderPoint with graphics.


  • Added support for polygon sprite meshes.
  • Added support for polygon texture packing.
  • Added support for custom graphics masks in WebGL.
  • Added initial support for vector graphics in WebGL.
  • Added support for Starling texture atlas format.
  • Added Juggler hasAnimatables getter.
  • Fixed flickering on stage initialization.
  • Simplified render program implementations.


  • Enabled HiDPI filters.
  • Fixed stage with transparent background color.
  • Fixed rendering issue with sequential filters.
  • Fixed color of primitive WebGL triangles.


  • Added StageXL global default configuration options.
  • Added Juggler async/await and reactive features.
  • Added SoundChannel play() and pause() methods.
  • Added SoundChannel position, paused, stopped properties.
  • Added SoundMixer.unlockMobileAudio() convenience method.
  • Added BitmapDataLoadOptions.maxPixelRatio (replaces old autoHiDpi).
  • Added TextureAtlas loader abstraction for custom loaders.
  • Added pixel ratio support for DisplayObject and TextField cache.
  • Added Sprite3D implementation of Sprite interface.
  • Added TextFormat.weight additionally to bold property.
  • Improved pixel ratio support for HiDPI BitmapDatas.
  • Fixed RenderTexture update/resize/filtering on iOS8.
  • Fixed TintFilter showing the wrong ARGB values.
  • Fixed cache and mask support for Sprite3D.
  • Breaking Change: changed Stage constructor and properties.
  • Breaking Change: changed BitmapData constructor and properties.
  • Breaking Change: changed RenderTextureQuad constructor and properties.
  • Breaking Change: renamed Transition to Translation (Juggler).
  • Breaking Change: renamed TransitionFunction to Transition (Juggler).
  • Breaking Change: renamed Juggler.tween to Juggler.addTween.
  • Breaking Change: removed Multitouch class in favor of Stage options.

This version contains quite a few breaking changes and we are sorry for it. We do this in an effort to to get closer to a 1.0 release.


  • Added hashCode getter in Point, Rectangle, Circle, Vector.


  • Added DisplayObjectContainer.children for better child access.
  • Added DisplayObjectContainer.replaceChildAt.
  • Added Sound.loadDataUrl and Sound.supportedTypes.
  • Added Point and Rectangle operators.
  • Added TintFilter for color effects.
  • Added NormalMapFilter for light effects.
  • Added quality setting for blur, glow and drop shadow filter.
  • Optimized filters for Bitmap, TextField, FlipBook and VideoObject.
  • Optimized overall performance for filters and display objects.
  • Optimized onAddedToStage and onRemovedFromStage event dispatching.
  • Optimized memory consumption for BitmapData loading.
  • Fixed SimpleButton setters for the state display objects.
  • Make TextureAtlasFormat.JSONARRAY the default.
  • Internal simplifications and optimizations.
  • Requires Dart SDK 1.9 or higher.


  • Added InputEvent as base class for MouseEvent and TouchEvent.
  • Added InputEvent.current for current propagating InputEvent.
  • Added Sprite drag support for multi touch.
  • Added Mesh display object for BitmapData free form deformation.
  • Added batch drawing support for meshes.
  • Added stagexl.drawing mini-lib for future WebGL support.
  • Remove Sprite.buttonMode since it has no use.
  • Bugfixes.


  • Added lots of API documentations (thanks to @marcojakob)
  • Added Video and VideoObject classes (thanks fot @sebgeelen)
  • Added BitmapData.fromVideoElement constructor.
  • Added Tween.animate3D for 3D tween animations.
  • Added DisplayObject.getObjectsUnderPoint method.
  • Improved DisplayObject bounds calculations.
  • Improved support for custom WebGL filters/shaders.
  • Improved Sprite3D calculations.
  • Improved global2local and local2global calculations.


  • Added Sprite3D for 3D transformations of display objects.
  • Added RenderTexture.filtering option for pixel art games.
  • Added InteractiveObject.mouseCursor property.
  • Fixed MouseCursor definitions and added new ones.
  • Fixed nested masks with WebGL renderer.
  • Fixed Stage.autoHiDpi heuristics.
  • Bugfixes and performance improvements.


  • Added DisplayObject.blendMode property.
  • Added BitmapDataUpdateBatch class for better BitmapData update performance.
  • Added LibGDX texture atlases loader (for Spine runtime).
  • Added texture mesh renderer (for Spine runtime).
  • Added FlattenFilter to flatten hierarchical containers.
  • Added Mask.relativeToParent property.
  • Added Mask.transformationMatrix property.
  • Deprecated DisplayObject.shadow property.
  • Deprecated DisplayObject.compositeOperation property.
  • Deprecated Mask.targetSpace property.
  • Bugfixes and performance improvements.
  • Internal refactoring to use mini-libs.


  • Fixed an issue with TouchEvents in Dartium.


  • Fixed an issue with WebGL masks in combination with WebGL filters.


  • Added touch support for SimpleButton.
  • Fixed TextField.displayAsPassword
  • Improved compatibility for CocoonJS on Android.
  • Changed default value of BitmapDataLoaderOptions.corsEnabled to false.
  • Removed support for Canvas.backingStorePixelRatio.

This will be the last version of StageXL with support for IE9. The Dart team announced that Dart 1.5 will be the last version with support for IE9. Therefore the next version of StageXL will take advantage of features (like typed arrays) which are not supported by IE9. This will presumably improve the render performance on all other browsers.


  • stageWidth and stageHeight are integers again.


  • Changed Stage.stageWidth and stageHeight to num.
  • Added workaround for web fonts issue in IE.


  • Added Scale9Bitmap DisplayObject.
  • Added Mouse.registerCursor for custom cursor styles.
  • Added BitmapData.toDataUrl method.
  • Added Stage.sourceWidht and Stage.sourceHeight setters.
  • Added Stage.onMouseLeave event.
  • Added BitmapData.sliceIntoFrames margin and spacing parameters.
  • Make CORS for BitmapData loader optional (see BitmapDataLoadOptions).
  • Enabled Stage as mouse and touch event target.
  • Enabled Stage.filters setter (thanks Xavier).
  • Fixed GC issues with WebGL resources.
  • Fixed IE9 render and sound issues.


  • Added support for Sound Sprits (thanks Alex).
  • Added Stage.backgroundColor property (thanks Xavier).
  • Added ColorMatrixFilter.adjustColoration method (thanks Emmanuel).
  • Added ResourceManager.contains methods.
  • Refactored Point and Rectangle classes (thanks Kevin).
  • Fixed MouseEvent/TouchEvent ctrl/alt/shift getters.
  • Fixed Juggler.clear method.


  • Added WebGL filters.
  • Added TextField stroke and gradients.
  • Enable CORS when loading BitmapDatas.
  • BREAKING CHANGE: Removed Bitmap.clipRectangle.


  • Fixed fallback for WebGL on iOS.


  • Added dartdoc comments for Graphics class (thanks Arron).
  • Enabled audio on IE Mobile 10 (thanks Xavier).
  • Fixed Mask.shape for Canvas2D renderer (thanks Alain).
  • Fixed DisplayObject.compositeOperation.


  • Added WebGL renderer (opt-in with Stage constructor).
  • Added fallback to Canvas renderer.
  • Added texture atlas optimizations.
  • BREAKING CHANGE: Simplified Stage constructor
  • BREAKING CHANGE: Simplified BitmapFilter.apply method

This version contains major changes in the internal render code. The WebGL renderer is highly optimized to draw textures (BitmapDatas) but does not support vector graphics yet. If you want to draw Graphics display objects please use the applyCache method which renders the vector graphics to a texture or do not opt-in for the WebGL renderer.


  • Added HtmlObject class to use HTML elements as DisplayObjects (kind of).
  • Added DisplayObject.userData property to custom user-defined data.
  • Added BitmapData.sliceIntoFrames (better SpriteSheet support).
  • Added RenderLoop.start and RenderLoop.stop to control rendering.
  • Added AnimationGroup and AnimactionChain to Juggler framework.
  • Added EventDispatcher.removeEventListener
  • Added EventDispatcher.addEventListener optional "priority" parameter.
  • Added EventStream.listen optional "priority" parameter.
  • Fixed Color bug on iOS7.
  • Fixed GraphicsPattern from BitmapData.
  • Improved performance of BitmapFilters (~ 2x).
  • Improved performance and smaller code for Tweens.


  • Added new mouse event for roll over and out.
  • Removed examples in favor of StageXL_Samples.
  • Updated ReadMe and GettingStarted documents.
  • Set version of dependencies according to Dart 1.0 release.


  • Refactored event system and how we add capturing event listeners.
  • Optimized filters (up to twice as fast now).
  • Improved performance of Graphics renderer.
  • Some minor changes to align with the latest Dart changes.


  • Added TextField.cacheAsBitmap (default = true) for better text scaling.
  • Fixed TextField.autoSize.
  • Fixed TextFormat.leading, TextFormat.indent and TextFormat.underline.
  • Fixed mouse and touch events for DisplayObjects with masks.
  • Optimized BitmapData.copyPixel and added BitmapData.drawPixels.
  • Fixed BitmapData.colorTransform.
  • Fixed Firefox render problems on Linux.
  • Added Stage.sourceWidth and Stage.sourceHeight getters.


  • Added FlipBook.frameDurations property for flexible animation speeds.
  • Added SoundMixer.soundTransform implementation.
  • KeyboardEvent stopPropagation prevents html event defaults.
  • Fixed Point.polar method.
  • Include the latest Dart API changes.


  • Fixed TextFieldAutoSize feature.
  • Fixed TextFormat margins.
  • TextField.backgroundColor now matches Flash's default.
  • Moved Flump runtime to separate package.
  • Moved Particle Emitter runtime to separate package.


  • Added support for text files in ResourceManager.
  • Include the latest Dart API changes.
  • Honor TextFormat.leftMargin in TextField.


  • ResourceManger got an onProgress event to monitor loading progress.
  • Improved detection of HiDpi displays and mobile devices.
  • Mask got border properties to draw outlines of the mask.
  • Stage does no longer set focus to canvas automatically.
  • Fixed recursive event handler invocation.
  • Smaller JavaScript code size.
  • Minor optimization in Juggler.


  • Fixed MovieClip frame 0 execution.


  • New MovieClip class for the Toolkit for Dart.
  • Stage automatically set the "tabindex" attribute of canvas.
  • Smaller JavaScript code size.


  • Added ParticleEmitter for particle effects.
  • TextField supports TextFieldType.Input.
  • Stage supports resizing (full window, full screen).
  • Stage.contentRectangle property to get the visible content area.
  • Stage.onRender and Stage.onExitFrame events.
  • BitmapData supports HiDpi pixels.
  • Added AlphaMaskFilter class.
  • Smaller JavaScript code size.


  • DisplayObject.compositeOperation property.
  • DisplayObject.filters property.
  • Customize Sound loading with SoundLoadOptions.
  • Customize BitmapData loading with BitmapDataLoadOptions.
  • Opt in for WebP when loading images.
  • Added Mask.fromShape constructor.
  • Added Shadow class.
  • Stage has own Juggler which is advanced by the RenderLoop.
  • Sprite.startDrag/stopDrag/dropTarget support.
  • Sprite.hitArea property.
  • property.
  • Pixel perfect hitTest for Shape.
  • TextField fixes for Firefox.
  • Smaller JavaScript code size.


  • New name for the library -> StageXL.
  • Added StageScaleMode and StageAlign.


  • DisplayObject.applyCache/refreshCache/removeCache.
  • Renamed current MovieClip class to FlipBook.
  • DisplayObject.skewX and skewY support.
  • DisplayObjectContainer.removeChildren().
  • Juggler.containsTween().
  • Stop mouse wheel event propagation on canvas.


  • Some fixes to align with the latest changes in Dart.


  • ResourceManager optimization and fixes.


  • Reworked event system to align with the Dart event system.

See git version tags for older changes.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  stagexl: ^1.4.4

2. Install it

You can install packages from the command line:

with pub:

$ pub get

with Flutter:

$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:stagexl/stagexl.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on May 24, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.8.1
  • pana: 0.13.8-dev

Maintenance suggestions

Documentation URL is insecure. (-5 points)

Update the documentation field and use a secure (https) URL.

Homepage URL is insecure. (-5 points)

Update the homepage field and use a secure (https) URL.

Maintain an example.

None of the files in the package's example/ directory matches known example patterns.

Common filename patterns include main.dart, example.dart, and stagexl.dart. Packages with multiple examples should provide example/

For more information see the pub package layout conventions.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.7.0 <3.0.0
xml >=3.6.0 <5.0.0 4.1.0
Transitive dependencies
charcode 1.1.3
collection 1.14.12
convert 2.1.1
meta 1.1.8
petitparser 3.0.2
typed_data 1.1.6
Dev dependencies
build_runner any
build_test any
build_web_compilers any
pedantic any
test any