[API reference](https://evolu.dev/docs/api-reference) › [@evolu/svelte](https://evolu.dev/docs/api-reference/svelte) › ownerSync

```ts
function ownerSync<
  S extends Readonly<
    Record<string, Readonly<Record<string, AnyStandardSchemaV1>>>
  >,
>(
  evolu: AppOwnerEvolu<S>,
  observedOwner: () => ReadonlyOwner | Owner | null,
  observedTransports?: () =>
    readonly [OwnerWebSocketTransport, OwnerWebSocketTransport] | undefined,
): void;
```

Defined in: [index.svelte.ts:373](https://github.com/evoluhq/evolu/blob/aa223771feea747ffb1b0f5f3271574455633e37/packages/svelte/src/lib/index.svelte.ts#L373)

Uses an owner for sync through [Evolu.useOwner](https://evolu.dev/docs/api-reference/common/local-first/Evolu/interfaces/Evolu#useowner) while the component or
root that calls it lives, and stops when it's destroyed or when the owner
that `observedOwner` returns, or the transports that `observedTransports`
returns, change. Without transports, the owner syncs with the transports of
the instance's config. A null owner uses none, for a component that waits for
one. The owner and transports are compared by content, so recreating them,
such as in a `$derived`, keeps the same registration.
[Evolu.deleteOwner](https://evolu.dev/docs/api-reference/common/local-first/Evolu/interfaces/Evolu#deleteowner) of the owner ends its use, and it uses the owner
again only once the component mounts again or the owner or transports change.
An instance whose database was deleted uses none.

It creates an `$effect`, so call it where Svelte allows one, such as during
component initialization or inside `$effect.root`. Server rendering runs no
effect, so it uses none there.

### Example

Runes such as `$state` work only in Svelte components and `.svelte.ts` or
`.svelte.js` modules. A component calls `projectSync` during its
initialization.

```ts
import {
  type AppOwnerEvolu,
  type ShardOwner,
  type TestEvoluSchema,
} from "@evolu/common";
import { ownerSync } from "@evolu/svelte";

// Syncs the open project's owner, and none while no project is open.
const projectSync = (evolu: AppOwnerEvolu<TestEvoluSchema>) => {
  let project: ShardOwner | null = $state.raw(null);
  ownerSync(evolu, () => project);

  return {
    open: (owner: ShardOwner | null) => {
      project = owner;
    },
  };
};

void projectSync;
```