setono/sylius-bulk-edit-plugin
Setono Sylius Bulk Edit Plugin adds bulk editing to the Sylius admin, letting store admins update multiple products or other resources at once instead of editing them individually. It streamlines repetitive catalog maintenance, reduces manual work, and saves time.
Architecture fit. Sylius plugins follow a well-understood contract: a bundle class, a DI extension that prepends resource/template/grid configuration, optional routing imports, and admin UI hooks into the Semantic UI–era grid and form system. This package appears to target the admin product grid with a bulk action that mutates ChannelPricing records on ProductVariant entities. That is architecturally idiomatic — it sits on top of the resource layer rather than forking core — so it should not fight the framework. The caveat is which Sylius generation it targets: Sylius 1.x (Semantic UI admin, grid-based bulk actions) and Sylius 2.x (Symfony UX/Twig admin, reworked grids and bulk action contracts) are materially different surfaces, and a plugin this small will almost certainly support one, not both.
Integration feasibility. Mechanically low-cost: composer require, register the bundle in config/bundles.php, import routing if not auto-wired, clear cache, and verify the bulk action appears on the product grid. No external services, no schema migration of consequence (it writes to existing channel-pricing rows), MIT license removes legal friction. Realistic effort is hours for a spike, not days — provided the version matrix lines up.
Technical risk. The dominant risk is not code quality, it is signal quality. Three stars, zero dependents, and a single maintainer mean no production battle-testing to borrow from, no downstream issue corpus to mine, and no community pressure to fix edge cases. Price mutation is also a high-blast-radius operation: bulk writes touch revenue-bearing data with no obvious audit trail, no undo, and no dry-run. Rounding behavior, multi-currency handling, per-channel pricing, and interaction with promotions/tax calculation are all correctness surfaces that a 3-star plugin is unlikely to have hardened. Concurrent admin edits and stale price indexes are additional failure vectors.
Key questions.
composer.json, and is there a CI matrix proving it?ChannelPricing, or does it flatten to a single channel/currency?Stack fit. Best suited to a Sylius 1.x shop on Symfony 5.4/6.x with a standard Doctrine ORM setup and the default admin. If the target is Sylius 2.x, treat compatibility as unproven until a spike proves the bulk action renders and executes.
Migration path. There is nothing to migrate from in a vendor sense — this is net-new capability. The real migration is retiring whatever ad-hoc mechanism currently exists (CSV import round-trips, SQL scripts, a custom admin controller). Plan to run both in parallel for one pricing cycle and reconcile outputs before decommissioning the manual process.
Compatibility. Validate explicitly against: multi-channel and multi-currency catalogs, products with many variants, custom price calculators or tiered pricing decorators, and any Elasticsearch/OpenSearch price index or storefront cache layer. Each of these is a place where "bulk edit wrote the row" does not equal "the storefront reflects the new price."
Sequencing.
Maintenance. Assume you will own this code. With one maintainer and three stars, the realistic posture is: pin the exact version, fork it internally, and budget a few days per Sylius minor upgrade to re-verify. Treat upstream releases as suggestions, not a support contract.
Support. Community-only, effectively best-effort. There is no SLA, no vendor escalation, and a small enough user base that a filed issue may simply sit. Your internal runbook and code familiarity are the support model.
Scaling. Bulk price edits scale badly if executed inline: a few thousand variants in one HTTP request invites PHP memory limits, request timeouts, and long-running Doctrine transactions holding row locks on sylius_channel_pricing during peak traffic. If the plugin is synchronous, wrap it or restrict batch size; if it is Messenger-based, verify worker throughput and idempotency. Also account for downstream cost: search index reindexing and cache warmup after a large price change.
Failure modes. Partial application across a batch with no rollback; silent rounding drift that compounds across repeated percentage edits; channel/currency crossover writing prices into the wrong ChannelPricing row; stale storefront prices from cache or index lag; and no forensic trail when a merchandiser asks "who changed this and to what." Mitigate with pre-edit snapshots, a max-batch guard, and post-edit reconciliation queries.
Ramp-up. Developers need Sylius plugin conventions (grid bulk actions, resource prepending, template overrides) — roughly a day for someone already fluent in Symfony. Merchandisers need a short, explicit SOP: preview, small batch, verify storefront, then proceed. The risk is not learning the UI; it is teaching operators that this button has no undo.
How can I help you explore Laravel packages today?