"But Zope 3 has no products!" Bzzzt. Wrong. =========================================== As part of their regular open-source rounds, `ZC just released`_ a bunch of Zope 3 related Python packages as open source. In fact, they announced as many as 13 stable ones and three ones that are still under development. Awesome. .. _ZC just released: http://mail.zope.org/pipermail/zope3-users/2006-August/004153.html This is a big step forward in invalidating one of the biggest reasons for people to still choose Zope 2 over Zope 3 for new development: "Zope 3 has no products" [#products]_. One of Zope 2's strengths has always been the numerous add-on packages ("products") you could install and thus get lots of functionality out of the box. Being a rewrite from scratch, Zope 3 had to start out with almost no add-ons. That has changed a lot. http://svn.zope.org lists numerous packages nowadays and they're not all from ZC_. For example, there are several packages in the ``z3c`` ("Zope 3 community") namespace created by individuals and companies who are active in Zope 3 development. Then there are also other repositories. The z3base_, for example, has several Zope 3 related packages, most notably Infrae_'s indispensable hurry libraries. Tiks_ is a CMS built on Zope 3 with a lot of individual packages. Last but not least, Schooltool_ is a large Zope 3 based project and provides lots of useful code and individually usable packages, albeit all under the GPL. .. _ZC: http://zope.com .. _z3base: http://codespeak.net/svn/z3 .. _Schooltool: http://source.schooltool.org/svn/trunk/schooltool .. _Infrae: http://infrae.com .. _Tiks: http://svn.tiks.org/svn/repos/ Among all these packages you can find a lot of stuff to help you solve typical web application problems. What do they all have in common? They're tested and they're already running in production! Here are some examples: * zc.catalog_, for example, provides decent index and catalog support for Zope 3. zc.index_ gives you text extraction for many known text formats (HTML, Word, OO.o, PDF, ...). textindexng3_ throws in a capable full-text index. hurry.query_ complements everything by providing a decent query interface for the catalog. * zc.sharing_ and schooltool.securitypolicy_ are good examples of pluggable security policies for Zope 3 (yes, the role-based one that ships with Zope 3 can be exchanged for a custom one!). * zc.extrinsicreference_ and schooltool.relationship_ make object relationships a la Archetypes possible. * schooltool.batching_ aids with batching while zc.table_ also provides sorting functionality when dealing large amounts of tabular data. zorg.table_ is a competitor. * z3c.traverser_ is a flexible traverser machinery based on subscription adapters (think of it as event-like traversal dispatching) * Additional widgets for your automated browser forms can be found in z3c.widget_ and zc.form_. zope.html_ integrates FCKeditor as a Zope 3 widget, zorg.kupusupport_ and zorg.tinymcesupport_ do the same with Kupu and TinyMCE. * ldappas_ lets your Zope users authenticate against LDAP while zc.winauth_ makes Zope 3 interact with the Windows authentication system. * lovely.tag_, lovel.rating, zc.comment_, zorg.comment_, zorg.seen, etc. provide tagging, rating, and commenting functionality for any kind of content type. .. _zc.catalog: http://svn.zope.org/zc.catalog .. _zc.index: http://svn.zope.org/zc.index .. _hurry.query: http://codespeak.net/svn/z3/hurry.query .. _textindexng3: http://opensource.zopyx.com/software/textindexng3 .. _zc.sharing: http://svn.zope.org/zc.sharing .. _schooltool.securitypolicy: http://source.schooltool.org/svn/trunk/schooltool/src/schooltool/securitypolicy .. _zc.extrinsicreference: http://svn.zope.org/zc.extrinsicreference .. _schooltool.relationship: http://source.schooltool.org/svn/trunk/schooltool/src/schooltool/relationship .. _schooltool.batching: http://source.schooltool.org/svn/trunk/schooltool/src/schooltool/batching .. _zc.table: http://svn.zope.org/zc.table .. _zorg.table: http://svn.zope.org/zope3org/trunk/src/zorg/table .. _z3c.traverser: http://svn.zope.org/z3c.traverser .. _z3c.widget: http://svn.zope.org/z3c.widget .. _zc.form: http://svn.zope.org/zc.form .. _zope.html: http://svn.zope.org/zope.html .. _zorg.kupusupport: http://svn.zope.org/zope3org/trunk/src/zorg/kupusupport .. _zorg.tinymcesupport: http://svn.zope.org/zope3org/trunk/src/zorg/tinymcesupport .. _ldappas: http://svn.zope.org/ldappas .. _zc.winauth: http://svn.zope.org/zc.winauth .. _lovely.tag: http://svn.zope.org/lovely.tag .. _lovely.rating: http://svn.zope.org/lovely.rating .. _zc.comment: http://svn.zope.org/zc.comment .. _zorg.comment: http://svn.zope.org/zope3org/trunk/src/zorg/comment Of course, these are only a few examples. There is lots more useful stuff out there and I can't possibly list everything here. By the way, if the different origins of these packages make you uncomfortable, relax. Most of them are ZPL, except for the Schooltool which is GPL. Make eggs! Use the CheeseShop! ------------------------------ I guess the only sad thing about this plethora of available Zope 3 components is that they're spread all over the place and hard to find. Back in the good old Zope 2 days, you would walk over to zope.org and check for "products" there. Nowadays, zope.org sucks (hopefully not much longer) which made projects like Plone build their own package-forge. Another thing that's less than optimal is that most packages aren't released yet, even though they're running in production somewhere. Some of them at least have tags. Here's an idea: Let's all eggify our packages. That'll not only give them package metadata like explicit package dependencies, it'll also make them easily deployable. And here's another idea: Let's load 'em up to the `Python Cheeseshop`_ so that people can find them, perhaps even people who are not yet using Zope 3. .. _Python Cheeseshop: http://cheeseshop.python.org/pypi ____________ .. [#products] I actually try to discourage the term "products" in Zope 3 because there they don't exist as such anymore. A Zope 2 product is a Python package living in the ``Products`` directory (which also is a package, but a very weird one, causing lots of headaches). Zope 3 goes back to the roots and just uses regular Python packages, wherever they may be located.