Fork me on GitHub


[ Fluent OpenStack client for Java ]

Learn JavaDoc Install

Take Control of Your Cloud
OpenStack4j is an open source OpenStack client which allows provisioning and control of an OpenStack system. This includes support for Identity, Compute, Image, Block Storage, Telemetry, Orchestration and Network using Java. The library and has been broken out into several major API abstractions:


The Identity (Keystone) service provides the central directory of users, tenants, service endpoints and authorization.

Identity Guide


The Compute (Nova) service provides management to Servers (running virtual machines), VM Management, Flavors and diagnostics. The API makes day to day management tasks breeze.

Compute Guide


The Image (Glance) service provides discovery, registration and delivery services for disk and server images. Stored images can be used as a template for quickly booting new instances.

Image Guide


The Network (Neutron) service provides "network connectivity as a service". The OpenStack4j implementation supports Routers, Ports, Subnets and Interface management.

Network Guide

Block Storage

Block Storage (Cinder) Service is a block-level storage solution that enables you to mount drives to scale storage. OpenStack4j implementation fully supports all major operations.

Block Storage Guide


Telemetry (Ceilometer) delivers metering and statistic measurements against OpenStack core components. This is ideal for customer billing, account and reporting of resources.

Block Storage Guide


Orchestration (Heat) is a service that you can use to orchestrate multiple composite cloud applications. Using OpenStack4j you can control Stacks, Templates, Resources and Events.

Orchestration Guide

Fluent API
// Authenticate
OSClient os = OSFactory.builder()

// Create a Tenant
Tenant t = os.identity().tenants()
                     .name("ABC Corporation")
// Create a Server Model Object
Server server = Builders.server()
                        .name("Ubuntu 2")

// Boot the Server
Server server = os.compute().servers().boot(server);

// Create a Snapshot
os.compute().servers().createSnapshot("id", "name");
// Create an Image
Image image = os.images().create(Builders.image()
                .name("Cirros 0.3.0 x64")
                ), Payloads.create(new File("cirros.img")));
// Create a Port
Port port = os.networking().port()
              .fixedIp("", "subnetId")