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

Conversation Laravel Package

pushword/conversation

Pushword Conversation is a Laravel package for adding chat and messaging features to your app. It provides Eloquent-friendly models and APIs for conversations, participants, and messages, making it easy to build threaded discussions, inboxes, or chat histories.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Verdict up front: pushword/conversation is not a Laravel package and should not be evaluated as one. It is a subpackage of the Pushword monorepo — a Symfony CMS assembled from bundles — and inherits the monorepo's toolchain (bin/console from packages/dev-app/, composer assets, Doctrine schema updates, Twig, EasyAdmin, EditorJS). Any plan that assumes composer require pushword/conversation inside a Laravel app is a non-starter.

Architecture fit

  • Laravel ↔ Symfony mismatch is structural, not cosmetic: service providers vs. bundle registration, Eloquent vs. Doctrine, Blade vs. Twig, Mix/Vite conventions vs. this repo's committed dist artifacts. Bridging means maintaining a fork or a shim — an ongoing cost with no upstream support.
  • The conversation package appears to sit alongside core + extensions, so its realistic consumption model is: (a) adopt Pushword wholesale as a separate Symfony application and treat it as an external content service, or (b) cherry-pick bundles into an existing Symfony application. Option (a) is the only low-friction path.
  • The documentation corpus is agent-facing (AGENTS.md, task routing, --format agent|text CLI output). That is an unusually good signal for AI-assisted development and a poor signal for human onboarding — there is little conventional "install and configure" narrative in what was supplied.
  • No migrations by design: schema is applied with doctrine:schema:update --force. That is an accepted pattern for a self-hosted CMF, but it is a governance problem anywhere change control exists.

Integration feasibility

  • Real dependencies are wide: Doctrine (SQLite default, Postgres/MariaDB supported), Symfony runtime, Twig, EasyAdmin, a Vite/EditorJS asset build, Monaco loaded on demand, and a Markdown fragment cache at var/cache/pushword-pools that deliberately survives deploys.
  • Asset handling is a live constraint: package dist output is committed and must be built in a specific order (packages/admin's build empties src/Resources/public/, so admin-monaco-editor must build after it). Vendoring this into a downstream release pipeline needs a documented build step, not just a composer install.
  • Determinism is a functional requirement, not a nicety: byte-identical renders are load-bearing for the fragment cache and the static build's skip-unchanged logic. Any custom template or extension that leaks entropy into output silently degrades caching.

Technical risk

  • Adoption risk (high): 30 stars, 0 dependents. There is no evidence of production usage outside the maintainer's own sites. Treat every capability claim as unvalidated by third parties.
  • Bus factor (high): the docs reference a single human by name for whole-tree git operations. Assume one primary maintainer.
  • Metadata integrity (medium): "Last release: 2026-10-30" is in the future relative to any normal evaluation window, and the package name (conversation) does not obviously correspond to the CMS description. Scope is ambiguous from the outside.
  • Licensing (low): MIT, clean.
  • Documented footguns (medium): the corpus itself catalogues silent-failure classes — Twig blocks silently dropped when misnamed, EasyAdmin form-theme precedence, StateBlock.updatePreview() running before inputs exist, inline tools losing state via input.value =, Monaco mounting into 0×0 hidden panels. Documented is better than undocumented, but the density indicates a system where mistakes fail quietly.

Key questions to answer before any commitment

  1. What does pushword/conversation actually do — conversation persistence, an AI-agent chat surface, or something else — and is it separable from core/admin?
  2. Is there a headless/JSON read API, or is content Twig-rendered only? This single answer determines whether a Laravel front end is viable at all.
  3. What are the minimum PHP and Symfony versions, and is there a support window or LTS policy?
  4. Who else runs this in production, and can we speak to them?
  5. What is the intended upgrade contract? The upgrade/next-release.md mechanism is disciplined, but does it hold across major versions?
  6. Does conversation require the admin bundle, and therefore EasyAdmin and its asset build?

Integration Approach

Stack fit

  • Symfony shop: good fit, with a scoped pilot.
  • Laravel shop: poor fit as a library; acceptable as a sidecar service. Do not attempt a bridge.
  • Mixed/undecided: evaluate as a standalone app first; decide the front-end contract (HTTP/JSON vs. Twig) before designing anything else.

Migration path

  • Do not migrate existing content. Run a time-boxed spike (2–3 weeks, one senior Symfony engineer) in packages/dev-app/ against a copy of real content and real traffic shapes.
  • If the spike passes, integrate conversation/content as an out-of-process service behind a versioned HTTP contract. Your Laravel app becomes a consumer, keeping the blast radius to one interface.
  • If the spike reveals no headless surface, stop. Rebuilding a read API is bespoke work that must be estimated as such, not absorbed into an "integration" line item.

Compatibility

  • Pin exact versions; do not float. With 0 dependents, Composer's resolver gives you no community signal about breakage.
  • Validate against all three DB targets you might run — SQLite for the pilot, Postgres or MariaDB for anything production-facing — because the no-migrations model means schema equivalence is assumed rather than enforced.
  • Vendor a reproducible asset build in CI; assert on emitted files, not on exit codes.

Sequencing

  1. Discovery spike — stand up the dev-app, exercise conversation, document the external API surface. Output: go/no-go memo.
  2. Contract freeze — define the HTTP/JSON boundary your application will consume; stub it if it does not exist.
  3. Pilot deployment — single non-critical site, Postgres, full CI asset build, cache-clear step in the deploy runbook.
  4. Read-path cutover — front end consumes the service; no admin yet.
  5. Admin/editorial adoption — only after the read path is stable; this is where the EasyAdmin/EditorJS learning curve lands.
  6. Agent workflows — the --format agent CLI and AGENTS.md routing are genuinely differentiating; schedule them last so they are a bonus, not a dependency.

Fallback Keep an exit at every gate. If the pilot fails, the fallback is a maintained CMS or a bespoke content model — the sunk cost should never exceed the spike plus pilot.

Operational Impact

Maintenance

  • doctrine:schema:update --force in production is the single largest operational concern. It is imperative and non-reviewable; on a system of any size it needs a change-control exception or a generated-migration wrapper you maintain yourself.
  • Deploy runbooks must include cache:clear and awareness that the Markdown fragment pool survives it. Changes to render output require bumping MarkdownParser::CACHE_VERSION (and SplitContent::TOC_CACHE_VERSION for TOC). Miss this and you ship stale content that looks like a caching bug for days.
  • Asset build ordering is a hard constraint; encode it in CI rather than in a wiki page.

Support

  • Assume self-support. There is no dependents ecosystem, no Stack Overflow corpus, and issue response times are unknown. Budget internal ownership from day one — this is not a "community will help" dependency.
  • The upgrade-note discipline (one note per release, indexed) is a real positive; it makes upgrades tractable if it is honoured.

Scaling

  • SQLite is the default and is fine for single-digit sites and low write volume. Anything with concurrent editors should move to Postgres early, not after pain.
  • The deterministic-render + content-hash cache is a genuine scaling asset for static/edge delivery; it is also brittle. Any custom Twig work must be audited for nondeterminism.
  • Monaco and editor bundles are fetched on demand, which is good for payload size; plan CDN/caching for Resources/public accordingly.

Failure modes to instrument

  • Misnamed Twig blocks silently dropping header buttons — no error, HTTP 200. Assert on rendered HTML, never on status codes.
  • Stale fragment cache after a render change (see above).
  • Stale committed dist assets after an admin build.
  • Schema drift from imperative updates.
  • Editor state loss on load if a block reads from not-yet-created inputs.
  • Build-order breakage where one package's build deletes another's published assets.

Ramp-up

  • A senior Symfony developer: ~1–2 weeks to be productive in packages/dev-app/, ~1 month to be safe with the admin/editor layer.
  • A Laravel-only team: materially longer, and the honest answer is that you should not ask them to. Staff one Symfony-capable engineer as owner or do not proceed.
  • The agent-oriented documentation (AGENTS.md, task routing, compact JSON CLI output) will accelerate AI-assisted contribution noticeably — that is this package's most distinctive asset and worth weighting in the decision. It does not compensate for the absence of human-facing install documentation or third-party adoption.

Recommendation: pilot only. Do not standardize, and do not build a Laravel bridge. Re-evaluate after the spike produces a working headless contract and a named internal owner.

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.
unabomber/timezone
delatbabel/contacts
astritzeqiri/g-recaptcha
kevinongko/laravel-genode
developeruz/laravel-analytics
robbiep/afterthedeadline
frankkessler/incontact-laravel-oauth2-rest
jlxh/laravel-userlog
davidmgilo/timetables
qylinfly/role-permission
reflect-digital/conduit
takashato/laravel-vietqr
aitor24/laralang
kraenzle-ritter/entity-relations
dindigital/din-image
pomirleanu/image-colors
sawmainek/laravel-api-generator
delatbabel/jsonresponses
mouhamedfd/permissions-generator
eduplus/qr