> ## Documentation Index
> Fetch the complete documentation index at: https://docs.4mica.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Bun

> Use 4Mica from a Bun-powered Node service.

Use Bun when you want fast local installs and a Node-compatible runtime for a 4Mica service. The server-side 4Mica integration uses Express middleware, which Bun can run through its Node compatibility layer.

<Warning>
  This integration is not stable yet. For now, use the
  [NodeJS quick start](/quick-start/nodejs) for the supported implementation.
</Warning>

## Prerequisites

* Bun installed locally.
* A seller wallet address for `payTo`.
* A buyer wallet with deposited collateral for testing.

## Install

<CodeGroup>
  ```bash npm theme={null}
  npm install express @4mica/x402 @x402/fetch @x402/axios viem
  ```

  ```bash pnpm theme={null}
  pnpm install express @4mica/x402 @x402/fetch @x402/axios viem
  ```

  ```bash yarn theme={null}
  yarn add express @4mica/x402 @x402/fetch @x402/axios viem
  ```

  ```bash bun theme={null}
  bun add express @4mica/x402 @x402/fetch @x402/axios viem
  ```
</CodeGroup>

## Create wallet

For wallet setup, see [Wallet](/core-concepts/wallet).

```bash theme={null}
PRIVATE_KEY=0xYourPrivateKey
PAY_TO=0xYourSellerAddress
```

<Warning>
  Use the private key only for buyer-side signing. Use `PAY_TO` as the seller
  address advertised by protected routes.
</Warning>

## Deposit collateral

Deposit collateral for the buyer wallet before calling protected routes. Match the route network, such as `eip155:84532` for Base Sepolia.

To learn more about collateral setup, see [Deposits and Withdrawals](/core-concepts/deposits-and-withdrawals).

## Protect a route

```ts theme={null}
import express from "express";
import { paymentMiddlewareFromConfig } from "@4mica/x402/server/express";

const app = express();
app.use(express.json());

app.use(
  paymentMiddlewareFromConfig(
    {
      "GET /premium-content": {
        accepts: {
          scheme: "4mica-credit",
          price: "$0.10",
          network: "eip155:84532",
          payTo: process.env.PAY_TO ?? "0xYourAddress",
        },
        description: "Access to premium Bun content",
      },
    },
  ),
);

app.get("/premium-content", (req, res) => {
  res.json({ message: "Paid content from Bun" });
});

app.listen(3030, () => {
  console.log("Bun service running on http://localhost:3030");
});
```

Run it with Bun:

```bash theme={null}
bun run server.ts
```

## Support payment

```ts theme={null}
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { FourMicaEvmScheme } from "@4mica/x402/client";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const scheme = await FourMicaEvmScheme.create(account);

const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:84532", client: scheme }],
});

const response = await fetchWithPayment("http://localhost:3030/premium-content");
const data = await response.json();
```
