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

Ng Admin Generator Bundle Laravel Package

marmelab/ng-admin-generator-bundle

A Symfony bundle that generates ng-admin back-office configurations from Doctrine entities, automatically mapping fields and relations to CRUD views and forms so you can expose admin panels with minimal boilerplate.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Verdict up front: this is not a Laravel package. It is a Symfony bundle (marmelab/ng-admin-generator-bundle) that introspects a LemonRestBundle-based Symfony API and emits a JavaScript configuration file for ng-admin, an AngularJS 1.x admin front end. Every layer of the stack — Symfony bundle registration, Doctrine entity metadata, LemonRest annotations, AngularJS — is orthogonal to a Laravel/Eloquent/Blade/Livewire application. As a TPM you should treat this as a reference implementation to study, not a dependency to install. The 1.21 composite score, 0 dependents, and archived status corroborate that read.

Architecture fit — poor, by construction

  • Delivery mechanism is a Symfony bundle (service container, DependencyInjection/*Extension, compiler passes, Resources/config/services.yml). Laravel has no bundle concept; you would need a service provider shim that re-registers the generator classes manually.
  • Input contract is Doctrine/LemonRest metadata (@Rest\... annotations, entity mappings). Laravel exposes Eloquent models and route definitions instead. There is no adapter layer in the package, so the "generate from your API" value proposition does not transfer.
  • Output artifact is an ng-admin config (AngularJS 1.x), which reached end-of-life in December 2021. Any Laravel app consuming it inherits a second, unrelated front-end toolchain (Node build, Bower/npm-era packaging) outside the Laravel asset pipeline.
  • Net effect: the only reusable asset is roughly a few hundred lines of schema-to-form-field mapping logic. That is the entire technical payload.

Integration feasibility — feasible only as a fork/extraction

  • High-confidence path: vendor the generator classes into app/Console/Commands or an internal packages/ directory, replace Doctrine metadata reads with Eloquent (Schema::getColumns, casts, $fillable, relationship methods), and drive it from an Artisan command (php artisan admin:generate-config).
  • Field-type mapping is the real work: Doctrine types → ng-admin field directives (boolean, date, reference, embedded, choice) has no Eloquent equivalent for polymorphic relations, JSON columns, or enum casts. Expect to hand-write and own this mapping table.
  • Authorization is the largest functional gap: the generator has no notion of Laravel policies, gates, or multi-tenancy scopes. A generated admin config that ships without authz modeling is a security liability, not a time-saver.

Technical risk — high

Risk Severity Notes
Archived, unmaintained upstream High No security patches, no PHP 8.x support guarantee; abandoned ~Symfony 2/3 era
AngularJS EOL High Admin CRUD surface is a prime attack target on an unsupported framework
Zero dependents Medium No community validation, no fork ecosystem to lean on
Phantom dependency on LemonRestBundle Medium Also a marmelab legacy project; compounds abandonment risk
False economy High Port cost likely exceeds adopting Filament/Nova/Backpack, which are Laravel-native and actively maintained

Key questions to resolve before any commitment

  1. Is there a legacy Symfony + LemonRest service in our estate that this bundle was originally paired with? If yes, the assessment changes from "port" to "maintain a legacy admin until decommission."
  2. What is the actual requirement — a generated admin UI, or schema-driven form scaffolding? Laravel-native options (Filament, Nova, Backpack, or artisan make:model scaffolding) already satisfy the latter without a fork.
  3. Who owns the forked code? If the answer is "the platform team, indefinitely," that is an unbudgeted maintenance line item.
  4. Are we willing to ship an AngularJS 1.x SPA in 2024+? If not, the generator's output is unusable regardless of port quality.
  5. Does the MIT license plus archived status give us clean grounds to extract and relicense internally? (Yes, but confirm attribution expectations with legal.)

Integration Approach

Stack fit — none out of the box. Laravel's conventions (Eloquent, Artisan, Blade/Inertia/Livewire, Vite) map to none of the bundle's assumptions (Doctrine, bundle DI, ng-admin, legacy asset tooling). A TPM should frame this to stakeholders as "greenfield build informed by an existing design," not "integrating a package."

Recommended migration path (build-vs-buy gate first)

  1. Two-day spike. Clone the repo, read the generator command and field-mapping classes, and document exactly which constructs it supports. Produce a one-page capability matrix against our Eloquent models.
  2. Buy-side comparison. Prototype the same admin screen in Filament (or Nova if licensed) against the same model. Measure time-to-first-working-CRUD. This is usually measured in hours, not weeks.
  3. Decision gate. Proceed with the fork only if the spike reveals non-trivial logic we cannot replicate cheaply (e.g., a schema-introspection approach we specifically want) and the target front end is not ng-admin.
  4. If forking: isolate as /packages/ng-admin-generator with its own README, pin PHP 8.2+ compatibility in CI, and treat it as a dev-time tool only — never a runtime dependency in composer.json of the main app.

Compatibility considerations

  • PHP: original targets PHP 5.x/7.0-era syntax. Expect to modernize type hints, remove each()-style constructs, and add strict types during the port.
  • Framework: strip all Symfony use statements (Symfony\Component\Console, DependencyInjection, Config) — the generator's console command must be rewritten as an Illuminate\Console\Command.
  • Front end: if any ng-admin output is retained, it must be served as a static asset behind Laravel auth middleware; do not expose it unauthenticated. Better: discard the output format entirely and emit a Laravel-native resource definition.

Sequencing

  • Week 1: spike + capability matrix + buy-side prototype.
  • Week 2: decision gate and stakeholder sign-off on build/buy.
  • Weeks 3–5 (if build): extract generator, port metadata reader to Eloquent, port command to Artisan, write golden-file tests comparing generated output to expected config.
  • Week 6: security review of generated output (authz, mass-assignment, field exposure), then pilot on one non-critical model.

Operational Impact

Maintenance — the dominant cost. Forking transfers 100% of upstream maintenance to us. Because the repo is archived, there is no "wait for a patch" option and no upgrade path. Budget an ongoing owner: dependency bumps, PHP minor-version compatibility, and field-mapping drift each Laravel release. Compare against Filament/Nova, where the vendor absorbs that cost.

Support. No upstream support channel, no issue triage, no security advisories. Internal support means tribal knowledge held by whoever performed the port — a bus-factor of one unless documented. Mitigate with a written runbook and golden-file test suite as a condition of merge.

Scaling. The generator itself is trivially cheap — it runs at build/dev time and emits a static config. Scaling concerns are entirely in the output: an AngularJS admin SPA issuing REST calls to Laravel. Expect N+1 query exposure from auto-generated list views (the generator cannot know your eager-load strategy), unbounded pagination, and missing server-side filtering — all of which land on the Laravel API as load grows. Treat generated config as a starting point requiring per-resource tuning.

Failure modes to design against

  • Silent schema drift. A column is renamed or a cast changes; the generator emits stale or wrong field types; the admin UI writes garbage or throws at runtime. Detect via CI check that regenerates config and diffs against committed output.
  • Authorization omission. Generated screens expose fields and records the generator knows nothing about. Every generated resource must be wrapped in explicit policy checks; default to deny.
  • Type-mapping misclassification. JSON columns and enum casts silently map to plain text inputs, corrupting data on write. Add per-model overrides and fail the build on unmapped types.
  • Dead front end. AngularJS CDN/package rot or a browser API removal takes the admin down with no upstream fix. Pin dependencies and vendor them locally.
  • Security exposure. An EOL admin framework on a privileged surface is a standing finding in any audit; expect to justify or remediate it.

Ramp-up. Assume two to three days for a competent Laravel engineer to understand the generator internals and produce a first port. Add significant friction for the front end: AngularJS 1.x and ng-admin skills are scarce in the current hiring market, so any UI customization becomes a specialist task. If the team is Laravel-only, the honest answer is that nobody wants to own the ng-admin half — which is itself a strong argument for the buy-side option.

TPM recommendation: do not adopt as a dependency. Run the spike to harvest the schema-to-field mapping ideas, then almost certainly ship the admin surface on a Laravel-native framework. Revisit only if a legacy Symfony + LemonRest service exists that must be kept alive pending decommission.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource