Shumway

This article will help you understand Shumway — Mozilla's open standards-based Flash renderer — and what it means for the community of developers currently creating the Adobe Flash platform. The project is not exactly a developer tool but it is something that content creators should test against (and report bugs or performance issues to). For even more information, please refer to the external links.

The whats and whys of Shumway

Shumway is a renderer for Adobe Flash built entirely in Web Standards (JavaScript, WebGL, and others). It is currently available as an extension and as a component in Firefox's Nightly builds that can be enabled through about:config (you need to find the shumway.disabled preference and set it to false). It is expected to be included in Firefox at some point to allow plugin-free compatibility with SWF-based games and animations. Shumway has certain limitations compared to Adobe Flash Player especially when unavoidable patents (such as those surrounding Flash DRM) get in the way. Some of its current limitations are just temporary, however.

There are a few situations where a user may use Shumway to view your content:

  • Their platform does not support Adobe Flash Player.
  • The user did not install Adobe Flash Player.
  • The user has Adobe Flash Player disabled (or set to "click-to-enable") for performance or security reasons.
  • There might be a time where users want to experience your content but Flash is no longer supported by Adobe.

To emphasize a point: the current behavior is that Shumway works on any SWF file unless (or until) the Adobe Flash Player plugin is activated. Shumway is made with the same constraints as any website. Users who disable Flash because of security or performance concerns can still see content through Shumway because it cannot be forced to behave worse than JavaScript (and WebGL, etc.) allows. Users with Shumway enabled will still see your Flash content, if compatible with Shumway, even if Flash Player is installed but blocked.

Testing and what to do in case of trouble

The first step is to directly test your Flash content. The simple method is to install the Shumway extension (or run a browser version with Shumway included and enabled) and browse to your Flash content with Adobe Flash Player set "Ask to Activate" or "Never Activate" in Firefox's Add-ons menu (this will be listed as "Shockwave Flash" under the Plugins tab). This will be the experience met by your users who are running that version of Shumway. Hopefully, this displays your content with acceptable quality.

The next step is to use the Inspector included as one of Shumway's examples. It can be run locally through a web server or you can use the version hosted on Mozilla's GitHub. Several methods exist to allow Inspector access to your SWF file. Once your Flash content is loaded, you can see how Shumway manages it in detail. Several buttons are available at the bottom of the screen to enable or disable various Shumway options.

Note: If your applet runs at an abnormal speed, try toggling "Turbo" at the bottom of the inspector window. You may wish to do this before opening your SWF file.

Limitations of Shumway might be encountered through testing. There are two places where Shumway bugs are tracked:

  • GitHub (via Issues and Pull Requests) manages problems relating to Shumway, itself.
  • Bugzilla is intended for problems with integrating Shumway into Firefox.

End-users and less involved developers may report issues by hovering over "Shumway" within Flash content, clicking "Report Problems", and filling the form.

Performance and compatibility issues with Flash content should be reported through GitHub. From the main page for Shumway at GitHub, click on "Issues" and browse the outstanding issues for similar bugs to contribute to. Click on "New Issue" to file a new entry if a duplicate is not found. Please note that source code will be requested for the Shumway developers to use as small test cases. There does not currently exist a private method to contribute source code.

You could also directly commit bug fixes as pull requests. This would be very much appreciated.

See also