Skip to content

Arkiv provides an official TypeScript/JavaScript SDK — @arkiv-network/sdk — that works in Node.js, Bun, and the browser. It handles client creation, queries, mutations, event subscriptions, and payload encoding.

Terminal window
npm install @arkiv-network/sdk

Requires a private key. Use for creating, updating, and deleting entities:

import { createWalletClient, http } from "@arkiv-network/sdk"
import { privateKeyToAccount } from "@arkiv-network/sdk/accounts"
import { kaolin } from "@arkiv-network/sdk/chains"
const walletClient = createWalletClient({
chain: kaolin,
transport: http(),
account: privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`),
})

No private key needed. Use for queries — safe for frontend use:

import { createPublicClient, http } from "@arkiv-network/sdk"
import { kaolin } from "@arkiv-network/sdk/chains"
const publicClient = createPublicClient({
chain: kaolin,
transport: http(),
})
  1. Create your project

    Terminal window
    mkdir hello-arkiv && cd hello-arkiv
    npm init -y
    npm install @arkiv-network/sdk dotenv typescript
  2. Add your private key

    .env
    PRIVATE_KEY=0xYOUR_PRIVATE_KEY_HERE

    Get test ETH from the Kaolin Faucet.

  3. Write your first entity

    hello.ts
    import { createWalletClient, createPublicClient, http } from '@arkiv-network/sdk';
    import { stringToPayload } from '@arkiv-network/sdk/utils';
    import { kaolin } from '@arkiv-network/sdk/chains';
    import { privateKeyToAccount } from '@arkiv-network/sdk/accounts';
    import { config } from 'dotenv';
    config({ path: '.env' });
    const walletClient = createWalletClient({
    chain: kaolin,
    transport: http(),
    account: privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`),
    });
    const publicClient = createPublicClient({
    chain: kaolin,
    transport: http(),
    });
    // Create an entity
    const { entityKey, txHash } = await walletClient.createEntity({
    payload: stringToPayload('Hello, Arkiv!'),
    contentType: 'text/plain',
    attributes: [{ key: 'type', value: 'greeting' }],
    expiresIn: 3600,
    });
    console.log('Entity created:', entityKey);
    console.log('Transaction:', txHash);
    // Read it back
    const entity = await publicClient.getEntity(entityKey);
    console.log('Retrieved:', entity.toText());
  4. Run it

    Terminal window
    npx tsx hello.ts

For static HTML/JS pages without a bundler:

import { createPublicClient, http } from 'https://esm.sh/@arkiv-network/sdk@0.6.0?target=es2022&bundle-deps'
import { eq } from 'https://esm.sh/@arkiv-network/sdk@0.6.0/query?target=es2022&bundle-deps'
import { kaolin } from 'https://esm.sh/@arkiv-network/sdk@0.6.0/chains?target=es2022&bundle-deps'