mrshanebarron/drawer
Drawer is a Laravel/PHP package that simplifies adding slide-out drawer panels to your application. Use it to create off-canvas navigation, filters, or settings with minimal setup, keeping your UI clean and your implementation lightweight. It is intended for Laravel projects that want a simple, reus...
Architecture fit
This is a presentation-layer dependency, not a service integration. mrshanebarron/drawer provides Blade components for slide-out panels (off-canvas navigation, filters, carts, settings) — markup, slots, and configurable position/size/overlay behavior — with no backend contracts, no drivers, no external I/O. That is a meaningful architectural simplification: adopting it does not touch the domain layer, does not require container bindings, and cannot block a queue, route, or data migration. It competes with hand-rolled Blade partials and with heavier frontend frameworks (Alpine/Tailwind/Filament). The TPM decision therefore is not "can we integrate this" but "do we standardise drawer behaviour across our Blade views on this package versus our own partials." The v1.0.1 change (config renamed to the sb- prefix) is a packaging concern that affects the publish step and config key namespace — nothing about the component's runtime surface. Note the package is unstarred with a single maintainer; treat the entire component API as an external contract you do not control.
Integration feasibility
High for a Laravel 9/10/11 Blade application on PHP 8.1+. The integration surface is: composer require, service provider auto-discovery, vendor:publish for the sb--prefixed config, and then using the Blade component tags in layouts. There is no migration, no queue, no credential. The realistic friction is not technical — it is design consistency and accessibility. Your existing layouts have an established z-index/overlay/scroll-lock convention; a third-party drawer will impose its own, and reconciling those across modals, toasts, and dropdowns is the actual workstream. Confirm the component renders without a JS framework dependency and check whether it ships compiled assets requiring a build step.
Technical risk Low-to-moderate, concentrated in three areas rather than in code correctness.
1.0.1 is arguable as a breaking change for anyone who published under the old name. Automated dependency tooling will not flag it. Pin the version explicitly.aria-hidden on the background, Escape-to-close, mobile viewport behaviour. The notes say nothing about this. Assume you must audit and possibly extend.Key questions
sb- prefix imply a family of sibling packages (a draw-er/UI kit), and is that family maintained?Stack fit
Straightforward for Blade-first Laravel apps: compose the drawer into your existing layout, publish the sb- config, and drive position/size/overlay through config plus component attributes. It fits cleanly if your frontend is server-rendered Blade. If your team has standardised on Livewire, Inertia/React/Vue, or Filament, a standalone Blade drawer is a parallel pattern and will create divergence — evaluate it only against the framework's native modal/drawer primitives first. Treat the drawer as a design-system asset, not an application utility.
Migration path
Greenfield is trivial: publish config, render one drawer in a non-critical page, verify visually and by keyboard. For teams that already have hand-rolled drawer partials, migrate one pattern at a time — start with the least-trafficked instance (e.g. an admin filter panel) to establish the visual and behavioural contract, then replace the rest. If you previously published config under the pre-1.0.1 filename, git mv the customised file to the new sb- name rather than re-publishing (publishing never overwrites, and re-publishing leaves you with an orphaned stale file the package ignores), then run php artisan config:clear.
Compatibility Verify composer.json constraints before committing. The config rename is framework-version-agnostic, but the component markup may assume a specific Blade component API (class-based vs anonymous). Test in the oldest and newest Laravel versions you support, and test in the browsers your users actually run — off-canvas panels are disproportionately affected by iOS Safari viewport quirks.
Sequencing
Low-coupling, so schedule it as a normal UI work item rather than a dependency upgrade. Recommended order: (1) design/spike the drawer behaviour against your design system in a scratch page; (2) publish sb- config and confirm keys resolve in tinker; (3) replace one existing drawer in production behind normal review; (4) after a stable week, roll out to remaining instances; (5) only then consider updating the shared base template if you run multiple apps. Keep this out of any release that also contains framework or major dependency churn — you want any regression attributable.
Maintenance
Low if the package stays stable; higher than it looks if it does not. You own the visual behaviour, the a11y remediation, and the config hygiene. Establish a post-upgrade checklist: diff published sb- config against the package stub, confirm no orphaned pre-rename config file exists, and re-run config:cache in deploy. Pin ^1.0 (or an exact version) so a patch cannot land unreviewed — v1.0.1 is precisely the kind of change that argues for pinning. Because the package is a UI component, maintenance also means design-system upkeep: if your brand tokens, spacing scale, or z-index layers change, you are editing the drawer too.
Support
Upstream support is effectively zero for an unstarred single-maintainer package; plan to be self-sufficient. Internally, the predicted support tail is not "package broken" but "drawer looks wrong / doesn't close / sits behind the modal." Pre-empt with a runbook entry covering the debug order — provider discovered, config('sb-<name>') returns the file contents, expected keys present, component rendered in the right layer — and a note that most of these are config filename or config-cache issues rather than component bugs. If the drawer is customer-facing, an a11y regression is a support and compliance risk, so route accessibility fixes through a named owner.
Scaling No runtime or performance scaling concern: no request-time I/O, no queue, no external service, config resolved once per request and cached. The scaling consideration is organisational — every Blade view that adopts the drawer must use the same config and the same accessibility contract, so centralise the component usage in a shared layout/partial rather than copy-pasting across views. If multiple applications adopt it, the config-migration and version-pinning discipline must be repeated per app; roll it through a shared template or starter kit.
Failure modes
config:clear + config:cache to the pipeline after the config file is present on the server.Ramp-up Negligible for a Laravel developer — Blade components are idiomatic, and the first drawer can be live in under an hour. Budget half a day for a first integration including visual and keyboard verification, and one to two hours per additional adoption. The real cost is not learning the package but validating it: an accessibility pass, a cross-browser check on mobile Safari, and a design-system reconciliation against your existing modals and overlays. Obtain the README, a working example, and the supported-version matrix before the team commits; if the package cannot supply these, treat it as a copy-paste reference implementation rather than a live dependency and budget the time to own the code.
How can I help you explore Laravel packages today?