mtarld/symbok-bundle
Symfony bundle inspired by Lombok that generates getters, setters, constructors, adders and removers for your PHP classes from simple annotations, cutting boilerplate in entities and DTOs while keeping your code plain, native PHP.
Dependency intake policy — the primary decision. This package is the concrete test case for whether the team's adoption bar is real. A Symfony-only bundle with 48 stars, zero dependents, and an archived repository should fail any written policy that claims to gate on maintenance and support. If a proposal to adopt it would pass, the policy is decorative; if it fails, the policy has teeth and this is the precedent. That is the highest-value output here: one decision that calibrates dozens later.
Framework-fit gating on the roadmap. The request is framed as a "Laravel/PHP package." It is a Symfony bundle, with no service provider, no facade, no Eloquent or container integration. The first product decision it supports is a routing decision: reject it for any Laravel workstream and confirm the requirement actually originated in Symfony. When the requester's stated stack and the artifact's stated stack disagree, that mismatch is a discovery finding worth surfacing before any technical evaluation.
Boilerplate reduction: native language features vs. third-party codegen. Symbok's stated purpose — generating getters, setters, adders, removers, and constructors from annotations — is largely subsumed by PHP 8.0+ constructor property promotion, readonly, and native attributes. The build-vs-buy decision is really adopt-vs-modernize: adopt a codegen dependency, or spend a bounded refactor on language features that carry zero supply-chain risk. Same outcome, permanently.
Build vs. buy for attribute-driven configuration (if the real need is container/route wiring). If the underlying ask is "declare services and routes on the class instead of in YAML," that capability has been absorbed upstream by native Symfony attributes and by Laravel's own #[Route], #[Middleware], and attribute-driven container resolution. Buy is unnecessary when the platform now ships it.
Tech-debt triage in an inherited Symfony estate. For a legacy Symfony 4/5 codebase already carrying this bundle, the informed decision is classify-and-schedule, not evaluate-and-extend. It becomes a removal workstream with an owner and a date, sized from actual usage.
Roadmap sequencing for a PHP modernization effort. Adoption is an explicit decision to defer the PHP 8.1+ migration. Making that trade-off visible — rather than letting a small convenience dependency quietly extend the life of a legacy stack — is often the most useful thing a PM does with a package like this.
Consider it only under narrow, time-boxed, and low-stakes conditions:
readonly do not exist and there is a large, well-understood, non-critical boilerplate backlog to clear inside a single quarter.Look elsewhere — decisively — when any of the following hold:
readonly remove most of the motivation at zero third-party risk.doctrine/annotations dependency) bets against the platform's direction.Two diligence flags before any decision. First, the documentation contradicts the technical assessments: the package summary describes Lombok-style accessor generation, while the evaluation describes annotation-driven controller and container configuration. An archived package whose own description does not match its behavior is a documentation risk on top of a maintenance risk — verify against src/ and Tests/, never against the README. Second, the numbers should be read as confirming, not driving, the call: an overall score of 0.135 with opportunity at 0.33 describes something technically present but operationally inert. Archived plus zero dependents is the deciding fact; the star count is not.
To executives — one page. This is a small, MIT-licensed Symfony utility that automatically writes repetitive code — either getter/setter/constructor boilerplate or class-level configuration metadata, depending on which document you read, which is itself telling. It costs nothing to license and almost nothing to install. The relevant fact is that the project is archived: no one maintains it, patches it, or responds to security issues, and it has no downstream users. Recommendation: do not adopt it as a dependency. The cost of adoption looks like zero and is not — it is an unmaintained component in the supply chain with no upgrade path and no one to call. If boilerplate or configuration sprawl is a genuine cost center, we address it with native PHP 8 language features and a one-time, estimable refactor, which is cheaper over any horizon longer than a single quarter and does not accumulate risk. If the bundle is already in the tree, it is tech debt with an owner and a removal date, not a component to build on.
To engineering — the short version. Three findings, in order of decisiveness. One, framework mismatch: this is Symfony-only and irrelevant to a Laravel codebase; do not write an adapter. Two, direction of travel: annotation-driven codegen runs opposite to where both Symfony and PHP are heading — native attributes, constructor promotion, readonly — and Symfony 6.2+ already ships equivalents. Three, archived status: we inherit any fork permanently, against a single already-inactive maintainer and an effectively nonexistent install base. It is worth thirty minutes as a design reference for compiler-pass codegen; it is not worth a composer require. If the team wants relief, propose a Rector-driven migration to PHP 8.1+ syntax plus native attributes — same outcome, no vendor risk, and it retires the constraint instead of working around it.
To the requester — four questions back, because the answers change the recommendation. Is the actual estate Symfony or Laravel? What is the underlying need — boilerplate reduction, or attribute-based controller/container configuration? If Symfony 5.4 or earlier, is the version constraint pinned by PHP, by framework, or by an un-migrated bundle graph, and is that the real roadmap item? And if the bundle is already in the tree, who owns the migration off it and what is the blast radius across classes? Our position is no-go for new adoption; if already present, classify as tech debt with a scheduled removal.
How can I help you explore Laravel packages today?