geekcodev/filament-max-users
Filament Max Users lets you enforce a maximum number of user accounts in your Filament panel. Set a limit, prevent new users from being created once it's reached, and keep registrations under control with simple configuration. Handy for licensing, plan tiers, demos, and single-tenant apps.
user_id → is_bot badge → avatar → name → surname → phone w/ verified icon → chat count; chat_id → type badge → status badge → display name → participant count → last activity). That is a deliberate answer to "who looks at this screen and what do they need first" — support agents get identity and contactability up front, chat rows lead with classification and recency. Column-level toggling lets one deployment serve multiple personas (support vs. analyst vs. moderation) without forking the resource, which is a real product lever: it defers the "do we need role-specific views?" decision.GET /chats/{id} returns participants as a {user_id: activity} map — previously a functional hole on exactly the object types most likely to have many members; (2) chat link now goes through ChatPresenter::safeUrl() and only renders href for http/https, closing a javascript:/data: injection path (A03). Both mean the product can be trusted on real, messy MAX data instead of only on well-formed dialogs.username in Russian becomes «Никнейм» while English stays "Username"; chats.view.title (the duplicate "Name from MAX") is removed from the chat detail page because it duplicated displayName in groups/channels and was empty in dialogs. If your users are Russian-speaking operators, this is the release that makes the UI read like a Russian product rather than a translated one — worth calling out in a UX review rather than treating as noise.filament/filament is bumped 5.7.8 → 5.9.0 for advisory CVE-2026-104181 without changing the ^5.0 constraint, and composer security-audit reports zero vulnerabilities. For a package that sits in an admin panel with PII (phone numbers, emails, MAX profile data), that is a "we can keep this in the dependency tree" datapoint.Adopt when:
^5.0) and want MAX users/chats inside the same panel as the rest of your admin, with Filament-native tables, infolists, badges, column-toggle toolbar, and per-user persisted column state.geekcodev/max-php-client — v1.1.1 pins/updates to client 1.1.9 for the group-participants-map parsing fix.Look elsewhere / postpone when:
^5.0 constraint excludes. The release explicitly did not widen the constraint.chats.view.title key in your own translations or overrides — it was a dead duplicate (the second array entry always won), so behavior is unchanged, but any code poking that key directly should be checked.users.*, chats.*, unchanged here) give you.For executives: This is a patch release on an internal-facing admin plugin — no breaking changes to the public API, config keys, or method signatures. It ships three things that matter commercially: a security hardening (chat links from the MAX API are now sanitized so javascript:/data: payloads can't become clickable hrefs), a dependency security bump that clears a published Filament advisory (CVE-2026-104181) without changing our version constraint, and a fix for a real functional bug — "Refresh from MAX" no longer fails on group chats and channels, which are the highest-value conversation types. The rest is UI polish: predictable column order, all columns toggleable per user, and better Russian labels. Quality gates are strong and unchanged in rigor: 54 tests green, ~97.5% line coverage, static analysis at max level, zero audit findings. Recommendation: take the upgrade on the normal maintenance train; no migration, no user retraining, no config edits.
For engineering: Low-risk upgrade, but three things to know. (1) Security: ChatPresenter::safeUrl() now gates href rendering to http/https — unit-tested, addresses A03; if you had your own link rendering, mirror the guard. (2) Correctness: the group-participants issue was actually in geekcodev/max-php-client (fixed in 1.1.9, vendored here) — GET /chats/{id} returns participants as a map, not a list; there's a regression test (test_refresh_metadata_action_parses_group_participants_map) so it won't silently regress. (3) Behavioral surface: default column visibility changed (surname now visible on users; several fields now hidden-by-default but toggleable) and lang/ru username is now «Никнейм» — if you snapshot UI or assert on labels, update fixtures. Also note .gitattributes now excludes dev configs (phpunit.xml, Dockerfile, docker/**, .php-cs-fixer.cache) from dist, so don't rely on those shipping in vendored installs. Filament moves 5.7.8 → 5.9.0 within ^5.0; smoke-test the panel after the bump. Everything else — permissions, config defaults, deletion flows, profile refresh — is untouched, and the new feature tests lock column order, full toggleable composition, and infolist field order so future churn is caught in CI rather than by users.
How can I help you explore Laravel packages today?