Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Catchadmin Laravel Package

jaguarjack/catchadmin

Laravel-based admin panel framework for rapid backend development, with built-in RBAC permissions, modular architecture, CRUD code generation, and a Vue front end. Ready-made user, role, menu, and department modules help teams scaffold secure, extensible admin apps quickly.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What this actually is. CatchAdmin is not a library you composer require — it is a full modular admin application (Laravel + a bundled Vue 3 / TypeScript / Element Plus SPA) that you either fork as a greenfield scaffold or graft onto an existing Laravel app via php artisan catch:install. Sizing the decision correctly matters more than any feature list: adoption is an architecture commitment, not a dependency choice. The 0 dependents figure is consistent with this — admin scaffolds are cloned, not consumed as packages — but it also means there is no ecosystem of downstream users to lean on for compatibility signals.

Architecture fit. The modular monolith layout (modules/{Module}/ with per-module controllers, models, routes, migrations, seeders, service providers) is the strongest part of the design. It gives clean bounded contexts inside a single deployable, which is the right shape for a dense back-office. The cost is a proprietary base class — Catch\Base\CatchModel — that replaces ordinary Eloquent conventions with a declarative CRUD DSL ($searchable, $fields, $form, $formRelations, $sortField, $asTree, $parentIdColumn). That DSL is where the leverage is: list filtering, pagination, form persistence, and tree rendering are configured, not written. It is also where the lock-in is: business models built on CatchModel are not portable back to vanilla Laravel without rewriting query and form plumbing.

Non-standard conventions are the main technical risk. The framework deliberately diverges from Laravel idiom: unsigned-integer Unix timestamps instead of timestamps(), deleted_at as an unsigned int instead of softDeletes(), status codes fixed at 1 = Enabled / 2 = Disabled, enums starting at 1, and auto-magical response shaping on controller returns. Individually defensible (fast, compact, timezone-naive). In aggregate they create three concrete problems: (1) third-party packages expecting Carbon-cast timestamps or SoftDeletes scope will misbehave; (2) any org that also writes vanilla Laravel in app/ now runs two data conventions in one codebase, which is a slow hygiene failure that surfaces during reporting, exports, and analytics hand-off; (3) deleted_at = 0 must be handled consistently everywhere or soft-deleted rows leak into queries.

Version posture. The AGENTS.md declares Laravel 13+, PHP 8.3+, Vite 8, Pinia 3, Element Plus 2.11, TypeScript strict. Several of these are ahead of mainstream stable versions. Either the repo tracks unreleased majors, or the docs are aspirational. This is the single fastest disqualifier to verify: pin down the real composer.json and package.json constraints before anything else, because if the package requires a Laravel major your platform isn't on, there is no incremental adoption path — you would be coupling an admin panel to a framework upgrade.

Genuine differentiators worth crediting. The code generator (SQL-to-CURD, with catch:make:model, catch:make:migration, catch:make:menu), the paired import/export and upload skills, the recycle bin, and — unusually — a first-class AI-agent skill pack that encodes module conventions, migration templates, model templates, and frontend useCreate/useShow patterns. For a TPM this is a real onboarding and consistency lever: scaffolding becomes reproducible and reviewable rather than tribal. The flip side is that generated code follows the non-standard conventions by default, which accelerates the convention divergence described above and rewards a strict "generate first, then hand-edit minimally" discipline that teams must actually honor.

Key questions.

  • What are the real composer.json / package.json constraints, and does the package support the Laravel and PHP versions we currently run?
  • Which auth mechanism is the token layer built on (Sanctum, JWT, custom), and can it federate to our IdP for SSO/MFA?
  • Are menus, permissions, and dynamic routes cached per request, or rebuilt from the database on every call?
  • Is the API surface documented (OpenAPI/contract), or is the bundled Vue app the only supported consumer?
  • Are attachment storage drivers pluggable (S3/OSS) or local-disk only?
  • Is there multi-tenancy or row-level data scoping, or must that be built module by module?
  • Is unsignedInteger timestamp behavior configurable, or hard-coded into the base model and migration templates?
  • What is the test coverage and CI posture of the upstream repo, and how many active maintainers are there?
  • How does the generator handle relations, composite indexes, and validation rules — or does it stop at columns?
  • What is the tagged-release cadence, and how large is the diff between releases (i.e., how tractable is a recurring upstream merge)?

Integration Approach

Stack fit. Clean fit if the org is Laravel + Vue 3 + TypeScript + Element Plus with a Tailwind-friendly design system. Poor fit if the frontend standard is React, Vue 2, or Ant Design — replacing the entire web/ app is effectively rebuilding the product, and at that point you are adopting a PHP backend framework with an unproven API contract. Confirm frontend standards before scoping.

Two viable paths.

  • Greenfield back-office: clone/fork, run catch:install, treat the repo as the application baseline. Fastest time-to-value; you inherit everything including conventions. Appropriate when the back-office has no existing home.
  • Brownfield graft: install into an existing Laravel app, mount CatchAdmin behind a route prefix (e.g. /admin), and confine it to new back-office modules under modules/. Existing domain services in app/ stay untouched and are called from module controllers. This is the safer path for an established codebase and the one I would recommend evaluating first — but it is gated entirely on Laravel/PHP version compatibility.

Compatibility gates, in order of severity.

  1. Laravel major and PHP minor must match the package's floor. Non-negotiable, checked first.
  2. Frontend build toolchain: php artisan catch:build implies Node + Vite + a package manager in CI. Deployment is no longer a pure PHP artifact — the pipeline must produce and ship compiled assets, or you commit build output (worse).
  3. The int-timestamp / int-soft-delete convention must be accepted for all CatchAdmin-side tables. Mixed conventions across app/ and modules/ need a written internal standard before the second module is built.
  4. Auth must either accept CatchAdmin's token layer or be bridged to your existing session/SSO model. Retrofitting SSO after go-live is expensive.

Sequencing.

  1. Two-day spike, isolated. Clone into a sandbox, install, catch:build, confirm it boots. Record actual dependency versions. This kills or confirms the whole initiative cheaply.
  2. One real module end-to-end. Pick a genuinely useful, low-risk internal admin resource (vendor records, internal ops lookups) and run it through the full loop: table definition → migration → model → route → Vue list via catch-table → create/edit form → permission wiring via catch:make:menu. Instrument the elapsed time. That number — not the feature list — is the business case.
  3. Convention decision gate. With one module shipped, decide formally: adopt CatchAdmin conventions wholesale in modules/, or wrap them. Publish the standard. This is the highest-leverage governance artifact of the whole adoption.
  4. Auth and permission integration. Wire token auth to the org identity model; verify that menu/permission state is seeded and versioned as migration code, not clicked in by hand in production.
  5. Second module, by a different engineer. If the ramp assumption holds, proceed; if not, the scaffolding promises are overstated and you should stop at one module.
  6. Harden and hand over. Storage drivers, queue/Redis config, backup and recycle-bin retention, monitoring.

Where to draw the boundary. Treat CatchAdmin as the back-office presentation and CRUD layer only. Keep business rules, integrations, and anything with a long lifecycle in app/ as plain Laravel services, with modules as thin adapters. This preserves an exit ramp: if the framework is abandoned, the admin layer is replaceable and the domain logic survives.

Operational Impact

Maintenance ownership. Forking means you own the merge. Apache-2.0 gives you the legal freedom (including a patent grant) but no support contract, no LTS, no deprecation policy. With 940 stars and a single visible upstream, bus factor is the dominant long-term risk. Budget explicitly for: recurring upstream merge effort, an internal maintainer with ownership of the modules/ conventions, and a documented exit plan. If the org cannot name that maintainer, do not adopt.

Support surface. Community issues and a documentation site that is Chinese-first. That is a real constraint for an English-speaking team triaging production incidents — the AGENTS.md and skills are excellent for guiding AI-assisted development, but they are not an escalation path when something breaks at 2 a.m. Assume self-support.

Scaling. Nothing exotic: standard Laravel horizontal scaling (stateless PHP-FPM, Redis for sessions/cache/queues). Three specific pressure points to instrument before they bite:

  • Dynamic menus and routes. If the permission tree is rebuilt per request without caching, admin latency and database load scale with user count, not page count. Verify caching and invalidation on menu edit.
  • $searchable with like operators. The declarative filter DSL makes it trivially easy to write LIKE '%x%' against large tables. This is a query-plan problem generated by convenience, and it will appear in month six, not week one. Set an index review gate on any module over ~100k rows.
  • Attachments. Local-disk storage breaks the moment you run more than one node. Object storage must be configured up front, not retrofitted.

Failure modes to monitor.

  • Two-conventions drift — int timestamps in modules/, Carbon in app/, discovered during a data export or BI integration. Mitigate with a written standard and a lint/review rule.
  • Generated-then-edited drift — a developer hand-edits a generated migration or model, the next catch:make:* run produces something inconsistent, and no one notices until a fresh environment fails to migrate.
  • Permission and route state as undocumented production data — menus created through the UI rather than seeded become environment-specific snowflakes. Mandate catch:make:menu plus seeded permissions.
  • Unbounded recycle bin — soft-deleted rows in int-timestamp tables accumulate silently. Set retention and a purge job.
  • Upstream merge conflict debt — local edits to core (Catch\Base, web/src/components/admin) compound with every release. Keep core untouched; extend in modules/.
  • Build artifact coupling — backend and frontend versions must move together; a half-deployed build yields a broken admin.

Ramp-up. For a mid-level Laravel + Vue developer, expect roughly one to two weeks to be productive on a single module: day one to install and boot, days two to four to absorb CatchModel's declarative properties and the module layout, week two to ship something real using the codegen skills. The Vue/Element Plus side is conventional and should be near-zero learning cost for anyone with prior experience. The expensive learning is not syntax — it is the conventions, and specifically the discipline of generate-first-then-edit and never touching core.

Verdict framing for the decision. Adopt if: you are Laravel 12/13 on PHP 8.3+, your frontend standard is Vue 3 + Element Plus, you are building a dense back-office with many CRUD resources, you have a named internal owner, and you accept forking as a maintenance posture. The generator plus agent skills are a legitimately strong velocity argument. Decline if: you are on an older Laravel, your frontend is React-based, you need vendor SLAs, or you only need a thin admin — in those cases the framework's conventions and fork-ownership cost exceed the CRUD savings. The two-day compatibility spike against your actual composer.json is the correct next action, and it is cheap enough that skipping it would be negligent.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log