01 February 2022

Announcing Ballerina 2201.0.0 (Swan Lake)

Ballerina Team

Today we are thrilled to announce the much-anticipated General Availability (GA) of Ballerina 2201.0.0 (Swan Lake)!

With a focus on enterprise integration, Ballerina has been designed to easily create network services, and real-world, cloud native applications. Swan Lake adds a new set of substantial language features and platform tools to produce programs that handle network interactions, data, and concurrency straightforwardly, and are easy to maintain.

A lot has changed since we released Ballerina 1.0 in 2019, especially over the past year. Right after 1.0, we started incorporating key integration features such as transactions, querying, streams, table support, database integration, and XML and JSON support into the language. And while this was going well, we realized that we needed to make some fundamental changes to the foundation of the language to improve it for production. We wanted to make Ballerina a great fit for the needs of the cloud. We knew that making those changes affected our existing users, but also that it was a worthy aim to pursue because the long-term benefits of the potential platform for Ballerina users far outweighed the short-term costs.

So, Ballerina went through a major overhaul. The end result is Swan Lake, the first version of Ballerina that is ready for prime time! Fundamentally, Swan Lake is a commitment to stability—Ballerina has matured, and core aspects of the language will be steady for a long time.

Since Beta1, we have closely engaged with our community, gathering valuable feedback from various channels to help us add and enrich various capabilities towards GA. Over the past few months post Beta1, we released several beta versions of Swan Lake, the most recent being Beta6. Most of our recent efforts focused on fixing bugs, making many usability improvements, and improving documentation. Likewise, the GA release also contains more improvements that are expected to improve how Ballerina feels in practice.

Changes and additions

We talked about all the important features and improvements brought to you by Ballerina Swan Lake when we announced Beta1 in June.

To recap, in terms of significant language improvements (among many others), we explained how Ballerina services were redesigned to support data-oriented protocols, such as HTTP and GraphQL, and RPC-style protocols, such as gRPC, in a first-class way. Services became service objects that work uniformly with client objects. Service objects can now have both remote methods, which support RPC-style protocols, and resource methods, which support data-oriented protocols such as HTTP and GraphQL. Now objects work more familiarly and ergonomically due to the introduction of class definitions. A revised table type was introduced along with a significantly enhanced integrated query language for iterable structures. We also significantly improved the way we handle errors and redesigned language support for transactions.

The Ballerina Visual Studio Code extension was revamped for a better editing experience. Swan Lake now brings you a new low-code editing experience with our new VS Code plugin, which will allow users to edit Ballerina programs graphically and textually. The Ballerina VS Code extension also comes with new and improved debugging capabilities and support for expression evaluation.

Moreover, we introduced packages and improved Ballerina package builds. The Ballerina Central UI was refreshed to support packages and to enhance user experience. We redesigned the Ballerina standard library APIs by leveraging the latest language features. Library modules that support RESTful-style network protocols were improved with resource methods, and modules that support RPC-style protocols were improved with remote methods.

We further simplified the development and deployment of Ballerina code in the cloud with code-to-cloud features. We also introduced bal shell, an interactive command-line tool that allows you to rapidly learn and prototype Ballerina code. We made improvements to dependency management by making some changes to build commands and packaging.

With Swan Lake GA, we have revamped our website too. Our learn tab contains brand new content, including comprehensive guides to the language. The section now has an optimized structure for an easier learning and reference experience, with pages being categorized under headings such as getting started, guides, and reference material.

Our community page got a makeover to make it easier to find information easily, particularly on events and contributed content. Additionally, we have simplified ways to allow community members to submit content, report issues, seek help, subscribe to our newsletter, and help us grow.

What’s next

Ballerina won’t stop evolving. We’ll continue to update and patch Swan Lake on a regular, frequent basis. Its stability will remain our priority, which means that we’ll ensure upgrading Ballerina is painless for you.

Furthermore, we will work on implementing nBallerina, which will be Ballerina’s compiler written in Ballerina and will enable cross-compilation to native binaries via LLVM. More on this in a future blog post.

We are grateful to our community

As we celebrate this monumental milestone, we want to thank everyone in the community for your support in making Ballerina what it is today. We look forward to your continued contribution to get closer to our goal in making Ballerina the #1 programming language for microservices and integrations.

Happy coding!

Cheers, The Ballerina Team

To see all changes included in Swan Lake, please see the following release notes: Beta1, Beta2, Beta3, Beta4, Beta5, Beta6, and GA.

Follow us on Twitter for the latest updates.

In the creation of Ballerina, we were inspired by many technologies. Thank you to all that have come before us (and forgive us if we missed one): Java, Go, C, C++, D, Rust, Haskell, Kotlin, Dart, TypeScript, JavaScript, Python, Perl, Flow, Swift, Elm, RelaxNG, NPM, Crates, Maven, Gradle, Kubernetes, Docker, Envoy, Markdown, GitHub, and WSO2.