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

Oc Cumuluscore Plugin Laravel Package

initbiz/oc-cumuluscore-plugin

CumulusCore is the foundation plugin for building SaaS applications on October CMS, providing shared models, services, and backend components for multi-tenant setups, plans, subscriptions, and related core functionality. It is designed to be extended by Cumulus-based plugins and custom projects.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

initbiz/oc-cumuluscore-plugin is not a general-purpose Laravel package — it is an OctoberCMS plugin. It ships a PluginBase registration class, database migrations, Eloquent models, backend controllers/list-form configuration, and event/hook wiring that only executes inside OctoberCMS's plugin lifecycle. Architecturally it provides the tenancy and identity core of a SaaS scaffold: a Company (tenant) entity, membership/pivot records linking users to companies, invitations, roles, and plan-assignment hooks intended to pair with the companion oc-cumulus-plugin (subscriptions/billing). It depends on RainLab.User for authentication and user records.

This means the fit question is binary:

  • If our stack is OctoberCMS — reasonable fit. It gives us a pre-built multi-tenant domain model and backend UI that would otherwise take 3–6 weeks to design and build, and it aligns with October's conventions (behaviors, backend navigation, AJAX handlers).
  • If our stack is plain Laravel / Symfony / anything else — it does not fit as a dependency. Its value is purely as a reference design: the schema (companies, company–user pivots, invitations, plan linkage) and the tenancy workflow are readable and MIT-licensed, so we can lift the domain model without the October runtime.

Integration feasibility

Feasible but conditional on version compatibility. Installation is standard October marketplace/Composer, migrations are non-destructive, and the backend UI comes for free. The practical constraints:

  • Must match an OctoberCMS branch that this plugin targets (its active era is October v1.x/v2.x, PHP 7.x–8.1, Laravel 5.5–9). October v3+/Laravel 10+ support is the first thing to verify in composer.json and version.yaml.
  • Must pin a compatible RainLab.User version; that plugin moves independently and has had breaking model/API changes.
  • Migrations create namespaced tables (initbiz_cumuluscore_*), so collision risk is low, but they will not be re-run or reconciled for us.

Technical risk

  • Abandonment / version drift — high. 15 stars and a single-maintainer, low-activity repo. There is effectively no user base to surface bugs and no commercial support path. Assume we own the code the day we adopt it.
  • Tenant isolation — high. Multi-tenancy here is enforced at the model/application layer (company scoping applied by the developer), not at the database or query layer. Any query, job, or endpoint that forgets the scope can leak cross-tenant data. For a SaaS this is the single largest technical risk and must be independently hardened (global scopes, middleware, tests).
  • Invitation/email flow — medium. Token generation, expiry, resend, and email dispatch need review for security and for synchronous sends that should be queued.
  • Upgrade fragility — medium. October's plugin update mechanism can overwrite local patches unless we vendor-fork.
  • Test coverage — unknown/verify. Low-star plugins rarely ship a meaningful suite; budget for writing our own characterization tests before touching anything.

Key questions

  1. Which OctoberCMS version are we on (or planning), and does the plugin declare support for it?
  2. Is the target application actually an OctoberCMS backend, or would we be adopting October purely to get this plugin? (If the latter, the answer is no.)
  3. Is RainLab.User already our auth source of truth, or does it duplicate an existing IdP (SSO/OIDC)?
  4. Does our tenancy model match "user can belong to multiple companies with per-company roles," or do we need one-tenant-per-user / subdomain isolation?
  5. Is billing handled by the companion Cumulus plugin, or by Stripe/our own subscription service? If the latter, the plan hooks are dead weight and must be replaced.
  6. Who owns the fork, and what is our SLA for security patches?
  7. What is the data residency/compliance posture, and does a row-level tenancy model satisfy it?

Integration Approach

Stack fit

Acceptable only for an OctoberCMS application. Confirm the concrete matrix before committing: October branch ↔ Laravel ↔ PHP ↔ RainLab.User ↔ this plugin. Treat the plugin as a component to be vendored, not a floating dependency — commit it (or a fork) into plugins/initbiz/cumuluscore with a lockfile-pinned Composer graph so a marketplace update cannot silently change behavior.

Migration path

  • Adopting: spin up a clean October instance on the target version, install the plugin plus RainLab.User, run migrations on a scratch database, and smoke-test company creation, invitation acceptance, role assignment, and the plan hook. Two days, not two weeks.
  • Not adopting (more likely): use the plugin as a blueprint. Extract the schema and the state machine for invitations (invited → accepted → revoked → expired), re-implement as first-class Laravel models with an explicit Tenant scope, and discard the October controllers. This is the recommended path if we are not already committed to October.

Compatibility

Verify the plugin's declared version constraints against our lockfile, and check the last commit date against the Laravel/October releases that followed it. Confirm RainLab.User's current model extension points still match the plugin's extendUserModel-style hooks. Confirm migrations are idempotent enough for repeated local spins.

Sequencing

  1. Timeboxed spike (2–3 days) in a disposable October environment — establishes compatibility or kills the option cheaply.
  2. Threat-model the tenancy boundary; write failing tests for cross-tenant access before writing features.
  3. Fork and vendor; add CI (lint + migration up/down + tenancy tests); tag an internal version.
  4. Decide the billing seam: adopt oc-cumulus-plugin, or stub the plan hooks behind an interface for Stripe/our own service.
  5. Harden the invitation flow — queue emails, add expiry/revocation, rate-limit acceptance endpoints.
  6. Only then build product features on top.

Do not parallelize steps 1–3 with product work; the fork-and-harden step is where the real cost sits.

Operational Impact

Maintenance

The plugin itself is small (a few dozen files, a handful of migrations), so day-to-day maintenance is low. The compounding cost is the October platform — CMS major upgrades, marketplace churn, and a plugin that will not keep pace. Budget an owner and a recurring fork-sync/rebase task each October upgrade cycle. Without a named owner, this becomes an unpatched dependency within two quarters.

Support

Community forum and GitHub issues only; no vendor SLA. Practical escalation is "we read the source and patch it." That is acceptable if the team has October fluency and unacceptable if it does not — the fallback is contracting outside help, which erodes the cost argument for adopting it in the first place.

Scaling

The plugin adds negligible runtime overhead. The scaling limits are in the domain model, not the code: tenant-scoped queries need composite indexes on (company_id, user_id) and consistent scoping discipline; invitation and notification sends must move to the queue; and backend list controllers will need pagination tuning as company/user counts grow. For a multi-tenant SaaS, plan for a per-tenant index strategy and a periodic orphaned-invitation cleanup job.

Failure modes

  • October major upgrade → plugin boot errors or broken backend controllers (highest likelihood).
  • RainLab.User major version bump → model extension hooks break.
  • Missing tenant scope in new code → cross-tenant data exposure (highest severity, lowest detectability).
  • Marketplace update overwrites local patches → silent regression.
  • Synchronous invitation email in the request path → timeouts and duplicate sends under retry.
  • Unbounded invitations → table growth and stale-token security surface.

Mitigations: vendor-fork, tenancy tests in CI, disable marketplace auto-update for this plugin, queue all outbound mail, and add expiry sweeps.

Ramp-up

A mid-level Laravel developer with no October experience needs roughly 1–2 weeks to become productive in October's plugin conventions (backend controllers, list/form YAML, behaviors, events) before this plugin is even tractable. A developer with October experience needs a day or two to read it. Add product-level time on top: the tenancy decisions (one company per user vs. many, role granularity, seat semantics, invitation policy) are product decisions the plugin only hints at, and getting them wrong is far more expensive than the code.

Recommendation framing

Given the 15-star adoption signal, single-maintainer risk, and low opportunity score, treat this as a design reference, not a dependency — unless we are already committed to OctoberCMS, in which case a two-day spike followed by a vendor-fork and a tenancy-isolation hardening sprint is a defensible, bounded bet.

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.
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus