Guides

Resource lifecycle

Run focused behavior around resource changes.

Nimbly uses .meta event declarations for resource lifecycle side effects. A resource can declare what should happen after a record is created, updated, or deleted:

{
  "events": {
    "create": ["job:application-email-created"],
    "update": ["application-updated"],
    "delete": ["application-deleted"]
  }
}

Event payloads are intentionally small:

[
    'action' => 'create',
    'resource' => 'membership-applications',
    'uuid' => 'record-uuid',
    'data' => $record_data, // available for create/update/delete when already loaded
]

Plain event names are dispatched to module libraries by convention:

ext/modules/member/lib/application-updated.php
function application_updated($event) {}

Entries prefixed with job: enqueue a .jobs record instead of running work inline:

"events": {
  "create": ["job:application-email-created"]
}

Core setup creates the .jobs resource. job_enqueue() also creates it lazily if an older install does not have it yet.

Run queued jobs from CLI:

php core/cli/nimbly.php jobs:run

By default, jobs:run processes one eligible job. Pass an explicit limit only for catch-up runs:

php core/cli/nimbly.php jobs:run 25

Job handlers are module-discovered by convention:

ext/modules/member/lib/application-email-created.php
function application_email_created_job($job) {}

The queue stores intent and payload, not shell commands. Handlers may send email, call APIs, or perform other side effects.

View this page as Markdown