2021 - what an interesting year that was! While a global pandemic taught the entire real world a new way of life, the world of technology kept pushing along and kicking goals.
It was also the year of the birth of Winter CMS.
We certainly did not have the most auspicious start, being born out of a conflict that took the entire Winter maintainence team completely by surprise. However, it most certainly galvanised the team to regroup, reassess and work out what makes Winter CMS the best content management system available for the PHP ecosystem.
The progress has been somewhat slow, but steady. While some major life changes have occurred in the maintainer team; with new homes, new family members, and new jobs certainly having an effect on the speed of the project - a part of it can also be attributed to the belief that Winter is one of the most stable, feature-rich platforms on the web. Thus a great deal of the work that took place over this past year was creating and stabilising the foundation behind-the-scenes and laying the groundwork for great things to come to fruition in this upcoming year.
That's not to say that we focused only on that this year. Let's take a look at what we were able to achieve in over the past year...
Releases and statistics
Winter achieved 12 new releases over the course of the past year - 1 major release for the 1.2 branch, 7 releases for the 1.1 branch and 4 security releases for 1.0 branch. See https://wintercms.com/releases for more details.
In total, this represents over 1,000 commits from over 50 different contributors, totalling over 130,000 lines of changes across the Winter platform and Storm library.
In the past year, Winter has been able to attain over 54,000 installs through Composer and ~1,000 stars on GitHub. The Discord channel, started shortly after the fork from October CMS occurred, now stands at an impressive 833 member count, with heaps of healthy discussion happening frequently throughout the year.
One of the biggest tenets of Winter is "community" - we want to involve the community every step of the way if the Winter story, and the great news is that the numbers show that the community has rallied together behind this goal, regardless of the loss of the established name and pedigree of our former project.
We give our thanks to each and every one of you that downloads and uses Winter, or submits issues and pull requests to Winter and our first-party plugins, or gets involved in discussions and gets our name out there. You have our heartfelt gratitude for a big year!
New website, improved documentation
Having to start again from the ground-up on our marketing offered us the chance to give online presence and documentation a much needed facelift. So one of the first goals we aimed for was to develop the website that you are now reading this article from, to establish our name and brand and get the word out.
The new website emphasised the huge amount of benefits of using Winter for your projects, with clear advantages for designers, developers and clients alike. It allowed us the chance to promote the goals that we wanted everyone to know, and to that end, we believe it has been a resounding success.
A particular thorn in our side from the former framework was that the documentation frequently fell behind the actual development. With the new website, the documentation is now updated immediately after changes are made to the documentation repository, allowing the community to propose changes to the documentation and see the fruits of their labour almost immediately. This proved useful as we made several important updates to the documentation over the course of the year, including reformatting sections of the documentation, adding a high level overview of Winter's architecture & overall design, implementing a robust search solution, documenting some previously undocumented features and functionality in Winter and, with the help of community members, improving translation support and wording.
Our release changelog got extra attention to provide the information that developers would want to know when upgrading their projects. Gone are the one-line update notes - now you get the entire picture of what each new release brings to the table along with links that take you directly to the changes between each version.
Composing the perfect introduction
Our web based installation method got special attention this year. Serving as the first impression for many users of Winter, we realised very early on that we needed to rewrite our installer to give the best possible introduction to Winter in the world of the modern web.
The Winter team has been very interested in pursuing the world of Vue for front-end functionality and user interface design, like our foundation framework Laravel before us, so we decided to write the new web installer like a web app. The new interface is sleek, guides you through the entire process while keeping things simple, asking only for the minimum amount of input in order to get your new Winter installation off the ground.
One particular aspect of the new Installer is, in our opinion, a game changer. Traditionally, as with our former project, using the web installer required a pregenerated "build" of the CMS to be delivered and used for the new installation. This build contained all the files to get the CMS running, including all the dependencies that one would get if they use Composer, similar to other CMS platforms like WordPress. While this worked for a time, we wanted consistency - how could we get the web installer to give the power of Composer to manage and install dependencies, but still allow it to be usable in the web and not through the command-line?
Enter Packager, a new library by the Winter team that harnesses the power of Composer, but runs entirely within a PHP application, even over the web. With the Packager library, we can download and install all dependencies with the web installer, even on shared or strictly-controlled hosts that may not provide command-line access to their users.
Shared-hosting users also can install Winter CMS through Softaculous, which is generally available on most cPanel hosting service providers, providing an even simpler way of installing Winter CMS on these platforms, with a minimum of fuss.
Empowering developer productivity
Winter CMS is very focused on providing the best developer experience (and thus overall productivity). As such, we spent a significant amount of time improving existing and building new developer-focused features that are designed to make building projects on Winter even faster and easier than ever before.
Just some of the enhancements we've made over the past year to the Developer Experience include the following:
Backend User Experience
- A new Backend Skin based on Tailwind UI that modernizes the backend experience
- A new ColorPicker FormWidget
- Improved User Impersonation logic & a global notice in the backend when you are impersonating a user's account
- The Winter.Notes plugin to make it easy to add custom notes to any records managed in the backend.
- Forked the Winter.Redirect plugin from the original VDLP.Redirect plugin maintaining it as a first party plugin for Winter.
- FontAwesome has been updated from v4 to v6 adding thousands of icons.
- The Winter.Docs for having immediate access to the Winter CMS documentation directly inside of your Winter projects with plans to support plugin & theme provided documentation "manuals" with a permission based access system to make it easy to manage all of the documentation for your entire project in one convenient to access place!
- The official VS Code extension that provides code completion and syntax highlighting specific to Winter CMS projects.
- Snowboard.js, a vanilla JS rewrite of our AJAX framework written in modern JS (no more jQuery!).
- Built in support for Laravel Mix enabling modern asset compilation workflows.
- Support for scaffolding TailwindCSS based themes using Laravel Mix with the
- The Winter.Search plugin for quickly and easily adding searching capabilities to your websites.
- The Plugin Replacement feature that makes it easy to safely fork and customize existing plugins without losing access to the functionality provided by plugins that extend the original.
- The PluginManager was refactored to use a flagging system to precisely control when and why a plugin is enabled or disabled, even down to programmatically disabling plugins on a per request basis.
- Several improvements designed to make it easier to run Winter on serverless platforms like Laravel Vapor
- Support for Laravel 9, Symfony 6, PHP 8.1 with a simplified migration process
- Revitalized the Assetic library for the entire PHP community to use which has now gathered over 200,000 installs
- The Winter.Matomo plugin for integrating with the open source analytics platform, Matomo.
- The Awesome WinterCMS repo for keeping track of what packages are available out there for use in Winter CMS while we get the marketplace ready to use
winter:testcommand that makes it easy to start testing your plugins
- Several improvements to our automated testing suite (we even now have static analysis running against the Winter core on every PR & push to the codebase)
winterCLI tool that amps up developer productivity
- Support for auto completion in CLI commands as well as an easy to use interface for adding it to your own commands.
A year of iteration
We have made numerous improvements to Winter CMS over our first year of existence while also working on the foundations behind-the-scenes - all in the name of keeping the codebase stable. See the v1.2 Release Note for a more complete list of the many changes and improvements that we have been working hard to deliver to our community.
We look forward to what the next year of Winter looks like and hope you do too! Take a look at our Roadmap to get an idea of just some of the awesome things we have on the go and planned for development later this year.