The WPF/E Developer Environment

On Monday of this week, we introduced a "little brother" for WPF as we released the first CTP of "WPF/E", a technology that was announced a year ago at PDC 2005. "WPF/E" is a small, lightweight, cross-platform client runtime that brings the animation, 2D vector graphics and media capabilities from WPF into the web arena, with support for XAML and JavaScript client-side scripting.

I've been having a lot of fun playing with the subset of functionality that is in the current release. If you're familiar with WPF already, you'll have no problems transferring those skills across. The feature set is relatively limited in the current CTP release, but you can already do some pretty fun things with it. The download is small (complete install with no other prerequisites in 2MB on Windows, 3MB on Macintosh), and we're working hard to keep the size as compact as possible.

It's inevitable perhaps that people will make comparisons between "WPF/E" and Adobe's Flash technology, since there's some overlap in the target scenarios for each technology. One difference that I'll call out is in the way each technology is embedded. Flash applets are distributed as .SWF files, which wrap all the resource and code information into a somewhat opaque binary format. On the other hand, the goal for "WPF/E" is to complement HTML by providing a more transparent approach. XAML can be loose within the HTML document and can be accessed with the same client-side JavaScript that is used for other parts of the web page; there's no hard boundary between the two worlds, which many web developers will find an attractive approach.

As an example, one of the most interesting third-party samples that's emerged over the last few days is Microbe, which has a very interesting demonstration of both technologies "living in harmony". If you look at the source code Lee posted, you'll see that the "WPF/E" code is just regular JavaScript (flashInterface.js) and XAML (plugin.xaml) - very easy to access and manipulate (in this case, using the ExternalInterface.Call() method from Flash).

Another comparison is of course between WPF and "WPF/E". WPF remains our flagship client platform API, enabling powerful Windows applications to be built with XAML, C# and the full underpinnings of the .NET Framework 3.0. On the other hand, "WPF/E" is aimed squarely at the web continuum, providing a great partner for technologies like ASP.NET AJAX. It's our hope and expectation that both technologies will have a long and illustrious future as solutions for different spaces.

I'll be posting quite a bit about "WPF/E" from now on, interspersed of course with continuing posts about WPF.

[As some of you may have noticed, I've been quiet for a few weeks. Microsoft is generous in offering four weeks' paternity leave for fathers, and since we welcomed our third child into the world at the end of October, I took advantage of the opportunity to take time out to recharge. It's good to be back!]