Configuration
Network Configuration
Midday SDK comes with pre-configured network settings for common environments.
Built-in Networks
const client = await Midday.Client.create({ networkConfig: Midday.Config.NETWORKS.local, privateStateProvider: Midday.PrivateState.inMemoryPrivateStateProvider(),});const client = await Midday.Client.create({ networkConfig: Midday.Config.NETWORKS.preview, seed: 'your-64-char-hex-seed', privateStateProvider: Midday.PrivateState.inMemoryPrivateStateProvider(),});Custom Network
For custom deployments, provide the full network configuration:
const client = await Midday.Client.create({ networkConfig: { networkId: 'testnet', indexer: 'https://indexer.testnet.midnight.network/graphql', indexerWS: 'wss://indexer.testnet.midnight.network/graphql/ws', node: 'wss://node.testnet.midnight.network', proofServer: 'https://proof.testnet.midnight.network', }, seed: 'your-64-char-hex-seed', privateStateProvider: Midday.PrivateState.inMemoryPrivateStateProvider(),});ZK Configuration (Per-Contract)
Each contract has its own zk circuits. zkConfig is loaded when you load a contract, not at client creation.
From Path (Node.js)
const loaded = await client.loadContract({ module: CounterContract, zkConfig: Midday.ZkConfig.fromPath('./contracts/counter'), privateStateId: 'my-counter',});From URL (Browser)
const loaded = await client.loadContract({ module: CounterContract, zkConfig: new Midday.ZkConfig.HttpZkConfigProvider('https://cdn.example.com/zk'), privateStateId: 'my-counter',});Private State Provider
Private state stores contract-specific secrets that should never leave the client.
In-Memory (Development)
const privateStateProvider = Midday.PrivateState.inMemoryPrivateStateProvider();IndexedDB (Browser)
const privateStateProvider = Midday.PrivateState.indexedDBPrivateStateProvider({ privateStateStoreName: 'my-app-private-state',});Wallet Configuration
Seed-Based (Node.js)
For server-side applications, provide a 64-character hex seed:
const client = await Midday.Client.create({ networkConfig: Midday.Config.NETWORKS.preview, seed: 'your-64-char-hex-seed', // 32 bytes as hex privateStateProvider: Midday.PrivateState.inMemoryPrivateStateProvider(),});Wallet Factories
The SDK provides convenient wallet factories:
// From seed (Node.js) — positional argsconst wallet = await Midday.Wallet.fromSeed(seed, networkConfig);
// From browser (Lace extension)const wallet = await Midday.Wallet.fromBrowser('preview');
// Read-only (address only, no signing)const wallet = Midday.Wallet.fromAddress('0x...');Lace Wallet (Browser)
For browser applications, connect to the Lace wallet extension:
const wallet = await Midday.Wallet.fromBrowser('preview');const client = await Midday.Client.create({ wallet, privateStateProvider: Midday.PrivateState.indexedDBPrivateStateProvider({ privateStateStoreName: 'my-app' }),});See the Browser Usage guide for more details.
Fee Relay
For browser apps where users don’t need to hold dust tokens:
const client = await Midday.Client.create({ wallet, privateStateProvider: Midday.PrivateState.indexedDBPrivateStateProvider({ privateStateStoreName: 'my-app', }), feeRelay: { url: 'http://localhost:3002' },});