Skip to main content

· 2 min read
Thorsten Suckow-Homberg

I have just release conjoon 1.2.1, which is a maintenance release with a focus on the handling of email addresses in routing and general views such as the Inbox View, the editor and the message view.

The new release provides more detailed information about the email address of the recipient or the sender when viewing an email in a related view - this also includes lists where email messages appear:
You're now able to inspect the email address by hovering over the address-element which will then present the full address (incl. the recipient's/sender's name, if available). Also, new messages can now directly be composed by clicking an email address present in any of such views.

Additionally, the routing has been updated to be more generous when it comes to parsing email addresses: Routes like #cn_mail/message/compose/<> now properly create a new message for the recipients specified in the route, in this case <>.

Changes to the application engine

extjs-lib-core now allows for package configurations using the semantic complement of disabled: Users who wish to use enabled instead can now do so.

All Notable changes

The notable changes for this release include:

· 4 min read
Thorsten Suckow-Homberg

I'm happy to announce conjoon 1.1.0, a feature release that brings a lot of qol-improvements, bug fixes and a major feature to conjoon.



With the new authentication package extjs-app-localmailaccount, you're now able to store multiple Email-Accounts directly on your computer. While the first major release of conjoon came bundled with extjs-app-imapuser, an auth-package for authorizing against a single IMAP account (that was in particularly developed for free email hosters), this package now focuses on custom installations where users maintain their own instances of conjoon.

Enabling extjs-app-localmailaccount - Frontend:

The package comes bundled with conjoon, so there's nothing left to do for you except for enabling the package. Use the latest version of create-conjoon to ease the installation process - it allows you to copy an official release to the directory of your previous installation (make sure you read the documentation before you overwrite the directory contents, or if you'd rather get a dev environment for conjoon up and running).

Once you have updated, open conjoon.conf.json, then look for the section where extjs-app-imapuser is configured. Add a property named disabled (if not already existing) and set this to true.

"extjs-app-imapuser": {
"disabled": true

For extjs-app-localmailaccount, set the property to false:

"extjs-app-localmailaccount": {
"disabled": false
missing configuration for extjs-app-localmailaccount

In case you have no extjs-app-localmailaccount existing with your conjoon.conf.json, refer to the documentation and utilize the default configuration coming with the package.

Once everything is set configured, restarting your instance of conjoon should now directly boot to the MailDesktopView. A new button will be available in its toolbar:

Clicking it will open up the MailAccountWizard that lets you choose from a set of pre-configured accounts:


You can also apply custom mail server information by scrolling down the list and pick the "...other IMAP account"-entry.

Once you have provided the required details, the Email Account will be stored in the Local Storage of your browser. It is always editable afterwards by selecting the node prepresenting the Email Account from the MailFolderTree on the left side of the MailDesktopView:

Enabling extjs-app-localmailaccount - Backend:

Please make sure you take a look at the updates that came with the available backends, namely lumen-app-email - you need to update to the latest version to make sure the updated client can properly communicate with the backend. Make sure you apply the proper api-configuration to your backend instance. Upgrading to a new version of lumen-app-email will also update to the latest version of php-lib-conjoon. Needless to say, lumen-app-email is fully backwards compatible.

Supporting UI-State-management

I have added support for saving the state of the UI so you do not have to expand/collapse various views once you re-enter the application. This is a small qol-improvement for now. The initial support for this opens the door for more improvements in this regard.

Other changes

Other notable changes include:

· One min read
Thorsten Suckow-Homberg

🎄 I'm happy to announce conjoon 1.0.4, an interim release that brings Dependency Injection to conjoon.

Paving the way for conjoon 1.1.0 that targets support for runtime-replacable plugins, Dependeny Injection allows for a more supple integration of functionality for application instances.

If you're interested in how the Inversion of Control-Container works in conjoon, have a look at this article.

The functionality has been refactored into coon.core.ioc, so if your Ext JS application is in the need of a simple yet powerful and flexible IoC-Container, you're good to go!

🔔 Happy Holidays! ❄️

· 2 min read
Thorsten Suckow-Homberg

I'm happy to announce conjoon 1.0, the very first major release.

For updating to the latest version, simply use the installer. It will let you select the latest release when opting for the version to install.


v1.0.0 marks the first major release for the JavaScript Email frontend, over 100 tickets related to bugfixes, optimizations and minor features across all projects where closed.

This release focuses on providing a stable frontend in conjunction with lumen-app-email.

Besides the features already introduced with the release candidates, the following features have been added:


Installer and CLI actions for lumen-app-email

The installation for lumen-app-email has been simplified with the help of Artisan and CLI commands. To get an instance of lumen-app-email running, use

$ composer create-project conjoon/lumen-app-email {targetDir} {version}

which will start the installation process. For more information, refer to the official guide.

Docker Container

ddev-ms-email has been updated to utilize the installer of lumen-app-email and additionally provides integration options for conjoon so that the container can be used for serving both the backend and the frontend.

$ ddev create-conjoon

will start the installation of conjoon. For more information, refer to the official guide.

· 3 min read
Thorsten Suckow-Homberg

Easily create Siesta tests for your applications

Siesta is a JavaScript unit and UI testing tool which allows for running tests (for Ext JS (view-) components, amongst others) directly in the web browser (or headless in case you want to use it with your ci tools).

It is conjoon's favorite among the various testing tools out there (I'm also working with Jest 🃏 when there's no Ext JS involved) and without it, it's clear that End-to-End tests of some of the features and changes that have made it into conjoon would have slowed the project down due to their cyclic complexity - or even worse, make the software stuck in regression.

extjs-app-webmail alone sports more than 5000 unit and ui tests created with Siesta and they all make sure that the frontend behaves as intended and is free from un-welcomed side effects for any edge case that might occur (I know that's a bold statement).

To ease the process of setting up a functional Siesta environment, I'm introducing the cli tool create-siesta which can be used with any JavaScript framework that requires a functional Siesta application running in a web browser, or at least a fully fledged infrastructure for running Siesta tests. However, by providing integrated build options for the Ext JS SDK, it is best suited for environments where the Sencha framework is already being used or will be used.

For using the tool, all that is required is a working Node.js installation on your machine. The scaffolding process can then be started by typing

npx create-siesta@latest

on the console. create-siesta will then guide you through the installation process and also consider the environment (aka current working directory) it was invoked in, by falling back to already existing Ext JS sources for example, or any other package requirements already available.

Once create-siesta is finished, a folder (defaulting to tests) will be available with your project that contains a scaffolded Siesta environment with templates for additional and future tests you and your team can implement. Tests can then be started with

npm run siesta:test

create-siesta builds upon an already available helper tool for creating tests with Siesta, namely @coon-js/siesta-lib-helper which is already widely used throughout the conjoon project and the packages it depends on. This means that you will have an additional control at hand with the Siesta application that allows for switching between toolkit dependent tests and dynamically changing timeout values used with


in tests.

The additional control made available by siesta-lib-helper allows for switching between the modern M and classic C toolkit and provides a list of timeout values that can be globally used with t.waitForMs() in tests.


The documentation for create-siesta can be found here, the sources are available with the coon.js organization at GitHub, which provides a collection of useful tools for rapid Sencha Ext JS application development, and spawned from the conjoon open source project.