libre-informatique/email-crm-bundle
Email CRM bundle for PHP applications, offering reusable components to connect email interactions with customer records and support lightweight CRM workflows. Designed for straightforward integration into existing projects and adaptable to common contact-management needs.
Framing correction (blocking): libre-informatique/email-crm-bundle is a Symfony bundle, not a Laravel package. It registers via config/bundles.php and YAML configuration, ships Doctrine entities and mappings, and has no service provider, facade, or config/*.php. Against a Laravel target, architecture fit is effectively zero without a port — and porting an unmaintained, undocumented bundle is almost always costlier than building the equivalent feature natively. The first TPM action is to reclassify this item out of the Laravel dependency backlog and into the "reference material" bucket.
Architecture fit: The bundle belongs to Libre Informatique's open-source ERP/CRM family (Blast and related bundles), historically composed on Symfony with Sylius-derived components (ResourceBundle, GridBundle, Registry) and Doctrine ORM. Expect coupling to Symfony form types, event dispatchers, and the mail transport abstractions of the PHP 7.x / Symfony 3.4–4.4 era. The functional scope — contacts, lists/segmentation, campaign tracking, email logging — is a credible domain sketch (email ↔ contact ↔ organization ↔ activity), which is where its value sits for a TPM.
Integration feasibility: Composer-installable in principle, but with 1 star, 0 dependents, no tagged releases, and no discoverable documentation, feasibility must be established by reading source, not the README. Expect swiftmailer/swiftmailer (EOL since late 2021) rather than symfony/mailer, which caps the integration surface: it is incompatible with modern Symfony mailer/notifier and with PHP 8.2+ security maintenance. Pulling it in likely drags an unintended CRM stack as transitive surface.
Technical risk:
NOASSERTION means the license is not machine-identifiable: possibly no LICENSE file, a custom notice, or a broken header. Shipping into a commercial or client-facing product without written clarification is a legal exposure that outweighs any engineering benefit. This alone is often a stop condition.Key questions for the author (Libre Informatique): What is the exact license, in writing? Which Symfony/PHP versions are supported today? SwiftMailer or Symfony Mailer? What is the full transitive dependency set and are any abandoned? Does it own bounce/complaint/unsubscribe handling or defer to the transport? Where is PII stored and is there retention/erasure support? Is there paid support, and is there a maintained successor bundle?
TPM recommendation: Evaluate as a reference implementation for domain modeling, not as a dependency. Proceed to any hands-on work only if the target stack is Symfony ≤4.4 and a license clarification is obtained; otherwise close the item out with a documented rationale.
Stack fit — two scenarios, one decision. (1) Laravel target — do not integrate. Extract the data model concepts (contact, list/segment, campaign, template, send record, suppression list, activity log) and implement against Laravel's mailer, queue, notifications, and Eloquent relations. (2) Symfony target on 3.4/4.4 — technically viable behind an adapter, but you inherit the SwiftMailer-to-Symfony-Mailer migration immediately.
Migration path: Treat it as a fork, not a package. Vendor the source into a private repository under an internal namespace, resolve the license, generate an SBOM, and wrap the public surface (service interfaces, entity repositories) behind your own domain interfaces so the bundle can be replaced later without touching call sites. Because the entities may be shared with Blast-style bundles, isolate them in a separate bounded context rather than importing them into the core domain. For Laravel, translate the Doctrine annotations into Eloquent models and relations; do not attempt to run Symfony's container beside Laravel's.
Compatibility: Check composer.json platform constraints against your PHP runtime and framework LTS. Audit every transitive package for PHP 8 compatibility and active maintenance. Replace the mail transport at the adapter boundary — no SwiftMailer types in application code. Add PHPStan and a test harness, since upstream tests are unlikely to be runnable.
Sequencing (time-boxed, gated):
composer audit, SBOM, abandoned-package scan) to size the transitive tree.Given 0 dependents and 1 star, plan for the spike to confirm that integration cost exceeds native build cost. Report that outcome either way — it is a reusable data point for future "should we adopt this OSS package" calls.
Maintenance: You become the maintainer. There is no upstream to patch; every framework upgrade, security advisory, and mailer change is yours to absorb. Budget a standing allocation, not a one-time integration cost. The unresolved license also complicates contributing fixes upstream and any future relicensing.
Support: No community, no issue triage, no documented support contract by default. The only realistic route is a commercial arrangement with Libre Informatique directly — confirm the bundle is still maintained internally before assuming that option exists at all.
Scaling: Assume synchronous sending. Campaign fan-out needs a queue, per-provider rate limiting, and idempotent send records to survive retries. Recipients/campaigns/send-log tables grow without built-in archival, so plan partitioning or retention jobs for the send log and tracking tables from the start. Tracking pixels and link rewriting add their own scaling and privacy obligations.
Failure modes:
Ramp-up: Requires Symfony fluency plus reverse-engineering an undocumented bundle, and familiarity with Libre Informatique's CRM conventions if companion bundles are pulled in. Realistic estimate: 1–2 weeks for a competent Symfony engineer to reach a working spike, and considerably longer to reach production confidence with tests and documentation upstream never provided. On a Laravel team, add the cost of learning the Symfony bundle model for no durable payoff — a strong argument for building the equivalent natively or buying a supported CRM integration.
Portfolio takeaway for the TPM: this package's highest-value use is as a feature checklist and schema reference for a CRM-lite roadmap item, plus a framework-standardization data point (Symfony vs. Laravel dependencies). The decision it most directly supports is "build a thin internal module or buy a supported CRM/email platform" — not "adopt this." Close it as a dependency candidate; keep the domain notes.
How can I help you explore Laravel packages today?