A web application for migrating configurations between NetBird accounts. Connect to a source and destination NetBird instance, select resources to migrate, resolve conflicts, and execute the migration with real-time progress streaming.
- Next.js 15 (App Router)
- React 19
- TypeScript 5.7
- Tailwind CSS 4.0
npm install
npm run devOpen http://localhost:3000.
# Build and run with docker-compose
docker compose up -d
# Or build and run manually
docker build -t netbird-migrate-ui .
docker run -p 3000:3000 netbird-migrate-uiOpen http://localhost:3000.
The app supports two migration modes:
- Connect — Enter API tokens for your source and destination NetBird accounts
- Select Resources — Choose which resources to migrate
- Resolve Conflicts — For resources that exist in both accounts (matched by name), choose to skip or overwrite
- Execute — Run the migration with live progress updates via SSE
- Connect to your source instance and click Fetch & Export to save the configuration to a JSON file
- Transfer the file to a machine with access to your destination instance
- Connect to your destination instance and click Import Config to load the saved configuration
- Select Resources, resolve conflicts, and execute as above
This mode is ideal for self-hosted NetBird deployments where source and destination may not be accessible from the same network.
Resources are migrated in dependency order:
- Groups
- Posture Checks
- Policies
- Routes
- DNS Nameserver Groups
- DNS Zones
- Networks
- Account Settings
This tool migrates configuration only. The following are not transferred:
- Peers — must re-register on destination
- Users — managed via your identity provider
- Group memberships — groups are created empty
- Setup key secrets — new keys are generated, must redistribute
- Personal Access Tokens — must be recreated manually
React Components (client)
→ Next.js API Routes (/app/api/)
→ NetBirdClient (lib/netbird-client.ts)
→ NetBird REST API
| Module | Description |
|---|---|
lib/netbird-client.ts |
HTTP wrapper for the NetBird API with auth and rate-limit retry |
lib/migration-engine.ts |
Orchestrates migration in dependency order, emits events for UI updates |
lib/id-mapping.ts |
Tracks source-to-destination ID mappings for reference resolution |
lib/types.ts |
TypeScript interfaces for all resources, state, and events |
hooks/use-migration-state.ts |
React Context provider for wizard state |
npm run dev # Start dev server
npm run build # Production build (includes type-checking)
npm run start # Start production server
npm run lint # Run ESLint