What does "ZEO" stand for?

Hey! Can anyone help me out on what ZEO means?

Also is there any particular reason why we're not using the latest version of Plone, i.e 5.1 for the gatsby-source-plone project? The buildout seems to use Plone 5.0.8 instead.

1 Like

I assume you searched too. It turns out it is lost in the mists of time :wink: I think it stands for Zope Enterprise Object? https://github.com/zopefoundation/ZEO

5.1 isn't officially released yet and has been under development for some time.

1 Like

You've got it exactly right, @tkimnguyen! The ZEO server is the Zope Enterprise Object server. When I was first learning about it, my teacher used the metaphor of a restaurant to explain the way ZEO helps.

In this metaphor, you can think of Plone as a chef who needs to cook meals to serve them to customers (the meals are web pages, and the customers are visitors to your website). The cook needs to get ingredients to make a meal, and those ingredients (page contents, menu listings, etc) are in a refrigerator (our database). If Plone is running without ZEO, then every time a new meal needs to be made, the chef has to go to the refrigerator to get ingredients. This takes time, and means that only one meal can be cooked at a time.

Now, imagine if there were a chef's assistant who can run and get the ingredients for the chef. The cool part is that when you have a chef's assistant, you can have lots of chefs all cooking meals, and the assistant can make it more efficient to get each of them the ingredients they need. More chefs cooking more meals means that more customers can get served in the same amount of time, and the process of getting ingredients for them is more efficient.

The ZEO server is that chef's assistant in our metaphor. It allows us to run multiple instances of Plone in front of a single database, and makes it possible to serve many many more pages to more customers in the same amount of time.


That's a simple yet elegant understandable way of explaining how ZEO works.Thanks a lot! I had a doubt about that because I noticed a commit in the gatsby-source-plone repo saying 'Rolled back to Plone 5.0.8 cause of some ZEO issue'

maybe its just me but I find that harder to understand.

ZEO vs ZODB is just a historical anachronism of naming because ZEO was original a licensed product but ZODB wasn't (or thats my understanding). Most databases are client-server such as Postgress, MySQL etc. ZEO is client-server version of ZODB. That makes ZODB like Sqllite and really only useful for testing or small scale stuff.

If it was created today ZODB, ZRS (replication for ZODB) and ZEO would all be features of one project with one name and it wouldn't be an acronym. ZeroDB would have been a great name.

1 Like

@djay it is just you :smiley: I liked @cewing's metaphor; it's great for newcomers.

I think we should add that metaphor (and what ZEO stands for) in our docs.

Ah, turns out it IS in the docs:


This is an awesome thread!

don't forget to add a paragraph explaining what happens when all those chef assistants have to refill the fridge with fresh, new ingredients :wink:


clearly, @djay, you've not worked as a line cook in a busy restaurant during a dinner rush

1 Like

@tkimnguyen I'd like to take credit for the metaphor, but it isn't mine. I learned it from Joel Burton (of course)

That looks great!

I was going to ask you... well, he would approve the PR I'm sure :slight_smile:

I really beg to differ (and now wonder if I need to split off another topic :wink: )... ZODB works fine for very large scale sites. As with any technology, you have to know what you're doing when you're scaling up, and I'm sure there are situations in which it is not as good as say Postgres but that will depend on specific requirements and situations. Generally speaking, there is no (good) reason to say that ZODB is only for testing or small scale stuff.

You're right about the hysterical separation of ZEO and later ZRS for licensing reasons, but the separation still makes sense today for different reasons.

ZODB isn't just a database, but a database framework/ecosystem. There are multiple client-server/multi-process options for ZODB:

  • ZEO, which is easy to deploy and is very small.
  • Relstorage, which let's you leverage an RDBMS. This is espec interesting, IMO, when used with an RDBMS that someone else manages for you, like RDS.
  • Newt DB, which builds on RelStorage and let's you leverage Postgres more
  • NEO, which lets you scale much better than ZEO.

ZRS provides replication, and could, in theory be used with something other than ZEO. It has the potential to also be used to update external indexes, like elasticsearch or even RDBMS-based indexes.

There are other specialized storages that provide other use cases, like encryption, compression, staging, testing, etc.



IMHO, our community needs to better publicize/market the ZODB ecosystem, not just the technical aspects and advantages (exclusively).

For example, a recent project that I used Plone for involved questions of how to secure non-public data that was captured (1k+ records). The strengths of ZODB really became evident during development: indexes, time-travel, etc. but the killer-feature was encryptedcipherstorage. The fact that I can get encrypted persistent storage with along with a NIST spec'd KMI OOTB by just adding a few lines to my buildout was pretty amazing.

Perhaps with coinciding with the hard work that's been going into bringing Zope2 & ZODB into Python 3 universe, we could highlight the ecosystem and the technology?

Just a thought: :smiley:


Totally agree. And that is exactly what ZeroDB did. Using ZODB technology (they have since switched I believe. Apparently they are called NuCypher now - https://techcrunch.com/2017/05/15/nucypher-is-using-proxy-re-encryption-to-lift-more-enterprise-big-data-into-the-cloud/). Anyone know the technical differences between ZeroDB and encryptedcipherstorage?

Anyway encryptedstorage is a killer feature and that is evidenced by the fact ZeroDB got so much press. It should be a default or built in feature. Plone should ship with it. Esp in the GDPR times.

Marketing is about bundling a series of ideas that exciting into a single start idea/name that can be unravelled. Just to rattle off all the acronyms in that eco system and to understand the interrelationships between them makes my head hurt, let alone someone new.
We can't use ZeroDB I believe even though its a great name but having a single primary name to hang the whole ecosystem off would make life so much easier to understand.

  • ZEO should be ZODB server.
  • ZRS should be ZODB server replication.
  • Relstorage should be ZODB relstorage or ZODB sql adapter or ZODB RDBMS adapter.
  • if NEO lets you scale better then why doesn't it replace ZODB server?
1 Like

This documentation change has been merged