> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kugelaudio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Install the KugelAudio Java SDK and generate your first audio

The official Java SDK for KugelAudio provides a simple, type-safe interface for text-to-speech generation. Requires Java 17+.

## Installation

Add the dependency to your `pom.xml`:

```xml theme={null}
<dependency>
  <groupId>com.kugelaudio</groupId>
  <artifactId>kugelaudio</artifactId>
  <version>2.4.0</version>
</dependency>
```

Or with Gradle:

```groovy theme={null}
implementation 'com.kugelaudio:kugelaudio:2.4.0'
```

## Quick Start

```java theme={null}
import com.kugelaudio.sdk.KugelAudio;
import com.kugelaudio.sdk.KugelAudioOptions;
import com.kugelaudio.sdk.GenerateRequest;
import com.kugelaudio.sdk.AudioResponse;

KugelAudio client = new KugelAudio(
    KugelAudioOptions.builder("your_api_key").build()
);

AudioResponse audio = client.tts().generate(
    GenerateRequest.builder("Hello, world!")
        .modelId("kugel-3")
        .voiceId(1071)
        .language("en")
        .build()
);

audio.saveWav(java.nio.file.Path.of("output.wav"));
client.close();
```

## Pre-connecting for Low Latency

By default, `new KugelAudio(options)` immediately starts a WebSocket connection in the background. This means the connection handshake is absorbed at startup rather than on the first request — see [Latency](/latency).

```java theme={null}
// Connection starts in background automatically (autoConnect = true by default)
KugelAudio client = new KugelAudio(
    KugelAudioOptions.builder("your_api_key").build()
);

// If you need to guarantee the connection is ready before the first request:
client.connect();
System.out.println("Connected: " + client.isConnected());

// Or use the blocking factory method:
KugelAudio connectedClient = KugelAudio.createConnected(
    KugelAudioOptions.builder("your_api_key").build()
);
```

<Tip>
  Without pre-connecting, the first TTS request includes WebSocket connection setup.
  Subsequent requests reuse the connection. See [Latency](/latency) for typical numbers.
  The default `autoConnect = true` moves this overhead to client construction.
</Tip>

## Explore the SDK

* [Configuration](/sdks/java/configuration) — client options, authentication modes, regions
* [Generate & Stream](/sdks/java/generate) — one-shot generation, streaming, normalization, word timestamps
* [LLM Sessions](/sdks/java/llm-sessions) — streaming sessions, barge-in, multi-context sessions
* [Voices](/sdks/java/voices) — list, create, and manage voices
* [Dictionaries](/sdks/java/dictionaries) — per-project pronunciation and replacement lists
* [Types](/sdks/java/types) — data models, audio utilities, and a complete example
