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

Verbs Sync Laravel Package

danielcoulbourne/verbs-sync

A Laravel package for syncing verbs—the actions and events that drive your application—so their definitions and dispatches stay consistent across your codebase, with simple integration into Laravel's container and event system.

View on GitHub
Deep Wiki
Context7

Getting Started

verbs-sync is at v0.1.0 — an initial tag with no migration guide, no prior assessment, and a changelog that points only at the commit list. Treat everything below as "verify against source before relying on it," because a 0.1.0 API is explicitly unstable.

  1. Install and inspect in one pass. composer require danielcoulbourne/verbs-sync then immediately open vendor/danielcoulbourne/verbs-sync/ and read, in this order: composer.json (constraints, Laravel version support, whether a service provider is auto-discovered), README.md, src/, config/, database/migrations/, tests/.
  2. Publish before you build. If the package ships a config or migrations, run php artisan vendor:publish --provider="DanielCoulbourne\VerbsSync\VerbsSyncServiceProvider" (confirm the exact FQCN from composer.json's extra.laravel.providers) and php artisan migrate. Do this before writing any application code — the published config is the contract you'll be configuring against.
  3. Read the tests as documentation. For a 0.1.0 package the test suite is usually more accurate than the README. The feature tests show the intended call order and the exact method names; copy one into a scratch test and make it pass in your app.
  4. First use case. Wire the smallest possible round trip: register one verb, attach it to a single model, trigger a sync, and assert the persisted result. Do this in a throwaway test, not in a seeder. Once that loop is green you know the provider, config, schema, and driver all line up.

If step 4 fails, stop and check whether the package actually supports your Laravel version — the commit list is the only compatibility signal at this tag.

Implementation Patterns

Wrap the package behind your own service. At 0.1.0 the public API will churn. Define an app-level interface (VerbSync contract) with the two or three methods you actually call, bind the package implementation in a service provider, and depend on your interface everywhere else. Upgrading then means editing one binding rather than grepping for class names.

Resolve everything from the container. Don't new package classes. Use constructor injection or app(...) so any constructor-signature changes in a patch release surface as a container error you can fix in one place.

Keep verb definitions declarative and centralised. Whatever the package's registration surface is (a config array, an attribute, a registry call), put all verb definitions in one class or config file rather than scattering them across models. Syncing logic tends to grow into "which verbs are allowed where," and that's much easier to reason about as a single map.

Test the sync boundary with Http::fake() / Queue::fake(). Any package named "sync" is either hitting a remote or coordinating local state — possibly both. Fake the outgoing transport in every feature test and assert on the payload the package builds, not just that a request happened. That payload is your real integration contract and the thing most likely to break silently between versions.

Use it in jobs, not in request cycles. If syncing touches a network or iterates a collection, dispatch a job. This also makes failures retryable and keeps the 0.1.0 behaviour from blocking user requests while you're still learning its edge cases.

Integrate with events. Have the package's operations wrapped in your own domain events so you can log, observe, and later swap implementations without touching call sites.

Pin the version. "danielcoulbourne/verbs-sync": "0.1.*" — or an exact tag — and do not use ^0.1. Composer's caret rule on a 0.x version allows 0.1.x only, but an exact pin makes the intent obvious to the next developer.

Gotchas and Tips

  • Semantic versioning at 0.x means breaking changes ship in patch releases. There is no deprecation contract here. Read the diff between tags before every composer update, and keep the package out of your automated dependency-bump PRs until it reaches 1.0.
  • Auto-discovery may or may not be configured. Check extra.laravel.providers in the package's composer.json. If it's absent you must register the provider manually in bootstrap/providers.php (Laravel 11+) or config/app.php, and the failure mode is a confusing "class not found" or a silently unregistered facade.
  • Publish-then-edit, never edit in vendor/. Config values you change in vendor/ vanish on composer update and will cause a mystery regression at the worst time. If no config is publishable, note that as a limitation and keep your own config file that feeds the package.
  • Migrations are the riskiest part of a 0.1.0. Inspect the migration for column types, index choices, and whether it's reversible. Test migrate and migrate:rollback on a copy of real data shape before it touches staging.
  • Watch for facade-vs-injection ambiguity. If a facade exists, its accessor may resolve a different binding than the concrete class. Pick one style and stay consistent — mixing them is the classic cause of "config changes aren't taking effect."
  • Debug with the container, not dd(). app()->make(TheClass::class) inside tinker will reveal constructor dependencies and confirm which config the instance received.
  • Extension points are unproven at this tag. If the README advertises events, macros, or a driver/manager pattern, verify they're actually dispatched or resolved in src/ before designing around them — early packages often document intent that isn't wired up. Anything you must customise, do it via your own wrapper class instead of relying on a hook.
  • Track upstream actively. With one release and a bare changelog, the package's direction matters more than its current state. Follow the repo, and if it goes quiet for a quarter, be prepared to fork or replace — which is much cheaper if you kept the wrapper-interface pattern above.
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.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
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