[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) › Lease

Defined in: [packages/common/src/Resource.ts:87](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Resource.ts#L87)

An owned lease on a shared [Resource](https://evolu.dev/docs/api-reference/common/Resource/type-aliases/Resource).

A lease keeps the underlying resource alive. Release it with
[Lease.release](https://evolu.dev/docs/api-reference/common/Resource/interfaces/Lease#release) or `using`; releasing the last lease starts the resource
disposal path. Release is idempotent, so double release is a safe no-op.

Release is synchronous accounting and never waits for resource disposal.
Disposal completion belongs to the owning [SharedResource](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource): it may be
delayed by [idleDisposeAfter](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResourceOptions#idledisposeafter)
and is awaited by the owner's async disposal.

Release does not revoke [resource](https://evolu.dev/docs/api-reference/common/Resource/interfaces/Lease#resource); a released lease
keeps a plain reference, and using it after the resource is disposed is a
programmer error that nothing catches statically. Create resources with the
[disposable](https://evolu.dev/docs/api-reference/common/Function/functions/disposable) helper so use-after-dispose throws eagerly instead of
operating on disposed state.

## Extends

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

## Methods

<a id="dispose"></a>

### \[dispose\]()

```ts
dispose: void;
```

Defined in: node\_modules/@typescript/old/lib/lib.esnext.disposable.d.ts:34

#### Inherited from

```ts
Disposable.[dispose]
```

## Properties

<a id="created"></a>

### created

```ts
readonly created: boolean;
```

Defined in: [packages/common/src/Resource.ts:92](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Resource.ts#L92)

Whether this acquisition created the leased resource generation.

---

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

### release

```ts
readonly release: () => boolean;
```

Defined in: [packages/common/src/Resource.ts:102](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Resource.ts#L102)

Releases this lease.

Returns whether this call released a still-held lease. Returns `false` if
the lease was already released, drained by disposal of its owning
[SharedResource](https://evolu.dev/docs/api-reference/common/Resource/interfaces/SharedResource), or drained by disposal of the Run tree that owns
it.

### resource

```ts
readonly resource: DistributiveOmit<T>;
```

Defined in: [packages/common/src/Resource.ts:89](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Resource.ts#L89)

The leased resource.