winter/wn-system-module
Core system module for Winter CMS, providing the backend foundation, module management, update and migration tooling, settings, and shared services that power the platform and its plugins.
What this package actually is. winter/wn-system-module is the System core module of Winter CMS (the October CMS fork), published as a read-only split of the Winter monorepo. It is not a general-purpose library you composer require into an app. Its job is to bootstrap and govern a Winter installation: module service provider registration, the plugin manager and plugin base class, settings/preferences persistence, the asset pipeline (Mix-based combining/minification), the backend AJAX/widget scaffolding consumed by other modules, the update/version/migration manager, translation and mail wiring, and the winter:* console command surface.
Architecture fit. Fit is binary, not graded. It is a Laravel package in form (ServiceProvider, config, console commands, migrations) but it hard-depends on winter/storm — the October-derived foundation providing behaviors, extendable classes, the event emitter, and the DB/model conventions. Dropping it into a vanilla Laravel or Lumen app is not an integration, it is a port. The realistic fit is: (a) you are already running Winter and this arrives transitively via the core metapackage, or (b) you are building plugins/modules for Winter and consuming System's public APIs (PluginManager, SettingsManager, AssetManager, VersionManager, backend widget base classes).
Integration feasibility. High inside Winter, near-zero outside it. The practical rule: never require this package directly — require the Winter core project skeleton and let the split packages resolve as a matched set. The package's low star count and zero listed dependents are artifacts of the split-repo strategy, not quality signals, but they carry the same operational meaning: there is no independent consumer base, no independent changelog, and no independent release cadence to reason about.
Technical risk.
Key questions for the team.
Stack fit. Requires PHP 8.x with the usual Laravel extensions, a supported database (MySQL/MariaDB, PostgreSQL, SQLite), and Composer. Asset handling is Winter's own AssetManager/Mix pipeline, not Vite — teams arriving from modern Laravel should expect to learn it rather than swap it out. Verify exact PHP/Laravel ceilings against the composer.json of the specific Winter release you pin; do not infer them from this repo.
Migration path.
composer create-project), which pulls wn-system-module and siblings at compatible versions. Build functionality as plugins under plugins/, not by editing modules/.Compatibility. Three surfaces to validate before committing: (1) the plugin/theme ecosystem you need — check each dependency's Winter support explicitly, since many October plugins are stale; (2) asset and media handling, which is opinionated and file-system-coupled; (3) any existing SSO/auth or queue infrastructure, which must be reconciled with Winter's backend auth and its own queue/mail conventions.
Sequencing.
winter:install, winter:update, winter:cache end to end.Maintenance. Upstream-driven. You inherit Winter's release cadence, security posture, and deprecation decisions. The split repo gives you no independent lever, so maintenance effort concentrates in two places: keeping the pinned version current, and keeping local forks small if you make any. Budget roughly a recurring upgrade window per quarter plus a security-watch rotation.
Support. Community channels (GitHub, Discord) with no SLA. Commercial support exists only via Winter partners. Plan for in-house ownership of the framework layer — at least one engineer who can read Storm internals, not just Laravel.
Scaling. System is rarely the throughput bottleneck; it is boot, settings, plugin registry, and asset combining. Watch for: plugin-manager boot cost as plugin count grows; file-based caches under storage/ needing write access and invalidation discipline on every deploy; combined-asset cache staleness after releases; DB-backed settings/preferences reads on cold boot. Horizontal scaling is fine provided storage/ is shared or baked into the image and the cache is cleared as part of the release step, not manually.
Failure modes to instrument.
winter:update interrupted mid-migration → partially applied schema; mitigate with DB snapshot before update and a dry run in staging.composer.json rather than relying on the marketplace.APP_KEY, asset URL, mail/queue) surfacing as opaque runtime errors; enforce config parity checks in CI.Ramp-up. A Laravel-fluent engineer needs roughly one to two sprints to be productive: backend controller YAML configuration, the AJAX framework, plugin registration and settings pages, Storm behaviors and extendable classes, and the winter:* command set. Add extra time if the team has no October lineage. The hidden cost is not learning the APIs — it is learning which parts are stable public surface versus internal plumbing that upstream may move.
How can I help you explore Laravel packages today?