Technical insights and software architecture

Deep dives into PHP development, Horde Framework evolution, and practical software engineering. Focused on real-world solutions for complex technical challenges.

Core Topics

PHP, Horde Framework, authentication systems, composer workflows, and modern development practices.

Long-form Analysis

Comprehensive technical articles exploring architectural decisions, migration strategies, and lessons learned from real projects.

Code & Community

Open source contributions, framework development, and sharing knowledge with the PHP developer community.

  • CardDAV vs MacOS Contacts

    In case you run Horde, NextCloud or other CalDAV/CardDAV server products, sooner or later you will encounter users who want to use the MacOS Addressbook application, “Contacts”, to access their server contacts. As of MacOS 11.5.2, the apple contacts app only supports one addressbook per principal. It will pick the first addressbook and use it

    Continue reading


  • Can Horde’s internal API use PSR-7 Messages?

    Applications call into abstract services backed by other apps, with limited coupling. This may sound a little like micro services, but predates the concept by a decade. Horde’s registry routes the call to the implementing app if present. For example, both “sam” and “ingo” applications implement some spam filter related API calls. Registry setup decides…

    Continue reading


  • Move config out of webroot for Horde 6

    These items remain in the config/ dir: default registry.php file default prefs.php file routes.php file conf.xml definition file other defaults files like backends.php, nls.php a stub for hooks (maybe we can get away without it) These items reside outside the webroot: conf.php file registry.local.php routes.local.php (if any, I have never seen it used) horde.local.php other

    Continue reading


  • Horde Authentication: Revisited

    Horde Authentication as it is today has been devised more than a decade ago and it is surprisingly complex. Use cases and requirements have evolved. In a previous article, I introduced basic authentication and authorization needs and how they can be overwhelmingly complex to get right. I will not go into details of how it

    Continue reading


  • Authentication & Authorization is complex

    Could there be any more straight forward topic than authentication & authorization? The user provides user name and password and clicks “login”, the backend checks if credentials are valid. Invalid credentials are not authorized, valid credentials are authorized and identified (authenticated). End of story. Right? Well… in many cases, it’s not that trivial. As a

    Continue reading


  • CardDAV: What is Turba’s true data model?

    by

    in ,

    Turba Addressbook imports, exports and syncs to and from many formats. I discussed all the formats in a previous article. You can even customize the addressbooks, make them contain extra fields or omit common fields. Saving and loading data from the addressbook backend is in some way one more such conversion. Turba can actually read

    Continue reading


  • Horde’s HTTP component goes PSR

    This weekend, I gave the horde/http component a some major redesign. See how things escalated. Oh my. My minimum goals were namespacing, PSR-4 (Revised Autoloading Standard) and some minor, schematic adjustments. The final result is quite different. I ended up implementing PSR-7 (HTTP Message Interface), PSR-17 (HTTP Factories) and PSR-18 (HTTP Client). The code largely

    Continue reading


  • Maintaina Horde: Fourth Of July Additions

    I packaged some more exotic horde apps and libraries for use with the composer installer and the FRAMEWORK_6_0 codebase. This was mostly formal conversion work, no actual testing was done. Some of these items might not even be very useful to most administrators. Nevertheless, I want to close the gap between what is available in

    Continue reading


  • Composer Installer gets Horde Themes

    by

    in ,

    A while back I added theme package support to the composer installer for horde (horde-installer-plugin). There are some Horde themes or theme customisations available out there, but they come as zip files you have to manually deploy to the right directories, often spanning multiple apps. The installer recognizes themes and generates appropriate symlinks in the

    Continue reading


  • No more master branch in maintaina horde

    I am changing the default branch in all maintaina-com/ horde repos to be the FRAMEWORK_6_0 branch. In a separate next step, the master branch on these repos will be removed. This is not due to any semantic discussion of technical terms like “master”. I am simply acknowledging reality. At the moment I cannot hope to

    Continue reading