# RowTransaction

> _Since v1.27.0_

A batch of row mutations to apply atomically in a single render cycle.

All adds, updates, and removes are processed together with one re-render,
making this far more efficient than calling `insertRow`, `updateRow`, and
`removeRow` individually — especially for high-frequency streaming data.

Row identification for `update` and `remove` uses the grid's configured
getRowId function.

#### Example

```typescript
// Apply a mixed transaction from a WebSocket message
const result = await grid.applyTransaction({
  add: [{ id: 'new-1', name: 'Alice', status: 'Active' }],
  update: [{ id: 'emp-5', changes: { status: 'Inactive' } }],
  remove: [{ id: 'emp-3' }],
});

console.log(`Added: ${result.added.length}, Updated: ${result.updated.length}, Removed: ${result.removed.length}`);
```

## Properties

| Property | Type | Description |
| -------- | ---- | ----------- |
| `add?` | <code>TRow[]</code> | Rows to insert. Appended at the end of the current view. |
| `update?` | <code><a href="/grid/api/core/interfaces/rowupdate/">RowUpdate</a>&lt;TRow&gt;[]</code> | Rows to update in-place by ID. |
| `remove?` | <code>object[]</code> | Rows to remove by ID. |

## See Also

- [`TransactionResult`](/grid/api/core/interfaces/transactionresult.md) for the result structure
