Well, KnowledgeTree 3.0.2 is finally available for download (and so is Professional 1.0, but more on that later).

My biggest work in 3.0.2 is, as usual, mostly back-end and invisible.

I introduced a caching layer in 3.0.2, over the KT ORM layer. This lowers latency for database queries, although increases IO (will investigate shared memory based caching next - too bad memcached doesn't support cache groups).

Separately from that, I created a proxy layer which sits between non-ORM code and the ORM entities. The nice part of this is that it required absolutely no code changes outside of the ORM/entity layer. The proxies ensure that only exactly one copy of an entity exists in the system.

This works whether caching is there or not, but generally improves performance (no looking up object values from storage, whether hard disk or database), and also reduces unexpected behaviour due to having one copy of the entity that's just been updated and written to the database, and then updating an out-of-date copy of the entity and saving it to the database with some old values.

Oh well, yet another PHP4 flaw worked around with duct tape and ice cream sticks.

Brad added two rather cool bits of higher-level (and visible) functionality.

The first is anonymous access to the repository, which means that there is no login screen at all (if configured). There may be some additional work required in the "access denied" function to let people log in, but generally this allows a common request.

The second is a set of roles - owner, authenticated, and everyone.

The owner role just maps to the creator of the document (and you can add additional groups as "owner" of a document). The most obvious use of this is that a section of a hierarchy can give permissions to only the owner of the document (say, to only allow the owner to delete it). But it also means that workflows can have notifications of changes being sent to the owner of the document, and that the owner of the document can be given the right to perform certain workflow transitions.

The Authenticated role contains all non-anonymous users in the system. If anyone with a login in the system should be able to read something, then Authenticated is the role to use.

The Everyone role is anybody accessing the repository at all, potentially also including anonymous users if anonymous access is configured in the system. This ultimately allows the old (and very very broken back then) "public" permission setting in KT 2.

I've mentioned the translation improvements in passing before. A group of translators and I exhaustively (hopefully) found all cases of non-marked-up text and marked them up ready for translation. And I finalised how translations will integrate into KnowledgeTree (at least until 4.x) using the plugin architecture and language selection at login-time.

The other big change in this release is the full-stack installers for KnowledgeTree. These serve two purposes:

Firstly, it provides an easy-to-install ("one-click") version of KnowledgeTree so people can evaluate it without understanding the technical requirements in terms of web server and database and configuration. Hopefully this will lower the amount of forum posts about wrong PHP and MySQL versions.

Secondly, the installer is also the supported platform. As a fixed set of components, the support requirements are lowered dramatically. Instead of having to know at which version of MySQL a certain bit of functionality was added, we can focus on the MySQL that best works with KnowledgeTree. The Professional 1.0 release is only available as a stack installer for this reason.