---
title: "Editing records"
description: "How to create, edit, and delete records in Aerospike Voyager, including data types and write policies."
---

# Editing records

> For the complete documentation index see: [llms.txt](https://aerospike.com/docs/llms.txt)
> 
> All documentation pages available in markdown.

Aerospike Voyager lets you create, edit, and delete records directly in the data browser. Destructive operations (deletes, truncates) require confirmation by default so you can explore safely during development.

::: caution
Edits in Voyager write directly to your Aerospike cluster. There is no undo. Use caution when editing records on shared or production clusters.
:::

## Safety guardrails

Voyager asks you to confirm before it runs a destructive operation. Deleting a bin, deleting a record, and truncating a set each show a confirmation dialog first.

::: tip
Read the confirmation dialog before accepting it, especially on a shared cluster. It is the last chance to cancel before data is removed, and truncating a set cannot be undone.
:::

## Adding a new record

Open the **Add new record** dialog from either entry point:

-   Click the **\+ New record** button in the data browser toolbar.
-   In the sidebar, open a namespace’s actions menu (⋮) and choose **\+ New record**. This entry point creates a record and a new set, if needed, without first opening an existing set.

 ![Add new record dialog showing Namespace (pre-filled as test), Set (pre-filled as sample_users), Key field, Bins section with Bin name and Data type dropdown, and collapsed Policies (Advanced) section](https://aerospike.com/docs/_astro/add_new_record_dialog.CMJhvYD7_Z1ehEI4.png)

1.  At the top of the dialog, fill in:
    
    -   **Namespace**: Pre-filled with the current namespace when opened from a set or namespace view.
        
    -   **Set**: Editable from both entry points. Pre-filled with the current set when opened from a set view, or blank when opened from the namespace menu. If the set name does not already exist in the namespace, Voyager creates it on first write and warns you that the change will create a new set.
        
    -   **User key**: Enter the user key for the record, and select its type. A string user key is the default. Voyager can display a record with a byte-array (`blob`) user key but cannot create one.
        
        The type you choose is part of the record’s identity, so a string `42` and an integer `42` are two different records. See [String and integer user keys](https://aerospike.com/docs/database/tools/voyager/guides/browsing-data#string-and-integer-user-keys).
        
2.  In the **Bins** section, add one or more bins:
    
    -   Enter a **Bin name**.
    -   Select a **Data type** from the dropdown.
    -   Enter the **Value**. For list, map, and GeoJSON values, a JSON editor is available.
    -   Click **\+ Add bin** to add another bin.
3.  (Optional) Expand **Policies (Advanced)** to override defaults:
    
    -   **TTL (seconds)**: Record TTL in seconds. `0` uses the namespace default. See [Expiration](https://aerospike.com/docs/database/tools/voyager/guides/policies#write-policy) on the Write policy page for the full range and sentinel values.
    
    To store the user key with the record, set **Send key** on the connection’s [Write policy](https://aerospike.com/docs/database/tools/voyager/guides/policies#write-policy).
    
4.  (Optional) Expand **Code snippets (Experimental)** to view equivalent SDK code in Golang, Java, JavaScript, Python, and C++ (in that order). Copy a snippet to reproduce the same write programmatically.
    
5.  Click **Create record** to write the record to the cluster.
    

## Editing an existing record

You can edit existing records inline using the tree-based bin editor on the record card. There is no separate dialog for editing.

-   Edit **Scalars** (string, integer, double, boolean) inline:
    1.  Hover over a row to highlight it. Scalar values show an editable treatment on hover.
    2.  Click the value to put the row into edit mode. The row stays in edit mode until you confirm or cancel.
    3.  Change the value, and the data type if needed, then click the confirm (**✓**) button to save or the cancel (**✗**) button to discard.
    4.  A success toast confirms the save.
-   You can only edit one bin at a time. If you try to edit a second bin while one is open, Voyager shows a warning so you finish or cancel the current edit first.
-   **Complex types** (Map, List, GeoJSON) open in a JSON code editor where you can modify the structure at any nesting depth. The tree view lets you drill into nested maps and lists, and each level is editable in place.

 ![A record card with the age bin in inline edit mode: the row is highlighted, the bin name, type, and value are editable, and confirm and cancel buttons appear at the end of the row](https://aerospike.com/docs/_astro/inline_edit.CVTataKn_1Oi9Cl.png)

Voyager preserves the original data type by default. If you change a value to a different type (for example, a string to an integer), a confirmation dialog appears before the type conversion is applied.

## Supported data types

Voyager displays the following Aerospike data types: String, Integer, Double, Boolean, List, Map, Bytes, GeoJSON, and HLL. In the type selector the binary type is listed as `blob`, while the type badge on a bin labels it `bytes`.

The same set of data types is available across the **New record**, **Add bin**, and **Modify bin** flows. When editing, **Bytes (`blob`) and HLL are read-only** and appear disabled in the type selector. The remaining seven types can be written using the Add new record dialog and edited inline on existing records.

| Type | Description |
| --- | --- |
| String | UTF-8 text |
| Integer | 64-bit signed integer |
| Double | 64-bit IEEE 754 floating point |
| Boolean | True or false |
| List | Ordered collection (edited as JSON) |
| Map | Key-value collection (edited as JSON) |
| Bytes | Raw byte data (read-only) |
| GeoJSON | Geographic data in GeoJSON format (edited as JSON) |
| HLL | HyperLogLog (read-only) |

## Deleting a bin

To remove a single bin from a record, click the delete icon next to the bin. Voyager prompts for confirmation before removing the bin.

## Deleting a record

To delete an entire record:

1.  Click the delete button (trash icon) on the record card header.
2.  Confirm the deletion in the dialog.

If **[Durable delete](https://aerospike.com/docs/database/learn/architecture/durable-deletes)** is enabled for this connection on the [Policies](https://aerospike.com/docs/database/tools/voyager/guides/policies#write-policy) page, Voyager writes a tombstone marker for the deleted record. This prevents the record from reappearing after a cold restart of the cluster. See [Write policies](#write-policies) for details.

## Truncating a set

To remove all records from a set:

1.  Right-click the set in the sidebar, or click its actions menu (⋮).
2.  Select **Truncate set**.
3.  Confirm the operation in the dialog.

::: caution
Truncating a set removes all of its records and cannot be undone. This operation affects every record in the set across the entire cluster.
:::

## Write policies

Voyager applies the [write policies](https://aerospike.com/docs/database/learn/policies) configured for each connection on the [Policies](https://aerospike.com/docs/database/tools/voyager/guides/policies#write-policy) page to all write operations. These policies control how the Aerospike client behaves when writing or deleting records. Write policy fields have no global tier, so a value you want on several clusters has to be set on each connection.

| Setting | Default | Description |
| --- | --- | --- |
| Send Key | On | Store the user key with records on write so it can be retrieved on subsequent reads. |
| Durable Delete | Off | Write a tombstone marker when deleting records. Prevents deleted records from reappearing after a cold restart. |
| Record Exists Action | Update | Controls what happens when writing to a key that already exists. |

### Record exists action options

| Option | Behavior |
| --- | --- |
| **update** | Create the record if it does not exist, or update bins on an existing record. Existing bins not included in the write are preserved. |
| **updateOnly** | Update an existing record only. Fail if the record does not exist. |
| **replace** | Create the record if it does not exist, or replace the entire record (all bins) if it does. |
| **replaceOnly** | Replace an existing record only. Fail if the record does not exist. |
| **createOnly** | Create the record only. Fail if the record already exists. |

## Next steps

-   [Browsing data](https://aerospike.com/docs/database/tools/voyager/guides/browsing-data)
-   [Filtering records](https://aerospike.com/docs/database/tools/voyager/guides/filtering-records)
-   [Expressions and SDK code](https://aerospike.com/docs/database/tools/voyager/guides/expressions-and-sdk-code)
-   [Loading sample data](https://aerospike.com/docs/database/tools/voyager/guides/sample-data)