Flutter is Not Dead Says Navid, Matt Mullenweg Takes Notice
Tuesday, October 6th 2009If there's one thing I'm looking forward to when it comes to WordPress other than 2.9's new Media Library, it's Freshout's next release of Flutter, the WordPress CMS plugin.

Using Flutter to Establish Book-Author Relationships
We've heard a lot about Flutter. The Flutter homepage has accumulated something like 1,592 comments since its release—a bewildering array of bug reports, praise, and feature requests—and the now defunct support forum was a mire of temporary solutions and fixes until it was abandoned by its developers and replaced with a Google Group. The only public place that exists for WP hacks like myself to confer about the plugin in its current state is this group, which has recently been beset by spammers. The Freshout guys occasionally post there, but we’ve heard little about progress on the next release of Flutter, even while bug fixes circulate among members of the community.

Navid Safabakhsh
But we can’t criticize Freshout for being slow about progress, or for the hackiness of Flutter. What VP of Production and Principal of the design house Freshout Navid Safabakhsh has been up to with his team has the potential to transform WordPress into a fully fledged CMS, with content types, custom write panels, and swanky GUI’d custom fields. Even if Freshout abandoned the plugin today and left us with Flutter as is, we should be eternally grateful. In a blog post on Freshout, Navid explains how Flutter evolved from a fork of Custom Write Panel into Fresh Page, and ultimately into Flutter, not as an open source project, but as a real-time solution to Freshout’s clients’ needs. “We have been criticized quite a lot in the past year or so for being slow with support and lack of transparency with the product plan of Flutter. There is a good reason for that,” Navid writes, “It’s because there isn’t a clear product plan that’s centered around the community. The product plan is centered around what our clients ask us to build since that’s our source of revenue.” Navid remains skeptical about releasing a final version of Flutter into the GPL partly because of all the zaniness that erupted from Flutter’s overnight community, and partly because his 25-person team has a business to run and can’t deal with providing support all night for free. But that doesn’t mean Navid and Freshout aren’t open to getting the job done. “Over the next few weeks, we’re getting in touch with anyone who wants to help us put some serious energy back into Flutter. If you’re one of these people, hit me up.”
Now here’s the really cool news: in his post, Navid confirms the rumor that Freshout’s got the attention of Matt Mullenweg, the official king-god of WordPress. On a post in the Google Group entitled “Is Flutter dead?” (to which Navid replies enigmatically, “No, it’s not. We’ll communicate our plans soon”), Google groupie Tammy Hart writes:
Matt Mullenweg was here at WordCamp Birmingham this past weekend where there ended up being a big buzz about Flutter. As he was leaving and saying a final goodbye to me with a handshake, he said, “I really like what you're doing with Flutter, but I don't like how the plugin works... So I'm gonna make it better.”

Wow. Could you imagine CMS functionality on the roadmap? I can’t, but I won’t lose hope. WordPress 2.9 is due out October 31 though the release date looks a little too optimistic for me (there are 623 of 776 active tickets, which sets Milestone 2.9 at 20% completion as of today). Navid writes that we could hear about the game plan for Flutter as early as “the end of October” or see a release by “Nov 7th, which will include fixes to the most urgent bugs.” Sounds too good to be true.

Custom Write Panels
And what about all the Flutter clones out there, borne most likely out of frustration with Freshout’s unresponsiveness or itching anticipation for what can be done with GUI’d custom fields in WordPress? Navid isn’t too pleased with dividing up the potential for open source labor: “There are a number of other CMS plugins that were released after Flutter and directly ‘compete’ with us [see Magic Fields, developed by a couple of ex-Flutterers]. This is a concept that I just don’t understand in the GPL world. We’re not competing with any of you. We’re just sharing some of our code for other people that want to use it. That’s really it.”
It’s all very interesting.
Here’s the thing, though, for all you whining WP masses out there: There is already a lot you can do with Flutter, as buggy as it is today. If you troll through all the posts in the Google Group, you’ll find enough fixes to make Flutter usable for the time being. In a version I’ve been patching, I’ve got image uploads working reliably (cropping disabled), my categories don’t disappear, jQuery plays nicely with the Dashboard, and TinyMCE behaves in HTML mode. I’ve also created stable relationships between post “types” through Flutter fields that wouldn’t be manageable for the end user without the grouping capabilities that Flutter’s GUI allows for (see Harvard Common Press, for example—books and authors are intimately related thanks to Flutter. This situation is similar at Fringe Magazine).
So let's not lose hope or beleaguer Navid any more than we already have. I'll see you in November.
UPDATE: Attached is my less buggy version of Flutter, per request. I offer no support for this, as I plan to document the changes I made in a later post.

Great article. More control over custom fields and file types will make Wordpress the most efficient CMS to date.
I think what Matt M. knows is that this should be in CORE. Unfortunately I can't wait. When it does go to core it will also use ACTUAL post_types instead of just adding custom fields to the "post" post_type. Since I can't wait, I'm going to have to guess which plugin's codebase Automattic will "steal" from to get this done.
Custom write panels like Magic Fields and Flutter are good front ends, but combining that with the post type and serialized meta information that should be used in the backend is what I'm waiting for. I'll probably try to make Magic Fields work with WPMU for now as I think the Flutter team is understandably focused on revenue-generating work. This is just another reason why something so central to WP as a CMS needs to move into core (much moreseo than image-editing I might gratuitously add).
Definitely agree.
However, in the meantime, Flutter can do the job well enough for small- to medium-scale sites. I've patched Flutter well enough to use it in production on several sites, so there's no need to wait for real post types. I've tried just about all the plugins out there for handling this stuff, and hands down, only Flutter is advanced enough to do the kind of stuff, right now, that we want to do CMS-wise (Pods offers real post types, but it's so unfriendly from an end-user POV, that it's useless in production).
If it wasn't dead then it sure is now. With 2.9 out its easier then ever to make a good plugin for this purpose that will quickly take flutter's place.
Not so sure about that. (The deadline Navid talked about has come and passed, granted. But 2.9 still doesn't allow us to do the kind of things that Flutter makes possible.)
We won't see the GUI for the custom post types introduced by 2.9 until 3.0 (presumably). And even then, the custom write panels that are possible in Flutter still won't be available in core.
A patched up Flutter is still a viable option until we see real Flutter-like capabilities in WP.
Well i think to for now flutter is dead because his last commit in his development version was almost six months ago
(http://github.com/freshout/flutter)
Until someone take the plugin and start to working on it flutter is officialy dead
David.
Keep in mind that this post was written shortly after Navid made his last comments about Flutter.
Please can you send me a copy of your unbuggy Flutter, my version is killing Wordpress. I will love you forever.
I will attach it in a zip to this post, but keep in mind that it's still problematic if you're working with thousands of posts.
First of all, what a great post.
I've been swimming deeply in Flutter for a little over a year now, amidst 80% joy and 20% frustration (almost always from clunky query mishaps). I've been trying so hard lately to get comfortable enough with Pods to excuse its bigger faults (as you point out), and it's... yeah. Stripping away all that it makes me strip (UI, tags, global search, yadda...) for the sake of relationships just doesn't feel worth it. So I think I'm back to Flutter. Or some cocktail of the two.
Hence my question, and I know / apologize that this is one of those "probably beyond the scope of a comment" questions. Can you -- either in a comment, or post, or neither if it's too big -- expand just a *bit* on: "I’ve also created stable relationships between post 'types' through Flutter fields that wouldn’t be manageable for the end user without the grouping capabilities that Flutter’s GUI allows for"? Just on a high-level view, how did you do this, or what baked-into-WP method did you exploit to pull it off (taxonomies, etc)? Your cited sites look great, and the relationships seem pretty parallel to what I'm after.
I share your frustration with Flutter in general; the concept is exactly what WP needs in order to evolve into the ultimate lightweight CMS. When WP 3.0 comes out, we'll have custom post types built in to the core, and the ability to create new write panels with a few quick functions. The only thing we'll still lack is the ability to attach GUI to the custom fields, but I suppose that's to come down the line.
The way I create relationships between fake post types via Flutter is really hacky, but for the projects I was working on, it was acceptable. The idea is that you eliminate the need for the general "Posts" write panel (which Flutter enables you to hide). So for example, say the website you are creating needs three fake post types: Blog posts, Book posts, and Press Releases. In Flutter, we'd create three write panels and assign each panel to a specific category (preventing the end-user from being able to select a category, so that when they create new posts from these write panels, they are already in the given category). Now the end user will simply choose from one of our write panels: "Press Releases," "Books," or "Blog" to create new posts, and Flutter enables us to give each "type" of post a set of GUI'd custom fields.
In the back end, we rewind the query in single.php, and point each category (blog, press releases, and books) to its own single template: single-blog.php, single-press-releases.php, and single-books.php. We can then retrieve the custom field data in each template and handle each category of post (or fake post type) independently.
Finally, creating relationships between the fake types is a matter of careful naming. Another example: Say you have a book catalog, and you need to be able to associate "Blog" posts with "Book" posts. In the "Blog" post's write panel in the Dashboard (created through Flutter), you'd need to create a GUI'd custom field that contains a predefined list of every "Book" post available in the system. Because the end-user is selecting a "Book" post from the dropdown, you don't have to worry about her entering the name incorrectly. Then, in the single-blog.php template, you can retrieve which book is "associated" with the blog post by getting that value from the custom field. Then, once you have that value, you can look up the Book "type" post in a separate wp_query (still within the single-blog.php template), and in turn obtain its custom meta.
The difficulty with all this in Flutter as it stands is that you have to maintain the master list of books in the Flutter field within Flutter's write panel creation area. Every time the end-user creates a new Book "type" post, you have to add that book to the dropdown, so that she can select that book in the Blog "type" post. (This is okay in a book catalog, because we only added books once a year.) But to overcome this difficulty, you would ideally want to pour the list of books into the dropdown directly from the database, so that you never have to manually update it.