> For the complete documentation index, see [llms.txt](https://fifo-docs.gitbook.io/colibri/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fifo-docs.gitbook.io/colibri/colibri-core/network.md).

# Network

`NetworkConfig` is used consistently across Colibri clients, pipelines, processes, plugins, and tooling.

## Built-In Configurations

### TestNet

```ts
import { NetworkConfig } from "@colibri/core";

const network = NetworkConfig.TestNet();

console.log(network.rpcUrl);
console.log(network.horizonUrl);
console.log(network.friendbotUrl);
console.log(network.networkPassphrase);
```

### MainNet

The default RPC remains `https://mainnet.sorobanrpc.com`. Pass `rpcUrl` to select a different endpoint; Colibri does not automatically switch providers.

```ts
const network = NetworkConfig.MainNet();
console.log(network.rpcUrl);
console.log(network.horizonUrl);
```

### FutureNet

```ts
const network = NetworkConfig.FutureNet();
console.log(network.rpcUrl);
console.log(network.friendbotUrl);
```

## Custom Configuration

Override endpoints in a preset without changing its network identity:

```ts
const network = NetworkConfig.TestNet({
  rpcUrl: "https://my-custom-rpc.example.com",
  horizonUrl: "https://my-horizon.example.com",
  archiveRpcUrl: "https://my-archive-rpc.example.com",
});
```

### Common Fields

For a standalone ledger, use `CustomNet` with its exact passphrase. This complete local declaration does not contact the endpoint; it describes a default standalone Quickstart network. Run it with `deno run network.ts` after installing Core. Prefer the actual details returned by Test Tooling when ports are dynamic.

```ts
import { NetworkConfig } from "@colibri/core";

const network = NetworkConfig.CustomNet({
  networkPassphrase: "Standalone Network ; February 2017",
  rpcUrl: "http://localhost:8000/rpc",
  friendbotUrl: "http://localhost:8000/friendbot",
  allowHttp: true,
});
console.log(network.isCustomNet());
```

Optional URLs are absent until configured. Setters only fill a value that has not already been set; construct a new configuration to replace a preset URL. Network presets are configuration, not endpoint health checks or guarantees of archive retention. Public provider availability, rate limits, and credentials are controlled by the provider.

| Field               | Type       | Description                          |
| ------------------- | ---------- | ------------------------------------ |
| `rpcUrl`            | `string?`  | Soroban RPC endpoint                 |
| `archiveRpcUrl`     | `string?`  | Archive RPC endpoint for older data  |
| `horizonUrl`        | `string?`  | Horizon endpoint                     |
| `friendbotUrl`      | `string?`  | Friendbot endpoint for test networks |
| `allowHttp`         | `boolean?` | Allow non-HTTPS endpoints            |
| `networkPassphrase` | `string`   | Stellar network passphrase           |

## Choosing RPC Endpoints

Colibri does not maintain a named provider catalog. Choose an endpoint from the [Stellar RPC provider directory](https://developers.stellar.org/docs/data/apis/rpc/providers) and pass its URL directly to `NetworkConfig`. Check the provider's network, authentication requirements, rate limits and archive retention separately.

For example, substitute your provider's URLs below. Constructing this configuration does not contact either endpoint:

```ts
import { NetworkConfig } from "@colibri/core";

const network = NetworkConfig.MainNet({
  rpcUrl: "https://rpc.example.com",
  archiveRpcUrl: "https://archive-rpc.example.com",
});

console.log(network.rpcUrl);
console.log(network.archiveRpcUrl);
```

When migrating from the 0.x `NetworkProviders` helpers, supply the endpoints you used explicitly as above. The default Mainnet RPC and the SDF Testnet/Futurenet configurations are unchanged.

A network identifies the ledger and endpoints. Each write separately supplies [TransactionConfig](/colibri/colibri-core/transaction-config.md) for its source, fees and signers.

## Using NetworkConfig In Pipelines

```ts
import {
  createInvokeContractPipeline,
  LocalSigner,
  NetworkConfig,
} from "@colibri/core";
import { Operation } from "npm:@stellar/stellar-sdk";

const network = NetworkConfig.TestNet();
const signer = LocalSigner.fromSecret("S...");

const invokeContract = createInvokeContractPipeline({ networkConfig: network });

const result = await invokeContract({
  operations: [
    Operation.invokeContractFunction({
      contract: "CABC...",
      function: "hello",
      args: [],
    }),
  ],
  config: {
    source: signer.publicKey(),
    fee: "100000",
    timeout: 30,
    signers: [signer],
  },
});
```

## Using NetworkConfig In Plugins

Both built-in plugins also consume `NetworkConfig`:

```ts
import { createFeeBumpPlugin } from "@colibri/plugin-fee-bump";
import { createChannelAccountsPlugin } from "@colibri/plugin-channel-accounts";
```

## Next Steps

* [Pipelines](/colibri/colibri-core/pipelines.md) — Use network config in write and read flows
* [Contract](/colibri/colibri-core/contract.md) — High-level contract usage
* [Tools](/colibri/colibri-core/tools.md) — Friendbot and related helpers
