Ballerina is a comprehensive language that is easy to grasp for anyone with prior programming experience. Let's start learning Ballerina.

Get started with integration

Get started

Install Ballerina, set it all up, and take it for a spin.

Pre-built integrations

Explore and try out a series of guided integration examples.

Enterprise integration patterns

Usage patterns for implementing robust integrations.

Integration tutorials

Explore and try out a series of guided integration tutorials.

Supported data formats

List of data formats supported by Ballerina.

Supported network integration protocols

List of network integration protocols supported by Ballerina.

Integration tools

OpenAPI tool

Generate a Ballerina service and client skeletons for an OpenAPI contract.

GraphQL tool

Generate GraphQL service skeleton for a given GraphQL schema and generate schema for a given Ballerina GraphQL service.

AsyncAPI tool

Generate a Ballerina service and listener skeletons for an AsyncAPI contract.

gRPC tool

Develop a service documented in a Protocol Buffers by generating Ballerina service/client stub files and skeletons.

Health tool (FHIR/HL7)

FHIR/HL7 profile to client and stub generation tool of Ballerina.

EDI tool

The set of command line tools provided to work with EDI files in Ballerina.


Ballerina by Example

Explore and try out a series of guided Ballerina examples.

Ballerina API Docs

Refer to the Ballerina library (API) documentation.

Ballerina specifications

Refer to the language, library, and platform specifications.

Visual Studio Code extension

Features of the Ballerina Visual Studio Code extension.

Development tutorials

Build and run

CLI commands

CLI commands of the bal tool.

Update tool

Maintain your Ballerina installation up to date with the latest patch and minor releases.

Ballerina Shell

Details of the Read-Evaluate-Print Loop (REPL) for Ballerina.

Organize source code and dependencies

Organize Ballerina code

Basics of projects, packages, and modules.

Package references

References related to Ballerina packages.

Manage dependencies

Declare and manage dependencies and use the local repository.

Style guide

Best practices to follow when formatting Ballerina code.

Customize formatting

Provide custom formatting options to Ballerina formatter.

Test, debug, and document the code

Test Ballerina code

Write automated tests using the built-in test framework.

Debug Ballerina programs

Tooling support for troubleshooting Ballerina applications.

Document Ballerina code

Generate documentation for the code.

Persistently store data

Bal persist overview

How to simplify data persistence with bal persist.

Data model

How to model and define data structures for efficient data persistence.

CLI tool

How to use the tool for generating client code and types for the data model.

Type-safe client API

Generated client, types, and their usages for managing data persistence.

Supported data stores

Data stores for managing data persistence.

Run in the cloud

Code to cloud deployment

Generate cloud deployment artifacts.

Azure Function

Expose Ballerina functions as serverless functions in the Azure Functions platform.

AWS Lambda

Write AWS Lambda-compatible packages.


Configure a sample Ballerina service

Configure values at runtime through configurable module-level variables.

Provide values to configurable variables

Provide configurable values through configuration files, command-line arguments, and environment variables.

Configure values

Advanced use cases of configuring values using configurable variables.


Observe Ballerina programs

Basics of the observability functionalities that are provided for Ballerina programs.

Observe logs

How Ballerina supports observing logs of Ballerina programs.

Observe metrics

How Ballerina supports observing metrics of Ballerina programs.

Observe tracing

How Ballerina supports observing tracing of Ballerina programs.

Java interoperability

Call Java code from Ballerina

Call existing Java code from Ballerina.

The BindGen tool

The CLI tool that generates Ballerina bindings for Java classes.

Ballerina FFI

List of language features that enable Ballerina developers to call foreign code written in other programming languages.

Build native binaries with GraalVM

GraalVM executable overview

The overview of GraalVM and the native executable.

Build the GraalVM executable in a container

Build and pack the GraalVM executable in a container.

Build the GraalVM executable locally

Build the GraalVM executable locally from Ballerina.

Reuse code with Ballerina Central

Publish packages to Ballerina Central

Publish your library package to Ballerina Central.

Configure a network proxy

Perform operations with the Ballerina Central over an HTTP proxy.

Troubleshoot the runtime

Strand dump tool

Dump the status of currently running strands.

Ballerina Profiler (experimental)

Profile a Ballerina package and create a flame graph.


Write a RESTful API with Ballerina

Use Ballerina constructs to create RESTful APIs.

Write a gRPC service with Ballerina

Write and invoke a simple Ballerina gRPC service.

Manage data persistence with bal persist

Use bal persist to simplify data persistence management.

Write a GraphQL API with Ballerina

Write and invoke a simple Ballerina GraphQL service.

Work with data using queries in Ballerina

Use query expressions to work with data.

Build a data service in Ballerina

Use Ballerina constructs to work with data services.

Deploy Ballerina on Kubernetes

Write, build, and deploy a Ballerina service on Kubernetes.

Learn the language

Language basics

Get started with basics that are common to all C-Family programming languages.

Network interaction

Provide and consume services using Ballerina.


Work with data using Ballerina.


How concurrency and transactions are handled in Ballerina.

Advanced general-purpose language features

Advanced features, which are additional options for the language.