Solidus is my favourite platform for building custom eCommerce websites. I’ve worked moving stores to and from a variety of platforms and still think it’s the most adaptable platform out there. It’s adaptability comes from both its own design, as well as the features of both Rails and Ruby.
As a Rails engine, Solidus is essentially a whole Rails application that you can drop into your existing application to add eCommerce functionality. Out of the box, it provides a digital storefront, full admin interface for managing it, and a web API.
When you work on a Solidus app, you’re adding new functionality like you would with any other Rails app, but you’re also able to modify, extend, and override the functionality coming from Solidus. This is what makes Solidus unique among eCommerce platforms.
Let’s explore the different aspects of Solidus that allow for its unparalleled customizability.
Overriding views and partials
If a Rails engine provides a view or partial, you can override it by placing a view at the same location in your app. For example, if Solidus provides app/views/spree/frontend/orders/edit.html.erb
, you can put a new view at the same location inside your app and it will take precedence.
Stores that use Solidus can easily override any of the frontend templates provided by the platform. This makes the presentation layer totally customizable.
Deface
Deface is both a blessing and a curse. It allows you to use a simple DSL to modify templates at run time. You can arbitrarily replace and augment any partial rendered by your Rails app. This is often very useful, but difficult to maintain, as changes to the upstream templates can break your Deface overrides.
Under the hood, Deface converts ERB templates to pure XML, applies your transformations, then converts them back to ERB. It’s kind of horrifying that it works at all, never mind works as well as it does.
While it’s mostly only useful for augmenting Solidus’ admin interface, it ends up being a lightweight and reliable way to make small modifications to existing templates without taking on the maintenance burden of copying the entire template into your codebase.
"Overrides"
Ruby is extremely dynamic. You can modify classes at run time in nearly any way you can think of. Rails advocates for taking advantage of this to modify functionality provided by engines. Using this approach, you can add, remove, or replace methods on any class provided by Solidus. The documentation calls these “overrides”.
With most other eCommerce platforms you’re primarily building on top of the platform, trying to shoehorn your custom functionality around the platform’s limitations. Solidus isn’t limited in this way; overrides allow you to build within the platform, customizing it to fit your organization’s needs.
This aspect of Solidus gives it most of its power. Solidus can be changed in nearly any way. Yes, some modifications will be more difficult than others, and some might be totally impractical, but if your feature is possible, then it’s possible on Solidus.
Extension points
All of the customization strategies above are great, but are quite invasive. You can override parts of the system that aren’t strictly meant to be overridden, like private methods. It can be useful, but you should only do it when it’s necessary.
Solidus provides extension points for customizing behaviour that is meant to customized. The core state machines that govern the flow of orders, many parts of the shipping system, parts of the promotion system, and many other subsystems can be augmented and modified by configuring Solidus in officially supported ways.
These extension points allow stores to modify core parts of Solidus to match how their organization actually works. You can conform your software to your business, rather than restrict your business to what your software can do.
Solidus Starter Frontend
Solidus Starter Frontend is a huge step forward for Solidus. I won’t get into the weeds here, but it addresses the biggest issues that held the legacy frontend back. Don’t get me wrong; lots of successful stores have been built on the legacy frontend, but we were unable to make changes to the legacy frontend that the whole community could benefit from.
Starter Frontend solves this by generate the frontend inside the host application. Stores then own that code going forward and can modify it as they see fit. This leaves the community able to continue improving the starting point for future stores without being held back by maintaining compatibility with existing ones. It might sound like we’re giving something up here, but we’re not. That’s a topic for a future blog post, though.
Because invidividual stores own the whole storefront, you can change anything. You can route pages differently. You remove pages altogether. There’s no limit to how you can customize or optimize the storefront.
Solidus Admin
While still in beta at the time of this writing, the new Solidus Admin represents another big step forward for Solidus’s extensibility. The legacy admin interface was reasonably extensible, but the new one is built with customizability and reusability as a primary goal.
It ships with a variety of flexible view components that can be arranged and configured to suit your particiular needs. I’ve been able to build out a custom store management interfaces for our clients with shockingly few lines of code. It allows stores to build out custom management interfaces quickly and easily take advantage of the new features like bulk actions.
It’s all about customization
As you can see, Solidus’s customizability isn’t a single feature. It comes from the Ruby language’s dynamic nature. It comes from Rails’ support for different kinds of overrides. It comes from Solidus’s own design and the tools we build for the platform. Customizability is core to Solidus’s identity.
While other platforms ossify as they become more established, Solidus continues to become more flexible. Even our maintenance strategies lend to this. On the core team, our commitment to avoiding breaking changes continues to lead to the introduction of new extension points.
Solidus is the most customizable eCommerce framework out there. If you’re interested in powering up your eCommerce capabilities, give Super Good a shout.