> For the complete documentation index, see [llms.txt](https://developers.tezos.domains/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.tezos.domains/integrating-tezos-domains/client-libraries.md).

# Client Libraries

We built a set of client libraries for Javascript/Typescript to help with integrating Tezos Domains. You can choose to use either [Taquito](https://tezostaquito.io/) or [ConseilJS](https://cryptonomic.github.io/ConseilJS) to power the client, depending on what you are already using. To learn more and get started check out the [API documentation](https://client-docs.tezos.domains/) and [example repository](https://gitlab.com/tezos-domains/examples).

We are using this library in our own dApp for all interactions with Smart Contracts to ensure it's functional and up to date. If you encounter any issues or have an idea for a new feature or improvement, feel free to create an [issue for us](https://gitlab.com/tezos-domains/client/issues).

## Configuring an IPFS gateway (required for Taquito)

{% hint style="danger" %}
**Name resolution will not work with Taquito's default settings.** If you are calling `tezos.addExtension(new Tzip16Module())` with no arguments, resolution is broken — this is the single most common integration problem we see. Configure a gateway as shown below.
{% endhint %}

Name resolution is implemented as [TZIP-16](https://gitlab.com/tzip/tzip/-/blob/master/proposals/tzip-16/tzip-16.md) off-chain views. The view code is not in the contract itself: it lives in the contract's metadata document, which is stored on IPFS. The `NameRegistry` contract holds only an `ipfs://` URI pointing at it, so Taquito must download that document over an HTTP gateway before it can resolve a single name. There is no on-chain copy to fall back to — if the gateway fails, resolution fails outright.

Taquito's `IpfsHttpHandler` defaults to `ipfs.io`, whose public path gateway is **being retired on 21 September 2026** (announced through the gateway's own `sunset` response header) and which has already been rejecting requests with HTTP 429 since early September. `dweb.link` is run by the same project and is going the same way; `cloudflare-ipfs.com` was shut down earlier. Pass a working gateway explicitly:

```ts
import { TezosToolkit } from '@taquito/taquito';
import { Tzip16Module, MetadataProvider, IpfsHttpHandler, DEFAULT_HANDLERS } from '@taquito/tzip16';
import { TaquitoTezosDomainsClient } from '@tezos-domains/taquito-client';

const handlers = new Map(DEFAULT_HANDLERS);
handlers.set('ipfs', new IpfsHttpHandler('ipfs.filebase.io'));

const tezos = new TezosToolkit('https://rpc.tzkt.io/mainnet');
tezos.addExtension(new Tzip16Module(new MetadataProvider(handlers)));

const client = new TaquitoTezosDomainsClient({ tezos, network: 'mainnet' });
```

In production, prefer a gateway you control or pay for, and fall back across several so a single outage does not take name resolution down with it. See the [client README](https://gitlab.com/tezos-domains/client#2-configure-an-ipfs-gateway) for a ready-made fallback handler.

The metadata document is immutable and content-addressed, so every gateway that can retrieve the CID returns identical bytes. Picking a gateway is an availability and latency decision, not a trust one.

{% hint style="info" %}
If you do not want an HTTP gateway dependency at all, you can skip the views and read the contract storage directly. That path uses no IPFS. See [Name Resolution](/interoperability/name-resolution.md#instructions-for-off-chain-clients-lacking-view-support), or use our [GraphQL API](/integrating-tezos-domains/graphql.md), which resolves names server-side.
{% endhint %}

## Packages

The functionality is split into two separate packages according to your particular use case:

### Resolver

This part can [resolve](https://client-docs.tezos.domains/interfaces/_tezos_domains_resolver.nameresolver-2.html) domain names to addresses and also the other way around by utilizing reverse records. You can also retrieve all domain metadata, which allows you to read arbitrary data that can be saved with a domain.

### Manager

With this, you can [execute operations](https://client-docs.tezos.domains/interfaces/_tezos_domains_manager.domainsmanager-2.html) that register or update domains, create subdomains, claim or update reverse records, interact with auctions, and more.

*(manager functions are not yet supported in ConseilJS implementation)*
