<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron]]></title><description><![CDATA[<p dir="auto">Hi all,</p>
<p dir="auto">The existing Synapse/Element packages on Cloudron work, but they predate Matrix 2.0: no <strong>Matrix Authentication Service</strong>, which means next-gen auth (Element X), and especially <strong>Element Call</strong> don't work properly. Instead of patching the old package I've built a new one that packages the full <strong>Element Server Suite (ESS Community)</strong> stack — the same components as Element's official Helm chart (<a href="https://github.com/element-hq/ess-helm" target="_blank" rel="noopener noreferrer nofollow ugc">element-hq/ess-helm</a>), repackaged as a single Cloudron app.</p>
<h2>What's included</h2>
<p dir="auto">One app, one container, the whole stack:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Component</th>
<th>Version</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td>Synapse</td>
<td>1.157.1</td>
<td>Matrix homeserver (MSC4143 RTC transports enabled)</td>
</tr>
<tr>
<td>Matrix Authentication Service</td>
<td>1.21.0</td>
<td>Next-gen auth (OIDC-native, Element X compatible)</td>
</tr>
<tr>
<td>Element Web</td>
<td>1.12.24</td>
<td>Web client with embedded Element Call</td>
</tr>
<tr>
<td>Element Call (standalone SPA)</td>
<td>0.22.0</td>
<td>Guest-accessible call links</td>
</tr>
<tr>
<td>LiveKit SFU + lk-jwt</td>
<td>1.13.4 / 0.5.0</td>
<td>WebRTC media backend for calls</td>
</tr>
<tr>
<td>Element Admin</td>
<td>0.1.12</td>
<td>Admin UI (users, rooms)</td>
</tr>
<tr>
<td>Hookshot</td>
<td>7.4.3</td>
<td>Webhooks/bridges (optional)</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Cloudron integration:</strong> SSO via the Cloudron OIDC addon → MAS → Synapse. Your Cloudron users log in with their normal accounts, including on Element X mobile. PostgreSQL via the Cloudron addon, well-known files served automatically, all configs regenerated from Cloudron env on every start.</p>
<h2>What works today (v0.3.8)</h2>
<ul>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Login via Cloudron SSO on Element Web and Element X (iOS tested)</li>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Messaging, media, federation with other Matrix servers</li>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <strong>Element Call between users on your server</strong> (desktop confirmed, mobile in testing)</li>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Element Admin against MAS + Synapse admin APIs</li>
</ul>
<h2>Install</h2>
<p dir="auto">Install as a <strong>custom app</strong> via the version catalog:</p>
<p dir="auto"><em>App Store → Settings (gear icon) → Custom App Repository</em> and enter <code>https://git.due.ren/andreas/cloudron-ess/-/raw/main/CloudronVersions.json</code>.</p>
<p dir="auto">Repo: <code>https://git.due.ren/andreas/cloudron-ess</code></p>
<p dir="auto">The app asks for several locations at install time (all prefilled except the primary):</p>
<ul>
<li><strong>Primary location</strong> = the account/auth domain — set this to e.g. <code>account.example.com</code> (this is where MAS lives; it must be primary because Cloudron's OIDC addon only registers callbacks on the primary domain)</li>
<li><code>chat.</code> → Element Web, <code>matrix.</code> → Synapse, <code>mrtc.</code> → RTC backend, <code>admin.matrix.</code> → Admin, <code>call.</code> → standalone Element Call</li>
</ul>
<h2>Current limitations / gotchas (please read before testing)</h2>
<ol>
<li><strong>The apex domain alias.</strong> Matrix identity lives on your bare domain (<code>@user:example.com</code>), so <code>https://example.com/.well-known/matrix/*</code> must be served correctly. Right now the only way to do this is to <strong>add your bare domain as an alias on the ESS app</strong> — the app then serves the well-known files itself and redirects everything else to Element Web. That means the apex domain has to be parked on this app, which is far from ideal if you want to run something else there. Cloudron's built-in per-domain well-known support doesn't allow the custom JSON entries Matrix RTC needs (<code>org.matrix.msc4143.rtc_foci</code>), hence the request to the Cloudron team below.</li>
<li><strong>Server name is permanent.</strong> The Matrix server name is baked in at first start. Changing domains later will brick your identity — the app refuses to start on a mismatch by design.</li>
<li><strong>Federated calls</strong> require the <em>other</em> homeserver to also advertise an RTC transport (<code>rtc_foci</code> in its well-known). Calls with users on servers that haven't deployed Matrix RTC yet will show "Call is not supported" on their side.</li>
<li><strong>Fresh installs only.</strong> No migration path yet from the existing Cloudron Synapse package (syn2mas migration is on the roadmap, untested).</li>
<li><strong>Element X mobile calls</strong> — still shaking out well-known caching issues (log out/in after server updates if calls error out). Actively being worked on.</li>
<li><strong>Resource usage:</strong> this is ~7 services in one container. Give it 2–4 GB memory.</li>
<li>Hookshot ships but is off by default; workers/redis scaling not implemented yet.</li>
</ol>
<h2>Request for the Cloudron team</h2>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> <a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> The apex-domain situation (limitation #1) could be solved cleanly with a small platform feature: <strong>let an app declare custom well-known entries for its parent/apex domain</strong> — either in <code>CloudronManifest.json</code> or via an API the app can call — so Cloudron's nginx serves e.g. <code>https://example.com/.well-known/matrix/{server,client}</code> and <code>/.well-known/element/element.json</code> on the app's behalf, without the app claiming the whole apex as an alias.</p>
<p dir="auto">Cloudron already serves <em>some</em> well-known content per domain, but there's no way to set the arbitrary JSON that Matrix needs today (e.g. the <code>org.matrix.msc4143.rtc_foci</code> transport entry that Element Call requires), and no way for a package to register it automatically. A <code>wellKnown</code> section in the manifest (updated on configure/restart) would benefit any protocol using apex-domain discovery — Matrix, WebFinger/Mastodon delegation, etc. Happy to write up a concrete proposal or beta-test an implementation with this package.</p>
<h2>How you can help</h2>
<ul>
<li>Install it on a test domain and report: SSO login, Element X login, 1:1 and group calls, federation with <a href="http://matrix.org" target="_blank" rel="noopener noreferrer nofollow ugc">matrix.org</a></li>
<li>Especially interested in: calls between two different ESS-package servers, iOS vs Android behavior, and apex/alias setups</li>
<li>Issues → please reply here</li>
</ul>
<p dir="auto">Everything is rebuilt from upstream Element artifacts, config generation mirrors the official Helm chart, so upstream version bumps should be routine once this stabilizes. My plan is to eventually either implement the upstream ESS Community migration tool or build a custom script for future migrations from the legacy Cloudron matrix apps.</p>
<p dir="auto">Thanks for testing!</p>
]]></description><link>https://forum.cloudron.io/topic/15728/testers-wanted-element-server-suite-ess-community-for-cloudron</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 17:54:31 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/15728.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Jul 2026 16:55:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Sun, 09 Aug 2026 01:12:53 GMT]]></title><description><![CDATA[<p dir="auto">Just successfully moved my Matrix instance over to this ESS package.</p>
]]></description><link>https://forum.cloudron.io/post/127946</link><guid isPermaLink="true">https://forum.cloudron.io/post/127946</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Sun, 09 Aug 2026 01:12:53 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 31 Jul 2026 08:12:56 GMT]]></title><description><![CDATA[<p dir="auto">We can take a look at this after Cloudron 10, thanks.</p>
]]></description><link>https://forum.cloudron.io/post/127525</link><guid isPermaLink="true">https://forum.cloudron.io/post/127525</guid><dc:creator><![CDATA[girish]]></dc:creator><pubDate>Fri, 31 Jul 2026 08:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Mon, 27 Jul 2026 18:11:53 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/james" aria-label="Profile: James">@<bdi>James</bdi></a> Oops, sorry about that. It's public now. <a href="https://git.due.ren/andreas/cloudron-box/-/commit/314e5f7a39aec36e61bc21dfced5f26dec797b96" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-box/-/commit/314e5f7a39aec36e61bc21dfced5f26dec797b96</a></p>
]]></description><link>https://forum.cloudron.io/post/127266</link><guid isPermaLink="true">https://forum.cloudron.io/post/127266</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Mon, 27 Jul 2026 18:11:53 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Mon, 27 Jul 2026 17:59:32 GMT]]></title><description><![CDATA[<p dir="auto">fyi: <a class="plugin-mentions-user plugin-mentions-a" href="/user/andreasdueren" aria-label="Profile: andreasdueren">@<bdi>andreasdueren</bdi></a><br />
<a href="https://git.due.ren/andreas/cloudron-box" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-box</a> can't be accessed without an account.</p>
]]></description><link>https://forum.cloudron.io/post/127265</link><guid isPermaLink="true">https://forum.cloudron.io/post/127265</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Mon, 27 Jul 2026 17:59:32 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Mon, 27 Jul 2026 17:40:49 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> Almost the same, with two differences:</p>
<ol>
<li>
<p dir="auto">That feature only serves a fixed set of locations (<code>matrix/server</code>, <code>matrix/client</code>, <code>host-meta</code>, <code>caldav</code>/<code>carddav</code>). <code>element/element.json</code> isn't in the whitelist, so adding it to the domain config today would still 404. If you're open to adding it there, or better, serving any configured location, that solves it. I actually have a small patch for the generic version ready (branch <code>wellknown-generic-locations</code> on <a href="https://git.due.ren/andreas/cloudron-box" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-box</a>, incl. regression test) if you want an MR.</p>
</li>
<li>
<p dir="auto">The entries are static text the admin maintains by hand, while the correct values (e.g. <code>rtc_foci</code> for Element Call, the MAS auth block) come from the app and change with its config. That's the angle of my feature request: letting an app declare/update these entries for its apex domain itself, so they can't go stale. The dashboard feature would stay as the manual override.</p>
</li>
</ol>
<p dir="auto">So: same mechanism, just asking for it to be un-whitelisted and optionally app-populated.</p>
]]></description><link>https://forum.cloudron.io/post/127260</link><guid isPermaLink="true">https://forum.cloudron.io/post/127260</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Mon, 27 Jul 2026 17:40:49 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Mon, 27 Jul 2026 17:22:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/andreasdueren" aria-label="Profile: andreasdueren">@<bdi>andreasdueren</bdi></a> is this same or different from <a href="https://docs.cloudron.io/domains#matrix-server-location" target="_blank" rel="noopener noreferrer nofollow ugc">https://docs.cloudron.io/domains#matrix-server-location</a> ? I guess we can also add element.json there.</p>
]]></description><link>https://forum.cloudron.io/post/127258</link><guid isPermaLink="true">https://forum.cloudron.io/post/127258</guid><dc:creator><![CDATA[girish]]></dc:creator><pubDate>Mon, 27 Jul 2026 17:22:46 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Mon, 27 Jul 2026 01:36:19 GMT]]></title><description><![CDATA[<p dir="auto">Pinging the Cloudron team <a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> <a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> one more time more cleanly for this, or a comparative feature request (if you give me permissions on <a href="http://git.cloudron.io" target="_blank" rel="noopener noreferrer nofollow ugc">git.cloudron.io</a> I’m happy to commit something directly):</p>
<blockquote>
<p dir="auto">andreasdueren <a href="/post/127108">said</a>:</p>
<h2>Request for the Cloudron team</h2>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> <a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> The apex-domain situation (limitation #1) could be solved cleanly with a small platform feature: <strong>let an app declare custom well-known entries for its parent/apex domain</strong> — either in <code>CloudronManifest.json</code> or via an API the app can call — so Cloudron's nginx serves e.g. <code>https://example.com/.well-known/matrix/{server,client}</code> and <code>/.well-known/element/element.json</code> on the app's behalf, without the app claiming the whole apex as an alias.</p>
<p dir="auto">Cloudron already serves <em>some</em> well-known content per domain, but there's no way to set the arbitrary JSON that Matrix needs today (e.g. the <code>org.matrix.msc4143.rtc_foci</code> transport entry that Element Call requires), and no way for a package to register it automatically. A <code>wellKnown</code> section in the manifest (updated on configure/restart) would benefit any protocol using apex-domain discovery — Matrix, WebFinger/Mastodon delegation, etc. Happy to write up a concrete proposal or beta-test an implementation with this package.</p>
</blockquote>
]]></description><link>https://forum.cloudron.io/post/127240</link><guid isPermaLink="true">https://forum.cloudron.io/post/127240</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Mon, 27 Jul 2026 01:36:19 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Mon, 27 Jul 2026 00:32:39 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/humpty" aria-label="Profile: humpty">@<bdi>humpty</bdi></a> yes that’s what it’s designed to do</p>
]]></description><link>https://forum.cloudron.io/post/127235</link><guid isPermaLink="true">https://forum.cloudron.io/post/127235</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Mon, 27 Jul 2026 00:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Sun, 26 Jul 2026 15:12:54 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/andreasdueren" aria-label="Profile: andreasdueren">@<bdi>andreasdueren</bdi></a> Does the migration process work on existing installs to keep using the same domain?</p>
]]></description><link>https://forum.cloudron.io/post/127231</link><guid isPermaLink="true">https://forum.cloudron.io/post/127231</guid><dc:creator><![CDATA[humpty]]></dc:creator><pubDate>Sun, 26 Jul 2026 15:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Sun, 26 Jul 2026 14:33:02 GMT]]></title><description><![CDATA[<p dir="auto">Migration update: full production-style cutover tested end-to-end — v0.3.18</p>
<p dir="auto">Since the last update I ran the complete final-migration path (not just a rehearsal) on a dedicated test Cloudron, exactly the way a real production switch would go.</p>
<p dir="auto">Test setup</p>
<ul>
<li>Fresh legacy Cloudron Synapse (<code>org.matrix.synapse</code> 1.138.1) as the source</li>
<li>Two users, both linked to Cloudron SSO</li>
<li>Five live device sessions before migration: Element X on iOS, Element X on Android, and Element Web/Safari sessions</li>
<li>Fresh ESS target installed on temporary domains via the community catalog</li>
</ul>
<p dir="auto">What the wizard did</p>
<p dir="auto">Rehearsal first (validated, target discarded), then final mode: backups of both apps, source frozen before the export, PostgreSQL/signing-key/config transfer, <code>syn2mas</code> dry-run, real import, then the interactive <code>CUTOVER-DONE</code> gate while I moved the production domains over in the dashboard.</p>
<p dir="auto">The result</p>
<p dir="auto">All five pre-migration device sessions survived the migration without re-authentication. Both phones and the browser sessions just kept syncing against the migrated MAS+Synapse — token sets verified hash-identical, device IDs preserved in MAS compatibility sessions, signing key identical, SSO links and password hashes intact. Calls work too (after the fix below).</p>
<p dir="auto">Two things the test uncovered, both addressed in v0.3.18</p>
<ol>
<li>
<p dir="auto">Wizard bug (fixed): the post-cutover health check probed the Matrix client API on the MAS port instead of Synapse's port, so a perfectly healthy cutover was reported as failed and the wizard (correctly, but unnecessarily) froze everything again. Failing closed instead of open was the designed behavior, but the probe itself was wrong.</p>
</li>
<li>
<p dir="auto">Cutover pitfall (now documented in the wizard and docs): if your legacy setup used Cloudron's Domains → Well-Known feature for Matrix, those entries survive the migration and keep intercepting <code>https://&lt;server-name&gt;/.well-known/matrix/client</code> at the platform nginx — before ESS's apex alias ever gets asked. Since that fixed template can't carry <code>rtc_foci</code>, Element Call fails with <code>MISSING_MATRIX_RTC_TRANSPORT</code> even though ESS itself is completely healthy. Delete those dashboard well-known entries during cutover and let the ESS apex alias serve its own complete payload. Mobile Element X caches well-known at login, so force-close and reopen the app afterward.</p>
</li>
</ol>
<p dir="auto">Migration command (updated pin):</p>
<pre><code class="language-bash">bash &lt;(curl -fsSL https://git.due.ren/andreas/cloudron-ess/-/raw/v0.3.18/scripts/cloudron-synapse-to-ess.sh)
</code></pre>
<p dir="auto">Docs:</p>
<ul>
<li>Guided wizard: <a href="https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.18/scripts/cloudron-synapse-to-ess.md" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.18/scripts/cloudron-synapse-to-ess.md</a></li>
<li>Migration reference / manual fallback: <a href="https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.18/docs/MIGRATION.md" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.18/docs/MIGRATION.md</a></li>
</ul>
<p dir="auto">Where this stands</p>
<p dir="auto">With rehearsal, final migration, real domain cutover, session survival, SSO, and calls all verified end-to-end, I consider this essentially production-ready. I'm mainly waiting for feedback from more testers with different setups (bridges/appservices, large media stores, S3, federation-heavy servers) before calling it stable — and my own plan is to migrate my production Matrix servers over soon.</p>
<p dir="auto">If you test it, please report back either way — successful boring migrations are just as useful as bug reports.</p>
]]></description><link>https://forum.cloudron.io/post/127228</link><guid isPermaLink="true">https://forum.cloudron.io/post/127228</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Sun, 26 Jul 2026 14:33:02 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Sat, 25 Jul 2026 13:13:21 GMT]]></title><description><![CDATA[<p dir="auto">Migration update: guided one-command Synapse → ESS wizard in v0.3.17</p>
<p dir="auto">The migration workflow has now been wrapped in an interactive wizard. After installing a fresh ESS target on temporary domains, run this on a Mac or Linux computer where the Cloudron CLI is installed and logged in:</p>
<pre><code>bash &lt;(curl -fsSL https://git.due.ren/andreas/cloudron-ess/-/raw/v0.3.17/scripts/cloudron-synapse-to-ess.sh)
</code></pre>
<p dir="auto">No migration arguments are required. The wizard asks for:</p>
<ol>
<li>the domain of the old Cloudron Synapse app;</li>
<li>the primary domain of the fresh ESS target;</li>
<li>rehearsal or final migration;</li>
<li>explicit confirmation before starting;</li>
<li>a second confirmation after the complete <code>syn2mas</code> dry-run.</li>
</ol>
<p dir="auto">In final mode it freezes the old homeserver before the database dump, leaves both apps safely offline for the domain switch, and starts ESS only after the operator confirms <code>CUTOVER-DONE</code>.</p>
<p dir="auto">The wizard handles Cloudron backups, PostgreSQL export/restore, the original signing key and server name, appservice registrations, local media, S3 configuration, target recovery mode, preflight checks, the official <code>syn2mas</code> dry-run/import, and rollback.</p>
<p dir="auto">One important media detail: <strong>local media is copied even when S3 is enabled</strong>. S3 may have been enabled after older media was created, or an asynchronous upload may be incomplete. The migrated target therefore preserves the union of all local files and existing S3 objects instead of assuming the bucket is complete.</p>
<p dir="auto">I completed a real end-to-end rehearsal through the new no-argument terminal UI using a fresh disposable ESS target and an existing Cloudron Synapse database. It completed with exit code 0 and verified:</p>
<ul>
<li>3,061 Synapse user rows and all 45 human users;</li>
<li>matching imported human compatibility sessions;</li>
<li>29,533 local media files / 2,389,933,963 bytes;</li>
<li>identical signing-key and S3-provider fingerprints;</li>
<li>identical contents for both appservice registrations;</li>
<li>successful read access to the existing S3 bucket;</li>
<li>removal of credential-bearing staging data after success.</li>
</ul>
<p dir="auto">The old homeserver stayed online throughout the rehearsal. The disposable target was kept in recovery mode, verified, then uninstalled. Only backups created by the test were marked for immediate expiry, and they have already been cleaned up.</p>
<p dir="auto">Documentation:</p>
<ul>
<li>Guided wizard: <a href="https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.17/scripts/cloudron-synapse-to-ess.md" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.17/scripts/cloudron-synapse-to-ess.md</a></li>
<li>Full migration reference/manual fallback: <a href="https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.17/docs/MIGRATION.md" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-ess/-/blob/v0.3.17/docs/MIGRATION.md</a></li>
</ul>
<p dir="auto">The final production domain reassignment remains an explicit Cloudron dashboard step because legacy Synapse/Element domains and bare-domain well-known setups differ between installations. The wizard does not guess or silently take over domains.</p>
]]></description><link>https://forum.cloudron.io/post/127199</link><guid isPermaLink="true">https://forum.cloudron.io/post/127199</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Sat, 25 Jul 2026 13:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 18:17:48 GMT]]></title><description><![CDATA[<p dir="auto">I set up a new server. The installation went smoothly. I logged in via Cloudron using two different CR users.</p>
<p dir="auto">User 1: logged in to element x on iOS<br />
User 2: logged in to element x on GrapheneOS/Android (installed thru google play store)</p>
<p dir="auto"><strong>iOS to Android:</strong></p>
<ul>
<li>Text messages <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></li>
<li>Audio calls <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></li>
<li>Video calls <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></li>
</ul>
<p dir="auto">I'll test iOS to iOS when I get my hands on fam devices tonight.</p>
<p dir="auto">Edit: BTW, I tried the option "blur background" in the video settings and things became REALLY laggy on my Pixel 10. I enabled it during the call. Maybe that's why.</p>
]]></description><link>https://forum.cloudron.io/post/127173</link><guid isPermaLink="true">https://forum.cloudron.io/post/127173</guid><dc:creator><![CDATA[humpty]]></dc:creator><pubDate>Fri, 24 Jul 2026 18:17:48 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 16:09:29 GMT]]></title><description><![CDATA[<h2>Migration update: v0.3.13 tested with real Synapse data</h2>
<p dir="auto">A real end-to-end migration rehearsal has now been completed using a<br />
disposable ESS target and a copy of an existing PostgreSQL-backed Synapse<br />
homeserver. The live source server was not modified.</p>
<p dir="auto">The rehearsal covered:</p>
<ul>
<li>restoring a real Synapse PostgreSQL database;</li>
<li>preserving the original Matrix server name and signing key;</li>
<li>copying the media store;</li>
<li>running the official <code>mas-cli syn2mas</code> dry run and real import;</li>
<li>importing human users, password hashes, OIDC links, devices, sessions, and<br />
access tokens;</li>
<li>verifying an imported access token against<br />
<code>/_matrix/client/v3/account/whoami</code>;</li>
<li>preserving existing appservice registrations;</li>
<li>retaining rooms, history, E2EE/device data, and media;</li>
<li>restoring the clean ESS target through the rollback command.</li>
</ul>
<p dir="auto">The test uncovered several problems in the original v0.3.11 workflow. These<br />
included ineffective process shutdown, the wrong Synapse configuration being<br />
passed to <code>syn2mas</code>, MAS migration metadata being removed during database<br />
restore, warning exit codes being treated as failures, and appservice<br />
registrations not being copied.</p>
<p dir="auto">These issues are fixed in <strong>v0.3.13</strong>.</p>
<p dir="auto"><strong>Do not use v0.3.11 or v0.3.12 for migration. Use v0.3.13 or later.</strong></p>
<p dir="auto">The corrected process requires putting only the new ESS target into Cloudron<br />
debug/recovery mode so Synapse and MAS are completely offline before the<br />
database is restored. The source Synapse installation remains untouched and<br />
continues to be the fallback until the final domain cutover.</p>
<p dir="auto">Current instructions:</p>
<p dir="auto"><a href="https://git.due.ren/andreas/cloudron-ess/-/blob/main/docs/MIGRATION.md" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.due.ren/andreas/cloudron-ess/-/blob/main/docs/MIGRATION.md</a></p>
<p dir="auto">Although the workflow has now passed a real-data rehearsal, migration should<br />
still be treated as a maintenance operation: take backups, rehearse with a<br />
copy, inspect the <code>syn2mas</code> warnings, and plan the domain cutover carefully.</p>
]]></description><link>https://forum.cloudron.io/post/127162</link><guid isPermaLink="true">https://forum.cloudron.io/post/127162</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Fri, 24 Jul 2026 16:09:29 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 16:08:52 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><strong>Update — use v0.3.13 or later</strong></p>
<p dir="auto">Do <strong>not</strong> use the migration implementation from v0.3.11 or v0.3.12.<br />
A subsequent real-data end-to-end rehearsal found and fixed several issues,<br />
including restoring PostgreSQL while Synapse/MAS could still be running,<br />
incorrect <code>syn2mas</code> configuration, loss of MAS migration bookkeeping, and<br />
missing appservice registrations.</p>
<p dir="auto">The corrected workflow was published in <strong>v0.3.13</strong> and tested using a<br />
disposable ESS installation and a copy of a real Synapse database. The live<br />
source homeserver was not modified.</p>
<p dir="auto">Migration must be performed with the <strong>new ESS target in Cloudron<br />
debug/recovery mode</strong>, with Synapse and MAS completely offline. Follow the<br />
current <a href="https://git.due.ren/andreas/cloudron-ess/-/blob/main/docs/MIGRATION.md" target="_blank" rel="noopener noreferrer nofollow ugc"><code>docs/MIGRATION.md</code></a>,<br />
not the original v0.3.11 instructions below.</p>
</blockquote>
<h2>Migration from existing Synapse package now available in v0.3.11</h2>
<p dir="auto">I added a first guided migration path for moving an existing Synapse homeserver into the ESS Cloudron package.</p>
<blockquote>
<p dir="auto"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--warning" style="height:23px;width:auto;vertical-align:middle" title=":warning:" alt="⚠" /> <strong>This is experimental</strong>: Don't use in production unless you know the risks.</p>
</blockquote>
<p dir="auto">This is meant for people currently running the old/legacy Synapse package who want to move to the new ESS stack with <strong>Matrix Authentication Service (MAS)</strong>, <strong>Element X</strong>, and <strong>Element Call</strong>, without asking every user to log in again.</p>
<p dir="auto">The package now ships a helper script:</p>
<pre><code class="language-bash">/app/pkg/src/migrate-from-synapse.sh  
</code></pre>
<p dir="auto">It uses Element's official <code>mas-cli syn2mas</code> migration tooling under the hood.</p>
<h2>What it preserves</h2>
<p dir="auto">The goal is a real homeserver migration, not a fresh start.</p>
<p dir="auto">The migration is designed to preserve:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Data</th>
<th style="text-align:right">Preserved?</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Matrix server name</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Must stay exactly the same</td>
</tr>
<tr>
<td>Users</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Existing users are imported</td>
</tr>
<tr>
<td>Password hashes</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Old Synapse bcrypt hashes continue working</td>
</tr>
<tr>
<td>Password pepper</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Auto-detected from old <code>homeserver.yaml</code> if present</td>
</tr>
<tr>
<td>Existing sessions</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Users should stay logged in</td>
</tr>
<tr>
<td>Devices</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Existing clients/devices are imported</td>
</tr>
<tr>
<td>Access tokens</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>No forced logout expected</td>
</tr>
<tr>
<td>SSO/OIDC account links</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Existing Synapse OIDC provider is mapped to MAS</td>
</tr>
<tr>
<td>Rooms / room history</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Comes from the Synapse database</td>
</tr>
<tr>
<td>E2EE data</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Comes from the Synapse database</td>
</tr>
<tr>
<td>Media store</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Copied from the old media store</td>
</tr>
<tr>
<td>Signing key</td>
<td style="text-align:right"><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=ceaf42e9406" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /></td>
<td>Reused, so federation identity stays intact</td>
</tr>
</tbody>
</table>
<p dir="auto">In other words: the intention is that users do <strong>not</strong> need to take any action.</p>
<h2>Important requirements</h2>
<p dir="auto">This is only for migrations where the <strong>Matrix server name stays identical</strong>.</p>
<p dir="auto">For example, if your current users are:</p>
<pre><code class="language-text">@alice:example.com  
@bob:example.com  
</code></pre>
<p dir="auto">then the ESS app must also be installed for server name:</p>
<pre><code class="language-text">example.com  
</code></pre>
<p dir="auto">You cannot migrate <code>example.com</code> to <code>matrix.example.com</code> or to a different domain. Matrix server names are permanent.</p>
<p dir="auto">Other requirements / caveats:</p>
<ul>
<li>SAML/LDAP/custom password providers are not supported by MAS directly.</li>
<li>OIDC/SSO migrations should work, but the old Synapse OIDC provider must be mapped to the new MAS provider.</li>
<li>The old and new apps cannot serve the same Matrix domains at the same time, so plan a short maintenance window for the final domain switch.</li>
<li>This is still new — please test on a copy first.</li>
</ul>
<h2>How it works</h2>
<p dir="auto">The script expects migration files in:</p>
<pre><code class="language-text">/app/data/migration/  
</code></pre>
<p dir="auto">Required files:</p>
<pre><code class="language-text">/app/data/migration/homeserver.yaml  
/app/data/migration/synapse.dump  
/app/data/migration/signing.key  
</code></pre>
<p dir="auto">Optional but recommended:</p>
<pre><code class="language-text">/app/data/migration/media/  
</code></pre>
<p dir="auto">Where:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>File</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>homeserver.yaml</code></td>
<td>The old Synapse config</td>
</tr>
<tr>
<td><code>synapse.dump</code></td>
<td>PostgreSQL dump of the old Synapse database, preferably <code>pg_dump -Fc</code></td>
</tr>
<tr>
<td><code>signing.key</code></td>
<td>The old Synapse signing key</td>
</tr>
<tr>
<td><code>media/</code></td>
<td>The old Synapse media store</td>
</tr>
</tbody>
</table>
<p dir="auto">The script then:</p>
<ol>
<li>Checks that the old and new <code>server_name</code> match.</li>
<li>Detects the old Synapse OIDC provider ID.</li>
<li>Detects Synapse password pepper if configured.</li>
<li>Takes a rollback snapshot of the new ESS app's current database/secrets.</li>
<li>Restores the old Synapse database into the new ESS app.</li>
<li>Copies the old signing key and media store.</li>
<li>Configures MAS to accept imported Synapse password hashes.</li>
<li>Configures MAS to map the old Synapse OIDC provider to the Cloudron OIDC provider.</li>
<li>Runs Element's official <code>mas-cli syn2mas</code>.</li>
<li>Leaves existing sessions/devices/access tokens imported into MAS.</li>
</ol>
<h2>Usage</h2>
<p dir="auto">Open a Web Terminal in the new ESS app and run:</p>
<pre><code class="language-bash">/app/pkg/src/migrate-from-synapse.sh check  
</code></pre>
<p dir="auto">This performs preflight checks only.</p>
<p dir="auto">Then run:</p>
<pre><code class="language-bash">/app/pkg/src/migrate-from-synapse.sh dry-run  
</code></pre>
<p dir="auto">This performs a full rehearsal using <code>syn2mas --dry-run</code>.</p>
<p dir="auto">The dry run is the important safety step. It should detect most problems before the real migration, including:</p>
<ul>
<li>server name mismatch</li>
<li>unsupported password configuration</li>
<li>unmapped SSO provider</li>
<li>invalid database/config assumptions</li>
</ul>
<p dir="auto">If the dry run is clean, run the real migration:</p>
<pre><code class="language-bash">/app/pkg/src/migrate-from-synapse.sh migrate  
</code></pre>
<p dir="auto">The real migration requires typing:</p>
<pre><code class="language-text">MIGRATE  
</code></pre>
<p dir="auto">as confirmation.</p>
<p dir="auto">Afterwards, restart the app and switch the domains from the old Synapse/Element apps to the new ESS app.</p>
<h2>Rollback / reverse migration</h2>
<p dir="auto">There are two safety mechanisms.</p>
<h3>1. The old Synapse app is not touched</h3>
<p dir="auto">The migration reads from a <strong>database dump</strong> and copied files. It does not modify the old live Synapse app.</p>
<p dir="auto">So before the final domain switch, the safest rollback is simply:</p>
<pre><code class="language-text">stop the ESS app → keep using the old Synapse app  
</code></pre>
<h3>2. Script rollback for the ESS app</h3>
<p dir="auto">The script also creates a snapshot of the ESS app before replacing its database.</p>
<p dir="auto">To restore that snapshot:</p>
<pre><code class="language-bash">/app/pkg/src/migrate-from-synapse.sh rollback  
</code></pre>
<p dir="auto">This requires typing:</p>
<pre><code class="language-text">ROLLBACK  
</code></pre>
<p dir="auto">as confirmation.</p>
<p dir="auto">This is useful if you want to retry a failed migration attempt from a clean ESS state.</p>
<p dir="auto">However, Element's <code>syn2mas</code> migration itself is one-way. A true "MAS back to legacy Synapse auth after live use" migration does not exist upstream. Once users have actively used the migrated server, rolling back means losing anything that happened after the migration.</p>
<h2>Example export from old Cloudron Synapse</h2>
<p dir="auto">In the old Synapse app's Web Terminal:</p>
<pre><code class="language-bash">pg_dump -h "${CLOUDRON_POSTGRESQL_HOST}" -p "${CLOUDRON_POSTGRESQL_PORT}" \  
  -U "${CLOUDRON_POSTGRESQL_USERNAME}" -d "${CLOUDRON_POSTGRESQL_DATABASE}" \  
  -Fc -f /tmp/synapse.dump  
</code></pre>
<p dir="auto">Then copy these into the new ESS app:</p>
<pre><code class="language-text">/tmp/synapse.dump  
/app/data/configs/homeserver.yaml  
the file referenced by signing_key_path  
the directory referenced by media_store_path  
</code></pre>
<p dir="auto">into:</p>
<pre><code class="language-text">/app/data/migration/  
</code></pre>
<h2>Status</h2>
<p dir="auto">I have tested the script flow end-to-end with stubbed database/MAS commands:</p>
<ul>
<li><code>check</code></li>
<li><code>dry-run</code></li>
<li>confirmation handling</li>
<li><code>migrate</code></li>
<li>double-migration guard</li>
<li><code>rollback</code></li>
</ul>
<p dir="auto">What still needs real-world testing is the actual <code>syn2mas</code> import against different existing Synapse deployments. If you're running the old Synapse package and are willing to test on a copy, feedback would be extremely helpful.</p>
]]></description><link>https://forum.cloudron.io/post/127160</link><guid isPermaLink="true">https://forum.cloudron.io/post/127160</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Fri, 24 Jul 2026 16:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 15:09:45 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/humpty" aria-label="Profile: humpty">@<bdi>humpty</bdi></a> yes I understand, I’ve made these experiences too. My goal for this Ems package is to just fix it all and make it just all work. Lol</p>
]]></description><link>https://forum.cloudron.io/post/127156</link><guid isPermaLink="true">https://forum.cloudron.io/post/127156</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Fri, 24 Jul 2026 15:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 15:04:34 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/andreasdueren" aria-label="Profile: andreasdueren">@<bdi>andreasdueren</bdi></a> <a href="/post/127152">said</a>:</p>
<p dir="auto">Maybe I phrased this badly in the OP.</p>
</blockquote>
<p dir="auto">It's definitely me. I just switched from iOS to GrapheneOS and my tech-brain is fried. So many things that "just worked" in iOS requires a bridge, an extra app, or some hack to get to work. More details <a href="https://forum.cloudron.io/topic/15705/android-down-the-shitter-pixel-10-or-iphone-17-thoughts/23?_=1784905394062">here</a></p>
]]></description><link>https://forum.cloudron.io/post/127154</link><guid isPermaLink="true">https://forum.cloudron.io/post/127154</guid><dc:creator><![CDATA[humpty]]></dc:creator><pubDate>Fri, 24 Jul 2026 15:04:34 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 14:48:01 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/humpty" aria-label="Profile: humpty">@<bdi>humpty</bdi></a> <a href="/post/127150">said</a>:</p>
<p dir="auto">Correct me if I'm wrong as I'm trying to wrap my head around this:</p>
<ul>
<li>I cannot install this app alongside an existing matrix/element on the same domain</li>
</ul>
</blockquote>
<p dir="auto">Correct, same with any other matrix/synapse… software thought. You can however install it on a subdomain. But it’s probably easier to just use a different domain.</p>
<blockquote>
<ul>
<li>The bare domain must be empty (no app installed)</li>
</ul>
</blockquote>
<p dir="auto">For federation to work and because of current well-known limitations with Cloudron, i recommend setting the tld as an alias on the EMS app after installation. If/when Cloudron enables customization of the well-known endpoints, this shouldn’t be an issue anymore. Currently it’s a workaround.</p>
<blockquote>
<ul>
<li>The primary location must be "account" (exact wording) and not something else e.g. <a href="http://comms.domain.com" target="_blank" rel="noopener noreferrer nofollow ugc">comms.domain.com</a></li>
</ul>
</blockquote>
<p dir="auto">It can be anything. Could be <a href="http://ems.matrix.domain.com" target="_blank" rel="noopener noreferrer nofollow ugc">ems.matrix.domain.com</a>, there are no naming restrictions. I simply would have preferred to host the chat (element) app on this domain but for oidc reasons this needs to be Ems. Maybe I phrased this badly in the OP.</p>
<blockquote>
<ul>
<li>Running this app alongside existing matrix app on different domains BUT on the same CR is OKAY</li>
</ul>
</blockquote>
<p dir="auto">Correct you can install this on the same Cloudron as your existing installation and won’t interfere if you don’t override domains used for that instance.</p>
]]></description><link>https://forum.cloudron.io/post/127152</link><guid isPermaLink="true">https://forum.cloudron.io/post/127152</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Fri, 24 Jul 2026 14:48:01 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 14:30:43 GMT]]></title><description><![CDATA[<p dir="auto">Correct me if I'm wrong as I'm trying to wrap my head around this:</p>
<ul>
<li>I cannot install this app alongside an existing matrix/element on the same domain</li>
<li>The bare domain must be empty (no app installed)</li>
<li>The primary location must be "account" (exact wording) and not something else e.g. <a href="http://comms.domain.com" target="_blank" rel="noopener noreferrer nofollow ugc">comms.domain.com</a></li>
<li>Running this app alongside existing matrix app on different domains BUT on the same CR is OKAY</li>
</ul>
]]></description><link>https://forum.cloudron.io/post/127150</link><guid isPermaLink="true">https://forum.cloudron.io/post/127150</guid><dc:creator><![CDATA[humpty]]></dc:creator><pubDate>Fri, 24 Jul 2026 14:30:43 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Fri, 24 Jul 2026 10:12:10 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/andreasdueren" aria-label="Profile: andreasdueren">@<bdi>andreasdueren</bdi></a><br />
Small feedback.<br />
Indeed, having the bare domain on the ESS app is a little confusing.<br />
I now understand the request you have written for the well-known feature.</p>
]]></description><link>https://forum.cloudron.io/post/127144</link><guid isPermaLink="true">https://forum.cloudron.io/post/127144</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Fri, 24 Jul 2026 10:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Thu, 23 Jul 2026 21:35:15 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/james" aria-label="Profile: james">@<bdi>james</bdi></a> good catch, thanks for the feedback. Just pushed an update which fixes both.</p>
]]></description><link>https://forum.cloudron.io/post/127113</link><guid isPermaLink="true">https://forum.cloudron.io/post/127113</guid><dc:creator><![CDATA[andreasdueren]]></dc:creator><pubDate>Thu, 23 Jul 2026 21:35:15 GMT</pubDate></item><item><title><![CDATA[Reply to 🧪 Testers wanted: Element Server Suite (ESS Community) for Cloudron on Thu, 23 Jul 2026 19:46:42 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/andreasdueren" aria-label="Profile: andreasdueren">@<bdi>andreasdueren</bdi></a><br />
I just did a quick test.<br />
Under the <code>admin.matrix.$DOMAIN.$TLD</code> is only the NGINX default page visible.<br />
Is that how it should be? Should it not look like <a href="https://admin-beta.element.dev/login" target="_blank" rel="noopener noreferrer nofollow ugc">https://admin-beta.element.dev/login</a>?</p>
<p dir="auto">The documented way to get admin is false.</p>
<pre><code class="language-bash">/app/code/mas/mas-cli --config /run/mas/config.yaml manage set-admin &lt;username&gt;
error: unrecognized subcommand 'set-admin'

  tip: some similar subcommands exist: 'demote-admin', 'promote-admin'

Usage: mas-cli manage [OPTIONS] &lt;COMMAND&gt;

For more information, try '--help'.
</code></pre>
<p dir="auto">I took the <code>tip</code> command:</p>
<pre><code>/app/code/mas/mas-cli --config /run/mas/config.yaml manage promote-admin james
2026-07-23T19:44:12.643967Z  INFO mas_cli::commands::manage:349 User promoted to admin user.id=01KY87V8HR9D8JC8FEAT5GD8Z1 user.username=james
</code></pre>
<p dir="auto">Which looks like it worked.</p>
]]></description><link>https://forum.cloudron.io/post/127110</link><guid isPermaLink="true">https://forum.cloudron.io/post/127110</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Thu, 23 Jul 2026 19:46:42 GMT</pubDate></item></channel></rss>