3.7.0
The release that makes an edition a different server, not a different set of buttons.
Until now Community and Enterprise installed the same machine. Postfix, Dovecot, rspamd, ClamAV, BIND, PostgreSQL, Varnish and the search engines were installed on every server, and the panel hid what the edition was not entitled to. A Community server paid for all of it in memory and could use none of it.
From 3.7.0 a module registry decides what a server installs, an administrator can add or remove a module from the admin panel, and entering a licence key upgrades a running server in place — by installing, never by migrating, and without touching a byte of customer data.
Upgrading is hitechcloudcli update. Nothing is uninstalled from a server that already exists: this release only adds.
Editions and modules
configuration/hitechadmin/config/modules.jsonis the registry — for every module: its edition, the components that install it, the units it owns, the features it provides, the packages it may remove, the paths that hold customer data, and what its memory costs. The CLI, both panels and the installer read the same file.hitechcloudcli native-module list | status | install | uninstall | repair, each answering--json.installis idempotent.uninstallstops the units, removes only packages no other installed module claims, and never removes anything underdata;--purgerefuses rather than guesses when data is in use.repairre-renders a module's own configuration and re-enables its units — the "put it back" button, on both editions.- A Community install stops installing what it cannot use. Community installs a WebEngine, PHP, MariaDB, Redis, cron, the firewall, ACME, GoAccess, the jail, the resource engine — plus FTP, the malware scanner, and email (Postfix, Dovecot, OpenDKIM, rspamd) with aliases, forwarders and a webmail. Everything else arrives with a licence.
- Admin (2087) gets Modules & Services: every module with its live memory, its units, the three actions, what a removal would free, and what it would keep. It refuses to remove a module another one depends on.
- A page whose module is not installed says so instead of failing when a customer clicks it. The answer is cached for a minute and fails open: a CLI that cannot be reached never makes a working feature disappear.
- Entering a licence upgrades the server itself. A valid key runs
native-module install --edition enterprise; the modules arrive and the panel's feature list widens. A licence that lapses uninstalls nothing — the features close, the services keep running, and reclaiming the memory stays the operator's decision.
Webmail
- Community has a webmail. Roundcube installs as a module: its own database, its own vhost on the mail hostname with this server's certificate, its own PHP-FPM pool, IMAP and SMTP on this server's own Dovecot and Postfix. Removing it never drops its database, and
--purgerefuses while contacts, identities or saved settings are in it. - This update installs it on a server that has mail and no webmail — and on no other server.
- An upgrade keeps both. An Enterprise server that came up from Community keeps Roundcube installed and reachable beside our own webmail; the two read the same mailboxes. Our webmail leads, the other is one click away, and the account's own choice is remembered.
- Settings follow the customer across. On the first sign-in to our webmail, that mailbox's contacts, contact groups, identities, signatures and interface language are copied from the Community webmail — read-only, once, skipping what already exists, and never failing a sign-in. The originals stay exactly where they were.
- What Community had, Enterprise now has too: contact groups with vCard/CSV import and export, viewing a message's source, a default Bcc per identity, a display-timezone preference, changing the mailbox password from inside the webmail, and an autoresponder.
Mail
- Filters are enforced when the mail arrives. Rules used to run only while the webmail was open and polling, so mail was not filtered when nobody was looking. They are compiled to a Sieve script and pushed to the mail server on every change; ManageSieve is installed and configured, and
native-mail checkverifies it the way it verifies IMAP. hitechcloudcli native-mailbox status | passwd | sieve get | sieve set— root-only, one mailbox per call, refusing an address this server does not have. A new password is read from standard input and piped straight to the mail server's own tool: never on a command line, never in a log, never in a temporary file.
Changed
- The autoresponder is an Enterprise feature. The published split has always described it as one — it sits among the advanced mail features a licence adds, beside the Sieve filter editors it is built on — while the catalogue marked it Community, and nothing compared the two in that direction. Community's webmail is Roundcube without the advanced mail features; this is one of them. A Community server that has been using the autoresponder loses the page on upgrade; the Sieve rules already written keep running, because nothing uninstalls them.
Fixed
- An Enterprise install was not a superset of a Community one.
native-module install --edition enterprisefiltered on the module's own edition, so a server licensed any way other than upgrading a running Community install — provisioned straight onto a bare OS, or repaired after a purge — came up without PHP, MariaDB, mail, FTP or any other Community module. Both paths now build the same list. - The Community webmail's settings were never going to arrive. The carry-over read the mailbox by a column its source table does not have, and spoke only one database engine while this panel installs the other. It now speaks both and matches the real schema.
hitechcloudcli admin logsleft out the admin's own API log on exactly the edition whose API writes it.- The web terminal opens the account's jail, or it does not open. Where the jail was not installed the terminal fell back to a root shell.
- Destructive panel routes answer POST only, so a link in an email or an image tag can no longer delete a customer's object on their behalf.
- The sign-in CAPTCHA now protects the sign-in form. The setting existed and verified nothing.
- A monitored-services guard that never worked:
systemctl list-unit-filesexits 0 with no matches, so every service passed. It reads the unit's load state now. - Numbers over a million print the way Go prints them, wherever a template shows one.
Documented
website/docs/architecture/editions-and-modules.md— what each edition installs, what the upgrade promises, and the rules the tests hold it to.website/docs/architecture/webmail-parity.md— every feature of the Community webmail, whether Enterprise has it, and where it lives.website/docs/architecture/community-only-audit.md— everything Community has that Enterprise does not, each one judged and recorded. A test now fails the build when a new one appears without being judged.