anomaly/appearance-module
Appearance module for the Anomaly CMS on Laravel. Adds theme and layout management so you can switch looks and customize your site's front end through a modular addon built for the Anomaly streams platform.
What it actually is. anomaly/appearance-module is not a general-purpose Laravel theming library. It is an addon for the Anomaly Streams Platform (the PyroCMS lineage) that supplies the control-panel "Appearance" area — the admin UI and service layer for editing theme layouts, partials, and assets in place.
Architecture fit. The module assumes it is being loaded by the Streams addon kernel: an AddonServiceProvider subclass, Streams' route/asset/view registration, and admin screens composed from Streams' form and table builders. There is no standalone service provider contract, no publishable config, and no Blade-level API. In a vanilla Laravel application it is inert — it will not boot, and its admin routes have no host to attach to.
Integration feasibility. Composer-installable in principle, but only inside a matching Streams installation. It carries a hard transitive dependency on anomaly/streams-platform and anomaly/theme-module, plus anomaly/users-module for the auth gating that makes the editor safe. On a modern Laravel (10/11) codebase, expect an unresolvable constraint conflict before you get to a first boot.
Technical risk. Four concerns dominate:
pyrocms/* upstream, which strongly suggests this package is a legacy alias rather than an actively maintained line.Key questions to resolve before committing:
Stack fit. Binary: Streams/PyroCMS yes, everything else no. Do not attempt to graft it onto a standard Laravel app — the effort to stand up Streams purely to host this module exceeds the effort to build the feature.
Three paths, ranked:
composer require anomaly/appearance-module, register the addon, ensure the theme directory is writable by the web user, seed the admin permission. Roughly 1–2 days including verification. Low cost, but inherits all the maintenance risk above.laravel-theme / themes/*) or a simple config-driven view namespace, and theme customization via a DB-backed theme_settings table rendered into a cached CSS variable sheet or named Blade slots. If raw template editing is truly mandated, wrap a maintained file manager behind a policy gate and an allowlisted directory, and log every write. This is 1–3 weeks of work and produces something the team can actually own.Compatibility checks. Verify the composer constraint matrix against our PHP and Laravel versions first — this is the usual fail-fast point. Check whether the module ships migrations (it largely does not, which simplifies rollback) and whether its assets are published or served from the package.
Sequencing. (1) Confirm stack and version matrix; (2) timeboxed spike in a throwaway Streams instance — half a day; (3) security review of every file-write path; (4) make the build-vs-adopt call; (5) if adopted, pin an exact version, vendor-fork it, and gate the feature behind a flag and an explicit permission; (6) if rebuilt, ship the settings-backed version first and defer raw editing until there is a demonstrated need.
Maintenance. Effectively self-maintained. With 1 star and 0 dependents there is no community patch pipeline to lean on — budget for a fork on day one, and treat any upstream commit as untrusted until reviewed. PHP and Laravel major upgrades will require manual porting, likely by someone reading Streams internals.
Support. No vendor, no SLA, sparse documentation. Internal knowledge will concentrate in whoever does the spike, which is a bus-factor risk worth naming explicitly.
Scaling. Throughput is a non-issue — theme editing is a low-QPS admin activity. The real scaling concern is cache coherency: an edit must bust view and asset caches, and on multi-node deployments a local filesystem write shows up on exactly one node. This requires shared storage for the theme directory or a deploy-time sync hook, plus explicit cache invalidation. Containerized environments with read-only root filesystems will fail outright unless the theme path is a mounted volume.
Failure modes to plan for:
Ramp-up. A Laravel developer can operate the module in under a day. Owning it means absorbing Streams addon conventions — provider lifecycle, asset registration, admin form builders — realistically 1–2 weeks with thin public material to learn from. Weigh that against the 1–3 weeks for path C, which leaves the team with skills that transfer to the rest of the codebase.
How can I help you explore Laravel packages today?