# Voyager quickstart

This quickstart takes about 5-10 minutes. By the end, you will have connected to a cluster, browsed sample data, built a filter, and copied an expression string you can use in your application code.

## 1\. Start Voyager

Launch Aerospike Voyager from your Applications folder, Start menu, or by running the AppImage. On first launch, accept the license agreement and usage-statistics opt-in to reach the Welcome page.

 ![Voyager welcome page with the Connect cluster button and sidebar showing no clusters connected yet](https://aerospike.com/docs/_astro/welcome_page.CkYsQiPt_ZNzY01.png)

## 2\. Create a connection

On the Welcome page, click **Connect cluster** (the same button reads **Add connection** in the sidebar once you have one or more saved clusters). In the dialog, enter a **Display name** (optional) and the **Cluster address** as `host:port` (for example, `localhost:3000`).

Click **Test** to verify connectivity, then click **Save** to keep the profile or **Connect** to open a session immediately.

 ![Connect to an Aerospike cluster dialog with Display name Local Aerospike and Cluster address localhost:3000, showing Test, Save, and Connect buttons](https://aerospike.com/docs/_astro/connection_dialog.DCB45h3l_zPi18.png)
::: tip
If you do not have a cluster running, start one in Docker:

Terminal window

```bash
docker run -d --name aerospike -p 3000:3000 aerospike/aerospike-server
```
:::

## 3\. Load sample data

After connecting, open the sample data dialog from the toolbar and click **Load sample data**. Voyager creates 9 sample sets with 600 records across three domains:

-   **Ad tech**: sample\_audience, sample\_campaign, sample\_creative, sample\_lineitem
-   **E-commerce**: sample\_orders, sample\_products
-   **User data**: sample\_segment, sample\_user\_profile, sample\_users

Loading takes a few seconds. When it completes, the sets appear in the sidebar and in the namespace view as cards showing the record count for each set.

 ![Voyager sidebar expanded to show the 9 sample sets under namespace test, with the Sets in namespace view listing record counts per set](https://aerospike.com/docs/_astro/sidebar_sets.DRnmjH_Y_Z1XWJbu.png)

## 4\. Browse data

Click **sample\_users** in the sidebar to open the set. Records render as cards that expand to show their bins. If a bin contains a nested list or map, click the expand arrow to drill into the structure. Each value shows a type badge — for example, `string`, `integer`, `boolean`, `map`, `list`, or `geojson`.

 ![Expanded sample_users record card with the address map drilled in to show city, state, street, and zip, plus type badges for boolean, map, integer, string, geojson, and list](https://aerospike.com/docs/_astro/record_card_expanded.BrwLi3dB_ZXc9uM.png)

## 5\. Filter records

Click the **Filter records** button in the toolbar to open the filter panel. The panel has two tabs: **Filters** (visual builder) and **Expression** (raw expression editor). Use **Clear all** to reset.

In the visual builder:

1.  Enter the field **age**.
2.  Choose the operator **`> greater than`**.
3.  Enter the value **30**.
4.  Set the **Data type** to **integer** (so the comparison is numeric, not string).
5.  Click **Apply**.

The record browser updates to show only records where `age > 30`.

 ![Filter panel Filters tab with field age, operator greater than, value 30, data type integer, and the generated expression $.age > 30 shown at the bottom](https://aerospike.com/docs/_astro/filter_builder_age_gt_30.BB1BVi4u_Z1qycQX.png)

## 6\. View the expression

Click the **Expression** tab. You will see the expression string Voyager generated from your visual filter:

```text
$.age > 30
```

In Aerospike Expression Language, the `$` prefix denotes a bin reference. For example, `$.age > 30` filters records where the age bin exceeds 30.

 ![Filter panel Expression tab showing the generated $.age > 30 expression, with a link to the syntax docs](https://aerospike.com/docs/_astro/expression_tab.55zpDAzW_Z1gBNkG.png)

## 7\. Use the expression in your SDK

Copy the expression string from the Expression tab. You can paste it directly into your Aerospike SDK code to apply the same filter programmatically. The in-app **Add new record** dialog also has a **Code snippets (Experimental)** section with five language tabs: Golang, Java, JavaScript, Python, and C++.

 ![Add new record dialog with the Code snippets (Experimental) section expanded, showing language tabs for Golang, Java, JavaScript, Python, and C++](https://aerospike.com/docs/_astro/add_record_code_snippets.BeZfyT9A_Zuay0j.png)

**Java ([Aerospike Java SDK](https://github.com/aerospike/aerospike-client-java-sdk)):**

```java
import com.aerospike.client.sdk.Cluster;

import com.aerospike.client.sdk.ClusterDefinition;

import com.aerospike.client.sdk.DataSet;

import com.aerospike.client.sdk.RecordStream;

import com.aerospike.client.sdk.Session;

import com.aerospike.client.sdk.policy.Behavior;

try (Cluster cluster = new ClusterDefinition("localhost", 3000).connect()) {

    Session session = cluster.createSession(Behavior.DEFAULT);

    DataSet sampleUsers = DataSet.of("test", "sample_users");

    RecordStream stream = session.query(sampleUsers).where("$.age > 30").execute();

    while (stream.hasNext()) {

        System.out.println(stream.next().recordOrNull().bins);

    }

    stream.close();

}
```

**Python ([Aerospike Python SDK](https://github.com/aerospike/aerospike-client-python-sdk)):**

```python
from aerospike_sdk import Behavior, DataSet, SyncClient

with SyncClient("localhost:3000") as client:

    session = client.create_session(Behavior.DEFAULT)

    sample_users = DataSet.of("test", "sample_users")

    stream = session.query(sample_users).where("$.age > 30").execute()

    for result in stream:

        print(result.record.bins)

    stream.close()
```

The `$.age > 30` string is Aerospike Expression Language (AEL); see the [Aerospike Expression Language reference](https://aerospike.com/docs/develop/expressions) for full syntax.

## 8\. Next steps

You have connected to a cluster, explored sample data, built a filter, and seen how expressions translate to SDK code. Continue learning with these guides:

-   [Connecting to clusters](https://aerospike.com/docs/database/tools/voyager/guides/connecting)
-   [Browsing data](https://aerospike.com/docs/database/tools/voyager/guides/browsing-data)
-   [Filtering and querying](https://aerospike.com/docs/database/tools/voyager/guides/filtering-records)
-   [Setting up the MCP server](https://aerospike.com/docs/database/tools/voyager/mcp/)
-   [Filter operators](https://aerospike.com/docs/database/tools/voyager/guides/filtering-records#available-operators)