[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Set](https://evolu.dev/docs/api-reference/common/Set) › addToSet

```ts
function addToSet<T>(set: ReadonlySet<T>, item: T): NonEmptyReadonlySet<T>;
```

Defined in: [packages/common/src/Set.ts:165](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Set.ts#L165)

Returns a new readonly set with an item added.

If the item already exists, returns a new set with the same elements (still a
new reference for change detection).

### Adding without mutation

```ts
import {
  addToSet,
  assertEqual,
  assertTrue,
  assertType,
  type NonEmptyReadonlySet,
} from "@evolu/common";

const original: ReadonlySet<number> = new Set([1, 2]);
const added = addToSet(original, 3);
const unchanged = addToSet(original, 2);

assertType<NonEmptyReadonlySet<number>, typeof added>();
assertEqual(added, new Set([1, 2, 3]));
assertTrue(unchanged !== original);
```