In the early days of the pandemic our team got together to discuss Lando. Specifically, we wanted to figure out:
- What are Lando's biggest strengths?
- What are Lando's biggest weaknesses?
- Knowing what we know now, how would we redesign Lando if we could start from scratch?
In a rare and perhaps surprising moment of collective Zen and Oneness for opinionated engineers, there wasn't a lot of debate, at least on a high level, about the answers to these questions.
- Lando's biggest strength is its amazing community.
- Lando's biggest weakness has been making it hard for that community to contribute.
- Lando should be an ecosystem, not a monorepo.
Armed with this guiding trio of answers we started work on moving Lando into its bright new future. However, as is often the case, those ideals immediately clashed with the Desert of the Real as we realized getting to Lando-as-an-ecosystem would be a huge challenge.
Also, dishearteningly, we knew it would be a while before we could start telling people our plans because honestly we weren't even sure we could pull the whole thing off.
Fast-forward to now and WE CAN DO IT, so let's dive into where we are now and where we want to end up by the end of 2023.
Where are we now?
Alec's 2022 Year in Review gives a more detailed answer to the where are we now? question so I will just bullet point the key findings here:
LANDO IS NOW FULLY DECOUPLED
If you check out the Lando organization on GitHub or the main
lando/lando repo you'll see that Lando itself is now made up of 70 separate and self-contained smaller repos for it's installer, CLI, core libraries, plugins, docs and other utilities.
It's hard to describe how difficult it was to take Lando apart and then, while people were simultaneously using it, put it back together without them noticing. But, if you've been using Lando 3.8.0 or above then 🎉 you've been running on a progressively decoupled version of Lando!
There is an old Klingon Proverb:
If you want to go fast, go alone. If you want to go far, go together.
While the proverb sounds better in the original Klingon, it's apropos of our move from Lando 3 to Lando 4. With the completion of this GREAT DECOUPLING we've laid a foundation so that we can go far together, far into the future.
LANDO 4 DEVELOPMENT HAS BEGUN
Since Lando now has a more modular architecture it's been possible to start work on what we've collectively called "Lando 4".
While we still don't have everything 100% figured out for Lando 4 we do know that it is actually three separate "Version 4" implementations:
The V4 Runtime: This is the part we've already started work on over at
lando/core-next. It contains the core libraries that power Lando and its plugins. We've already updated the current Lando V3 CLI to be able to use the Lando V4 runtime so that users can get new V4 features without having to wait for either the V4 CLI or V4 Landofile format.
The V4 CLI: Once the V4 Runtime hits beta we will also introduce a new V4 CLI. This will be based on the OCLIF framework and should allow us to solve some lingering CLI usability problems. In addition we will be able to sunset a bunch of current Lando CLI code in favor of a well-used standard.
The V4 Landofile: The final piece of "Lando 4" will be the introduction of a new Landofile format. This will allow us to keep the current format stable as we introduce a new syntax that can take advantage of new and powerful V4 runtime features.
Where are we going? THE HIGH LEVEL
So now that you have a decent sense of where we are and how we got here you might be wondering: what is the roadmap for 2023? ON A HIGH LEVEL the roadmap can be broken into three buckets:
Once we release the first "usable" version of the V4 runtime we will be looking to bring more contributors into the Lando fold. Specifically, we'd love for people to:
- Help us upgrade the current set of plugins to be V4 compatible.
- Help write new plugins for the V4 ecosystem.
- Take ownership over existing "official" plugins like the Drupal recipe or PHP service.
Ideally we'd love to end 2023 with our current Lando team maintaining "core" Lando, a group of 10-20 people maintaining "official" Lando plugins, and as many people as possible contributing new plugins to the Lando ecosystem.
2. Lando 4
At this point you're probably curious about what kinds of features and improvements are coming with Lando 4. Here are the BIG TICKET ITEMS.
Lando 4 moves to a swappable component-based architecture. This means that almost every part of Lando 4, even core pieces, will now be well-defined, customizable, and configurable.
Want to write support for
podman instead of Docker? Kubernetes instead of Docker Compose? Customize the CLI message output? Store Lando caches in
Lando 4 will utilize a distributed plugin based ecosystem powered by
hyperdrive, which will be sort-of-like the
npm of Lando. Each app can now define its own plugins, dependencies and "core components".
For example, one app may use Docker Desktop and an older version of the
php plugin while another uses Docker Colima and the most recent version of the
php plugin. An app you use with an enterprise client may have "corporate" language enabled while a personal project may use our typical "irreverent pop-culture reference" dictionary.
3. Build Engine
Under the hood the current V3 version of Lando builds Docker Compose files to do most of its magic. This got us pretty far, but had it own set of limitations.
V4 will take this a step further and generate Dockerfiles for each of your services as well. This may not sound like a big deal, but it will allow us to:
- Cache build steps and make
lando rebuildEXTREMELY fast
- Support more-or-less any "base" image: no more waiting for "Lando to add support" for VERSION X of THING Y
- Support your custom image/allow you to extend the images you use in production so they work in development as well
- Sync local user ownership better: containers and their services will always run "as you" instead of "pretending to"
- Build more powerful Landofile configurations: think "list of php extensions I want to install" vs custom build steps
4. Official Docker images/Apple Silicon support
Right now Lando uses a bunch of Bitnami images which are great but do not support
arm64 eg Apple Silicon.
Lando 4 will rebase all its services on the official Docker images meaning Lando 4 will provide native support for
arm64 based computers like those running on Apple Silicon.
5. Run it anywhere
Development has changed a lot since our first version of Lando and its going to change even more in the next five years.
Lando 4 will be designed to easily run in CI environments like GitHub Actions and for remote development on your VDI or server you're forced to use at work.
6. Speed and usability
Finally, the above improvements will make Lando significantly faster and more powerful than it is today.
Lando 4 Timeline
The goal is to make Lando at least an order or magnitude better.
Our current, we hope mostly realistic, release schedule for Lando 4 is roughly:
SPRING - Release
4.0.0-alpha.1 of the V4 runtime. The goal here will be that you can run your existing apps using the new runtime and they more-or-less behave the same way as they do now.
SUMMER - Release
4.0.0-beta.1 of the V4 runtime. The goal here will be that you can run your existing apps using the new runtime and they take advantage of all the new V4 features.
FALL - Release
4.0.0-beta.1 of the V4 CLI. The goal here is to introduce a new CLI to address usability issues with our current one.
WINTER - Release
4.0.0-beta.1 of the V4 Landofile format. The goal here is to introduce a new Landofile format that taps into the full power of the new runtime by exposing some of its best features easily and through config.
2024 - All three pieces of Lando 4, the runtime, CLI and Landofile format have release candidates.
3. Teams, Enterprise and Strategic Partnerships
One of the most illuminating things we've done over the last few years is work directly with large agency teams, Fortune 500 companies and hosting/WebOps companies. It's given us a real sense of the kinds of things larger institutions need from Lando.
This is why Lando 4 will include various security, compliance and whitelabeling improvements to better accomodate our friends operating at scale. It's also why we will be launching our "Lando for Enterprise" and "Lando Partnerships" programs later this year.
Where are we going? THE NITTY-GRITTY
Ok, so the high level sounds totally cool but what does that mean in real and specific terms? What kinds of things should users expect this year?
Here is a non-exhaustive list of very specific things that users can expect this year ordered in decreasing probability of likelihood.
- Weekly contributor meetings
lando rebuildthat caches build steps for FAST FAST FAST rebuilds
- Native support for
lando updatecommand that will update your plugins to their latest versions
Dockerfilebuild system that allows for more powerful build steps
- Better usabilty when Lando is "waiting for services to be ready": think a CLI table with real time status updates of all your services
- A weekly Friday webinar/office hours to showcase new features and answer questions
- Improved developer documentation, guides and YouTube videos
- A "Lando for Enterprise" program for users with complex infrastructure needs and high security/compliance requirements
- An update of all our current plugins to support their most recent versions
- A new OCLIF based CLI
- A new Landofile V4 format
- SSH key agent forwarding support
- Better support for alternate SSL certs especially in remote environments
- A weekly(?) "Lando After Dark" Twitch stream where @pirog drinks Miller High Life and works on the most pressing Lando issues LIVE!
- Support for Docker Compose V2 and Docker Colima
- Additional "Language Modes" like "Corporate" or "Pirate"
- Support for "lando tooling" composition and chaining eg be able to reference one lando tooling command in another
- A framework for
lando quickstartto easily get running with a new project
lando initbeing broken up into separate
- Landofiles that can
- Support for
podmanas a Docker replacement
- Support for environment variable usage in Landofiles
- Support for multiple "databases" in a single service
- Support for upgrading databases or changing their database creds without a