Releases: etkecc/ketesa
Ketesa v1.1.0
We've been busy since v1.0.0, and we're excited to share what landed in this release. There's a mix of new features, a solid round of bug fixes, and some behind-the-scenes improvements!
✨ New Features
Event Lookup Dialog in Room Messages
The Room Messages viewer got a big upgrade. Every event now shows its event ID, and clicking it opens a new Event Lookup Dialog — a recursive explorer that lets you follow event references down the chain. You can also navigate to any event by ID directly from the dialog. Super handy for debugging federation issues or just digging into what actually happened in a room.
Way more event types in the Room Messages filter
While we were in there, we expanded the list of supported Matrix event types from about 13 to 60+. State events, space events, polls, call signaling, key verification, account data — it's all there now.
MAS user list: sorting is here!
If your homeserver uses Matrix Authentication Service, you can now sort the user list by fields like creation date. Under the hood we query the Synapse API and merge the results — MAS users now also carry Synapse-side flags (guest, shadow-banned, erased, suspended, deactivated) so everything shows up consistently.
Empty results are more useful than ever!
Previously empty results pages were inconsistent across the project (some resources used our nice-and-shiny custom empty state, others just a text "No %something% found"). We unified the approach across the app, so now you will always see the custom empty state — easy on the eyes and actually helpful!
Bonus: Now the action buttons are always visible on empty state pages (e.g., event lookup on reported events)!
Smarter protocol detection on the login page
Ketesa now auto-detects whether to use http:// or https:// when you type a homeserver URL. Local addresses (localhost, 127.0.0.1, ::1) get http://; everything else gets https://. That should help with intranet deployments!
Donate page
We added a "Support Ketesa Development" page — accessible from the user menu, just below the language selector. If Ketesa has been useful to you or your community, this is the place to show some love! It links to our GitHub Sponsors page. Every contribution genuinely helps us keep the project going. ❤️
🐛 Bug Fixes
Logout no longer wipes your homeserver config (#1110)
After a logout, Ketesa was clearing all persisted config — including your homeserver URL — which meant you had to re-enter it every time. Now it only clears session-specific runtime state, and your custom options survive the logout as expected.
MAS bulk deactivate was broken
Bulk-deactivating users via MAS wasn't working. It is now.
User created_at timestamps were wrong for MAS users
The created_at field was being mapped and normalized inconsistently between MAS and Synapse, leading to wrong or blank dates. Fixed across the board.
User delete button had an incorrect React context
Under certain conditions, the delete user button was failing due to a context mismatch. Fixed.
Avatar loading was inconsistent on mobile
Avatars weren't loading reliably in mobile layouts. Fixed.
"Restricted" join rule was missing from translations
The "Restricted" room join rule wasn't translated in several locales. Fixed.
🔧 Under the Hood
Migrated the test suite from Jest to Vitest
No user-visible impact, but we moved the entire test infrastructure to Vitest. It's faster, aligns better with our Vite build setup, and we added more utility tests while we were at it.
Thanks for using Ketesa! As always, if you run into issues or have ideas, share them in #ketesa:etke.cc room or open an issue at github.com/etkecc/ketesa.
Happy administrating! 🚀
What's Changed
- Bump docker/login-action from 4.0.0 to 4.1.0 by @dependabot[bot] in #1112
Full Changelog: v1.0.0...v1.1.0
Ketesa v1.0.0
We are thrilled to announce Ketesa v1.0.0 — a landmark release that marks a new chapter for what was once known as Synapse Admin.
Ketesa is a fully-featured, mobile-friendly admin interface for Matrix homeservers powered by Synapse. It is a direct drop-in replacement for Synapse Admin: no configuration changes required — just swap the image or URL and you're running Ketesa.
A new name
The project has a new identity: Ketesa. The repository, Docker images, and configuration keys have all been updated. The legacy cc.etke.synapse-admin config key in /.well-known/matrix/client continues to work alongside the new cc.etke.ketesa key, so existing deployments keep working without changes.
- Hosted: https://admin.etke.cc
- Docker:
ghcr.io/etkecc/ketesa:latest - Static release:
ketesa.tar.gz(root) /ketesa-subpath-admin.tar.gz(/adminsubpath)
What's new
Full redesign
The entire interface has been redesigned from the ground up: a cleaner layout, a recolored dark theme, and a more consistent visual identity across all pages. The user page, reports section, and room management views have all received focused styling passes.
Mobile-first UI
Ketesa is now fully responsive. The mobile layout has been comprehensively optimized: better footer positioning, a full-screen entrypoint loader on narrow viewports, corrected font asset handling, and consistent use of responsive grid breakpoints throughout.
Matrix Authentication Service (MAS) — full integration
Ketesa now has deep, first-class support for homeservers running MAS:
- Manage all session types: personal access tokens, browser sessions, OAuth2 sessions, compatibility sessions
- View and manage linked email addresses
- View upstream OAuth provider links
- Manage MAS policy data (consent records)
- Create new users through MAS
- Registration tokens now expose
created_at,last_used_at,revoked_atand support one-click revoke/unrevoke - Synapse and MAS versions are shown in the user menu
- Federated users are handled correctly — no unnecessary data is sent to MAS
User management
- Shadow banning — silence a user without alerting them
- Login as user — impersonate any local user (Synapse-only)
- Reset password — one-click password reset from the user view
- Find User — locate a user account quickly
- Device management — create new devices, rename existing ones, bulk-remove selected devices; configurable table columns including user agent and dehydrated device flags
- Allow cross-signing reset — unblock a user's cross-signing key reset
- Renew account validity — extend an account's validity period
- Control Matrix Client-Server API admin flags — promote or demote users via the C-S API
- System-managed users filter — hide or show bridge bots and appservice-managed accounts
- User list migrated to v3 API
- User redaction with live status — see deletion progress in real time
- Cumulative stats — total joined rooms and sent invites shown on the user page
- Improved filters — all boolean user filters now use nullable tri-state inputs
Room management
- Block/Unblock room — prevent or restore access to a room
- Purge History — delete room history up to a point in time
- Room Messages tab — browse messages with filters and jump-to-date navigation
- Room Hierarchy tab — visible only on Spaces; browse and navigate the space tree
- Join user to a room — add any local user to a room directly
- Room delete with live status — watch deletion progress as it happens
- Database room stats — per-room database size and event counts
- Scheduled tasks list — view pending Synapse background tasks
Media management
- Quarantine All buttons on both the user media list and the room media list
- Purge media notifications now include the count of actually removed items
Performance & internationalization
- Translations are now lazy-loaded with per-locale code splitting — only the active language is downloaded
<html lang>anddirattributes are set dynamically, enabling correct RTL rendering- Outdated upstream language packages replaced with local
base.tsfiles for better maintainability - Japanese translation corrected and improved
Authentication & login
- The
/auth-callbackOIDC redirect handler is now a separate build entrypoint (faster load, smaller bundle) - A dedicated subpath-admin entrypoint is published for
/admin-path deployments - The login form now supports
.well-knowndelegation for the homeserver URL - Entering a homeserver URL without a scheme automatically prepends
https:// - A descriptive text block has been added to the login form
Infrastructure & deployment
- IPv6 homeserver support — admin API URLs with IPv6 addresses are handled correctly
- Separate Dockerfile for subpath-admin deployments
- Docker labels added to all published images
- REUSE compliance — GitHub Action added to enforce license metadata on every PR
Documentation
- New
docs/apis.md— comprehensive tracking of all implemented Synapse and MAS Admin API endpoints - Full reverse proxy documentation, including Nginx configuration snippets for Docker deployments at both root path and
/adminsubpath - Expanded documentation portal covering all major features
Community contributors
A big thank you to @cy1der for two contributions that made it into this release: the initial implementation of MAS registration token management (#1067) and the Nginx configuration snippets for Docker deployments (#1083).
Upgrading
Ketesa is a zero-configuration drop-in replacement for Synapse Admin.
Docker:
ghcr.io/etkecc/ketesa:latest
or on Docker Hub: etkecc/ketesa:latest
CDN / hosted: https://admin.etke.cc
Static files: download ketesa.tar.gz from the release assets and replace your existing dist/ directory.
Packages: matrix-docker-ansible-deploy, Nix / NixOS, Arch Linux AUR, IPFS, and other packages updates will be reflected in the README.md later
What's Changed
- Bump docker/build-push-action from 6.19.2 to 7.0.0 by @dependabot[bot] in #1073
- Bump docker/metadata-action from 5.10.0 to 6.0.0 by @dependabot[bot] in #1072
- Bump docker/setup-buildx-action from 3.12.0 to 4.0.0 by @dependabot[bot] in #1071
- Bump docker/login-action from 3.7.0 to 4.0.0 by @dependabot[bot] in #1070
- Refactor dataprovider and fix TS errors by @beastafk in #1069
- Add support for shadow banning by @aine-etke in #1081
- Add Nginx configuration snippets for Docker usage for root path and admin subpath by @cy1der in #1083
- Bump softprops/action-gh-release from 2.5.0 to 2.6.1 by @dependabot[bot] in #1085
- Fix Japanese translation by @luixxiul in #1098
- Optimize UI for mobile by @aine-etke in #1104
- Database Room Stats by @aine-etke in #1082
- Full MAS integration by @aine-etke in #1103
- i18n: replace outdated language packages with local base.ts files by @beastafk in #1109
New Contributors
Full Changelog: v0.11.4-etke54...v1.0.0
v0.11.4-etke54
- Make loader screen honor preferred color scheme
- Add support for issuing registration tokens with MAS by @cy1der
- Improve runtime external auth provider mode (persist the mode selection in local storage)
- Fix edge cases with OIDC auth (refactored OIDC auth handling)
- Fix broken pagination in have-many refs (user's media, joined rooms, etc)
- add healthcheck to docker images
- Fix
restictBaseUrlwith trailing slash - Improve config loading from
/.well-known/matrix/clientafter auth - Implement REUSE compliance
- (etke.cc-exclusive) Support System
- (etke.cc-exclusive) Localized API responses (e.g., translated command descriptions and error messages)
- (etke.cc-exclusive) Show download invoice button only when invoice is available (related to recent announcement)
This release also includes the usual dependencies updated and also commits from upstream; that's why a few upstream versions were skipped and only v0.11.4 is used for release
What's Changed
- restyle menu by @aine-etke in #1036
- Make loader screen honor preferred color scheme by @aine-etke in #1037
- Only cache responses when the endpoint returns all data at once by @beastafk in #1039
- Bump docker/build-push-action from 6.18.0 to 6.19.2 by @dependabot[bot] in #1042
- (etke.cc-exclusive) Support System by @beastafk in #1050
- Update from upstream by @aine-etke in #1054
- Bump actions/download-artifact from 7 to 8 by @dependabot[bot] in #1058
- Bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #1057
- Add support for issuing registration tokens when homeserver uses MAS by @beastafk in #1067
- Bump dompurify from 3.3.1 to 3.3.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1068
Full Changelog: v0.11.1-etke53...v0.11.4-etke54
v0.11.1-etke53 BREAKING
This release contains breaking changes in the Docker image specifically; see the explanation below
- User badges: new Federated User badge
- Improved user tables across the app (i.e., Room Members tab)
- Improved media quarantine handling, including automatic quarantined media bypass
- Add new User -> Memberships tab (ref)
- Improve performance of all have-many relations (e.g., User -> Joined Rooms, Room -> Members, etc.) (ref)
- Improve error messages (return actual errors on actions like publishing a room in the directory)
- Fix incorrect handling of empty responses from API
- Custom Menu: add
i18nsupport - Fix loading of Persian translation
- Add all missing translations for all supported locales, including etke.cc components
- Set page titles for all entities, add avatars to rooms' and users' page titles
- Set document page title based on app page (sync page and document titles)
- Add bulk actions to User -> (Joined) Rooms table (has a bug with caching)
- Improved Bulk CSV import: more relaxed rules for boolean fields
BREAKING CHANGES in Docker images
Synapse Admin now runs in a rootless container, and because of that, paths and port have been changed.
Port
- Was:
80 - Now:
8080
Path (inside container)
- Was:
/app - Now:
/home/sws/publicand symlink/var/public
The changes are reflected in the MDAD PR, so once a new version is released, MDAD will handle the changes automatically
Full Changelog: v0.11.1-etke52...v0.11.1-etke53
v0.11.1-etke52
This is a dependency update release with a security vulnerability fix of one of the dependencies: React Router SSR XSS in ScrollRestoration
Full Changelog: v0.11.1-etke51...v0.11.1-etke52
v0.11.1-etke51
- Fix rooms table
encryptionfield sorting - Add
creatorandjoin rulescolumns to the room list - Localized date fields
What's Changed
- Bump docker/setup-buildx-action from 3.11.1 to 3.12.0 by @dependabot[bot] in #978
- Bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in #971
- Bump actions/download-artifact from 6 to 7 by @dependabot[bot] in #970
- Localized date fields by @aine-etke in #989
Full Changelog: v0.11.1-etke50...v0.11.1-etke51
v0.11.1-etke50
- Improved OIDC Auth support #907
- Add
Public RoomsandEmpty Roomsfilters to the rooms list #945 - Allow restoring system-managed users #956
What's Changed
- Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #914
- Bump actions/download-artifact from 5 to 6 by @dependabot[bot] in #913
- Bump docker/metadata-action from 5.8.0 to 5.9.0 by @dependabot[bot] in #929
- Bump softprops/action-gh-release from 2.4.1 to 2.4.2 by @dependabot[bot] in #928
- Add public rooms and empty rooms filters by @aine-etke in #945
- update deps by @aine-etke in #946
- fix running on ipv4-only systems by @OE1KHZ in #947
- Bump actions/checkout from 5 to 6 by @dependabot[bot] in #948
- Bump softprops/action-gh-release from 2.4.2 to 2.5.0 by @dependabot[bot] in #966
- Bump docker/metadata-action from 5.9.0 to 5.10.0 by @dependabot[bot] in #965
- Allow restoring system-managed users by @beastafk in #967
New Contributors
Full Changelog: v0.11.1-etke49...v0.11.1-etke50
v0.11.1-etke49
- OIDC Auth support
- Add
v0rolling release docker tag (details) - (etke.cc-exclusive) Instance Config
v0.11.1-etke48
- Improved Login page:
-
- better handling of different ways to restrict homeserver URL field
-
- show SSO button only when homeserver supports SSO login
-
- mobile-friendly UI
- Do not logout on
403errors automatically (e.g., when setting a password for an external auth provider-managed user) - External Auth Provider-compatible mode
- New Ukrainian localization
v0.11.1-etke47
Fix homeserver url selection on login page
this release fixed regression from the previous v0.11.1-etke46 release