swindon/filament-hashids
Integrates Hashids with Filament so resource URLs use short, unique hash strings instead of sequential numeric IDs. Hide database keys, keep admin links cleaner and harder to guess, and configure encoding without changing your underlying schema or models.
Architecture fit
swindon/filament-hashids is a thin Filament plugin that wraps the Hashids library to obfuscate sequential primary keys in Filament resource URLs (e.g. /admin/orders/1 → /admin/orders/jR4bQ2). It sits in the presentation/routing layer only — it does not alter schema, storage, or domain logic. That makes it a low-blast-radius addition: it can be adopted on one panel or one resource at a time, and removed without data migration. For a TPM the relevant framing is that this is a cosmetic/hygiene control, not an access-control control. It reduces casual ID enumeration and improves perceived URL quality; it does not replace authorization policies, and should not be sold internally as a security feature.
Integration feasibility High. The package targets the standard Filament + Laravel stack we already run; adoption is expected to be composer install, plugin registration in the panel provider, a published config file holding the salt and minimum hash length, and per-resource opt-in. Expect roughly 1–3 developer-days including regression testing of resource routes, relation-manager links, and any action that generates URLs. The main unknown is whether it hooks route-key generation globally per panel or per resource — that determines whether the change is contained or panel-wide.
Technical risk
Key questions
config() (cache-safe) or env() at request time (breaks under config:cache)?resolveRouteBinding?Stack fit Native fit. No new infrastructure, no queue, no external service, no PHP extension requirements beyond what Hashids itself needs. Configuration is a single published file plus environment variables. No conflicts anticipated with our existing Filament plugins unless another plugin already overrides route-key resolution on the same resources — that overlap should be checked before install.
Migration path Non-destructive and reversible. There is no data migration: primary keys stay as they are, only their URL representation changes. Recommended path:
Compatibility
Confirm Filament major version support before committing, and pin the plugin version alongside our Filament version so upgrades are deliberate. Laravel-side compatibility is likely broad, but config:cache behaviour and PHP version floor should be verified in CI rather than assumed.
Sequencing Do this after any in-flight Filament upgrade, not before — otherwise we inherit a plugin compatibility blocker on top of a framework migration. Sequence: Filament version lock → plugin install (disabled) → single-resource pilot → panel-wide rollout → salt-management runbook → documentation for support staff. The runbook matters more than the code; it should be written before panel-wide enablement, not after.
Maintenance Low ongoing code maintenance; the real cost is version-tracking Filament releases and validating the plugin against each. Budget a small recurring allowance per Filament upgrade cycle rather than a large one-off. Single-maintainer dependency means we should be willing to vendor a fork if the package stalls — the code surface is small enough that this is realistic, which materially lowers the risk.
Support Support burden is concentrated in one scenario: "my saved link stopped working." Tier-1 staff need to know that encoded URLs are non-portable across environments (staging salt ≠ production salt, by design) and non-portable across salt rotations. Without that, expect misrouted tickets to engineering. Add a short knowledge-base entry at rollout.
Scaling Effectively free. Encoding and decoding are constant-time string operations against a short integer; the database still receives a primary-key lookup, so query plans and index usage are unchanged. No measurable impact on request latency or database load at our volumes. The only scaling consideration is human: more resources under the plugin means more surface to re-verify on each Filament upgrade.
Failure modes
config:cache with env-based salt → decode failures in production only, invisible in local dev. Test explicitly in a cached-config environment.Ramp-up Low. A Laravel-fluent developer unfamiliar with the package should be productive within half a day; the concepts (route keys, Hashids, Filament plugin registration) are all standard. Plan a short walkthrough for the team plus the support KB entry, and treat the salt-management procedure as the only piece requiring deliberate training rather than discovery learning.
How can I help you explore Laravel packages today?