Try   HackMD

Reaching a nu phase in Nushell's development - The road from 0.82 to 1.0

Next week we release the 0.82 version of Nushell. Not only will it be our 65th public release but it also marks an important milestone for us on the development trajectory of nushell.

Nushell reached a much wider user base in the last few months. On GitHub, Nushell is now officially recognized for syntax highlighting and recently passed 25,000 stars. We are also actively thinking about how we want to move towards stabilization for our 1.0 release.

Thus, we want to use this opportunity to share our general thoughts and announce that we will be slightly slowing down our regular release schedule.

A four-week release schedule

As part of our road to 1.0, we will reduce our release cadence from every 3 weeks to every 4 weeks after the 0.82.0 release. The 0.83.0 release will thus be ready for you on the 25th of July 2023. While you may have to wait a little bit longer for new features or bug fixes, we hope that this will reduce the impact of planned breaking changes and provide more stability.

For our contributors, this change also has the benefit that the impact of our informal merge freeze period before the release will be lessened, and our maintainers will have a bit more time to work on the incoming improvements.

Nightly builds for the eager

If you think after this change, that Nushell is moving at a glacial pace, we luckily now have nightly builds for you to download that reflect the most recent state of development.

If building Nushell yourself was too burdensome so far, you now have to chance to try out upcoming features and provide your feedback.

Changes to contributor guidelines

Along with the four-week release schedule, we'll also be updating our contributor guidelines.

Our focus going forward will be getting Nushell to a high-quality 1.0, one that has a supported language that is reliable and backward-compatible, and a high-quality shell experience to match.

To this end, we'll no longer be accepting PRs that add new dependencies to Nushell. We'll also be much more strict about the new features that land in Nushell. This is to keep the focus on improving existing algorithms, removing technical debt, and fixing bugs.

How things went from 0.60 to 0.8x

Our last very public milestone was the release of the 0.60 version, which included a massive refactor of Nushell's internals that we skipped to it from the 0.44 release.

Apart from rewriting the engine, it included our own line editor reedline for added customization in the interactive experience.
This unlocked many improvements and opportunities for valuable experimentation.

Since 0.60 we achieved a much more mature system of modules and overlays that allow you to build more composable applications in Nu.

As part of this effort to strengthen the programming language chops of Nu, we also spent a lot of time finding the balance between our functional programming philosophy of pipelined data and mutation of variables to allow simple imperative patterns.

We also saw a few efforts that didn't pan out yet. For example, we tried to integrate the Polars dataframe engine directly into the grammar of Nushell commands, but this left many rough edges. Thus with version 0.76 we returned to a simpler dataframe integration to focus on getting the core nushell experience right.

This all provided valuable lessons in how we can decide which features are beginning to settle and where we need to focus our effort to get a consistent experience.

What we are working on right now

To commit to the stability promises, that come with the 1.0 release, we need to make sure we can uphold those guarantees. This means separating foundational things for everyone to rely on from all those cool features we still want to iterate on or are not yet happy with. With a smaller set of high-quality features with clear semantics it becomes much easier to make the leap towards stability.

We thus for example have recently begun to remove some less used or vaguely defined commands from the core set, that ships with Nushell. For the moment, they are still accessible through the --features extra when you build Nushell yourself, until we have decided on their final fate. This follows how we kept the dataframe commands behind the --features dataframe flag. Expect that more commands may move there or that their native implementation gets replaced by a version written in Nu itself.

In parallel very promising work has been ongoing with the community to develop a packaging strategy to share nushell code with an accompanying package management tool. Together with efforts to create an auto-formatter and improving the Nushell IDE integration leveraging the language server protocol (LSP), we hope the community can develop even more high-quality tools and libraries.

Apart from the ongoing development work and code improvements, we invested in discussions to develop a roadmap of features and goals that decide when the 1.0 release is ready. While those discussions inside the core team are not finalized yet, we want to open them to the wider community and share our directions on a regular basis.

What to expect: as a user

First of all, Nushell wouldn't have seen this growth in a little more than 4 years without all of you, the active users. Thank you! You have been helpful to fellow users on our Discord and in other forums, inspired the developers, and kept us honest through feedback. Over 1269 of you have contributed to the project by opening issues and reporting bugs.

Soon we will share a survey with all of you to learn more about your priorities for a stable and delightful Nushell experience.

While we can not yet commit to full stability, we think we can preserve the Nushell you all know and love, while we make the necessary breaking changes in the coming months to remove remaining warts.

What to expect: as a(n aspirational) contributor

At the time of writing this blog post over 494 people have influenced the direction of Nushell directly by contributing code or documentation.

Achieving stability will not be possible without all of you that have dedicated your time to fixing bugs and cutting through our large issue tracker.

We want to incorporate you in formulating the priorities for the 1.0 release by reaching out to folks interested in particular problems to get clearer roadmaps for specific areas. Those write-ups will hopefully also provide some inspiration for folks interested in helping out and pushing Nushell forward.

But setting our sights on reaching the stable 1.0 release will also impose some limitations on our development practices. We are now much less likely to accept new features, commands, or options as they need to work well together with the larger picture. A lot of effort will still need to go into cleaning up the internals and fixing bugs. As we want to systematically improve our binary size, compile times, and runtime performance, any external dependencies will also come under much more scrutiny.

How you can help out

As always helping out fellow users or picking up issues that are labeled with "good-first-issue" or "help-wanted" is greatly appreciated.

As our issue tracker has grown to over 800 entries (878 at the time of writing) help to clear this backlog will accelerate our path to 1.0.

You don't even have to fix a bug yourself to make a great contribution. Feel free to check your own old bug reports if they have been resolved already.

Adding context under which conditions a bug can be reproduced or if different feature requests are complimentary can also make life much easier for those that want to contribute a fix.

Last but not least feel free to spread the word about Nushell as we often received extremely insightful feedback from that.