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

Defined in: [packages/common/src/Resource.ts:164](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L164)

Shared [Resource](https://evolu.dev/docs/api-reference/common/Resource/type-aliases/Resource).

Lazily acquires the underlying resource on the first
[acquire](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource#acquire) call, shares it across callers, and
disposes it when the last caller [releases](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource#release)
it.

Calls to [release](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource#release) must be balanced with
successful calls to [acquire](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource#acquire). Releasing more
times than acquired is a programmer error checked with [assert](https://evolu.dev/docs/api-reference/common/Assert/variables/assert).

## Extends

- [`AsyncDisposable`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management)

## Methods

<a id="asyncdispose"></a>

### \[asyncDispose\]()

```ts
asyncDispose: PromiseLike<void>;
```

Defined in: node_modules/.bun/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts:40

#### Inherited from

```ts
AsyncDisposable.[asyncDispose]
```

## Properties

<a id="acquire"></a>

### acquire

```ts
readonly acquire: Task<BorrowedResource<T>, never, D>;
```

Defined in: [packages/common/src/Resource.ts:188](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L188)

Acquires a shared reference.

The first call lazily creates the resource. Later calls reuse the same
resource until the final [release](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource#release) starts the
final disposal path. Disposal happens immediately by default, or after
[idleDisposeAfter](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResourceOptions#idledisposeafter) elapses
when configured.

Once started, acquire runs to completion even if the caller aborts its
Fiber. Always await the result. A successful result still counts as an
acquired lease and must later be balanced with
[release](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource#release).

---

<a id="get"></a>

### get

```ts
readonly get: () =>
  | BorrowedResource<T>
  | undefined;
```

Defined in: [packages/common/src/Resource.ts:172](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L172)

Returns the current resource, or `undefined` if absent.

### getCount

```ts
readonly getCount: Task<number & Brand<"Int"> & Brand<"NonNegative">, never, D>;
```

Defined in: [packages/common/src/Resource.ts:205](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L205)

Returns the current acquire count.

---

<a id="release"></a>

### release

```ts
readonly release: Task<void, never, D>;
```

Defined in: [packages/common/src/Resource.ts:202](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L202)

Releases one previously acquired shared reference.

When the last acquired reference is released, the current resource is
disposed immediately by default. If
[idleDisposeAfter](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResourceOptions#idledisposeafter) is set,
disposal is scheduled instead and a new acquire during that delay reuses
the current resource.

Once started, release runs to completion even if the caller aborts its
Fiber. Always await the result instead of assuming no cleanup happened.

---

<a id="snapshot"></a>

### snapshot

```ts
readonly snapshot: () => SharedResourceSnapshot;
```

Defined in: [packages/common/src/Resource.ts:169](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Resource.ts#L169)

Returns the current shared-resource state for monitoring/debugging.