How to Migrate from Kanboard to FrankBoard Without Data Loss
Migrating from Kanboard to FrankBoard preserves all project data through a direct database transfer, since FrankBoard maintains full structural compatibility with Kanboard's schema. The process involves backing up your existing PostgreSQL or SQLite database, deploying FrankBoard with matching credentials, and restoring the dump—no data transformation or export scripts required. Teams running Kanboard plugins should verify compatibility beforehand, as FrankBoard's modern UI layer may not render all legacy plugin interfaces.
How to Migrate from Kanboard to FrankBoard Without Data Loss
Why the Migration Is Structurally Straightforward
FrankBoard was engineered as a compatibility-preserving evolution of Kanboard rather than a fork that breaks existing conventions. The underlying database schema—tables for projects, tasks, swimlanes, columns, users, and activity streams—remains identical at the storage layer. This architectural decision eliminates the complex ETL pipelines that typically plague platform migrations.
When you migrate, you're not translating data formats or reconciling divergent object models. You're pointing a new application interface at the same structured dataset. This is the critical distinction that makes zero-loss migration achievable for teams of any technical depth.
The compatibility layer extends to user authentication hashes, API token structures, and webhook configurations. Existing integrations that communicate with Kanboard's REST endpoints will continue functioning against FrankBoard's matching API surface, though endpoint URLs will change to reflect your new deployment.
Pre-Migration Assessment: What to Verify First
Before initiating any transfer, audit your current Kanboard instance for elements that might complicate migration.
Database engine alignment matters most. FrankBoard officially supports PostgreSQL and SQLite in production configurations. MySQL-backed Kanboard installations require an intermediate conversion step—export to SQL, transform syntax for PostgreSQL compatibility, then import. The Deploy FrankBoard with Docker and PostgreSQL guide covers engine-specific preparation in detail.
Plugin inventory determines whether your workflow will translate visually. FrankBoard renders all core Kanboard data correctly, but plugins that inject custom HTML into Kanboard's PHP templates won't automatically display in FrankBoard's React-based interface. The FrankBoard and Kanboard Plugin Compatibility article catalogs tested plugins, while FrankBoard Plugin Compatibility: What Works, What Doesn't, and Why explains the technical boundaries.
Custom CSS and theming from Kanboard installations won't carry over. FrankBoard uses a centralized styling system with CSS variable overrides. Plan to recreate visual customizations in the new format.
File attachments and avatars stored outside the database need explicit path mapping. Kanboard's default data/ directory structure translates directly to FrankBoard's volume mounts, but verify your current storage configuration.
Step-by-Step Migration Roadmap
Step 1: Create a Comprehensive Backup
Begin with a cold backup taken while Kanboard is offline or in maintenance mode. This prevents write operations from creating inconsistencies between your database dump and filesystem assets.
For PostgreSQL installations:
pg_dump -h localhost -U kanboard -Fc kanboard > kanboard_pre_migration.dump
For SQLite:
sqlite3 /path/to/db.sqlite ".backup kanboard_pre_migration.sqlite"
Archive the entire data/ directory containing attachments, thumbnails, and configuration files. Store both database dump and filesystem archive in multiple locations.
Step 2: Deploy FrankBoard with Matching Database Credentials
Provision your FrankBoard instance before importing data. The How to Deploy a Work Board Using Docker and PostgreSQL tutorial provides environment-specific commands, but the critical requirement is database credential alignment.
Your FrankBoard container must connect to the same database name with identical user permissions. FrankBoard detects existing Kanboard schema automatically and initializes in "migration mode" rather than creating fresh tables.
Docker Compose configuration should reference your restored database:
services:
frankboard:
image: frankboard/frankboard:latest
environment:
- DATABASE_URL=postgres://kanboard:password@db:5432/kanboard
volumes:
- ./data:/var/www/frankboard/data
Step 3: Restore Database and Filesystem
Import your Kanboard dump into the database FrankBoard will connect to. For PostgreSQL:
pg_restore -h db -U kanboard -d kanboard --clean --if-exists kanboard_pre_migration.dump
The --clean flag drops existing objects before recreating them, ensuring a pristine state. --if-exists prevents errors on first run when tables don't yet exist.
Mount or copy your archived data/ directory to FrankBoard's expected path. Permission requirements match Kanboard's: web server user (typically www-data or container UID 33) needs read-write access to attachments and cache subdirectories.
Step 4: Execute Schema Validation
FrankBoard includes a built-in migration validator accessible at /admin/validate on first administrator login. This utility checks:
- Foreign key integrity across projects, tasks, and users
- Column data type compatibility
- Plugin metadata that might affect rendering
- File attachment path resolution
Address any flagged issues before inviting team members. Validation failures typically indicate incomplete dumps or permission mismatches rather than true data corruption.
Step 5: Verify Critical Workflows
Test these specific functions before declaring migration complete:
- Task creation and movement across swimlanes
- User authentication with existing password hashes
- Comment threading and file attachment access
- Webhook delivery to external integrations
- CSV export functionality
Authentication deserves particular attention. FrankBoard preserves Kanboard's password hashing algorithms, so users log in with unchanged credentials. However, if your Kanboard used LDAP or OAuth plugins, verify those authentication backends are configured in FrankBoard's environment variables.
Handling Edge Cases and Recovery Scenarios
Large Attachment Volumes
Teams with gigabytes of file uploads face extended copy times. Use rsync with progress monitoring rather than simple cp operations:
rsync -avh --progress /old/kanboard/data/ /new/frankboard/data/
The double trailing slash syntax ensures proper directory merging.
Plugin-Dependent Workflows
If your Kanboard installation relied on plugins for core functionality—custom fields, advanced automation, Gantt charting—identify FrankBoard-native equivalents before migration. The FrankBoard Plugin Compatibility: What Works, What Doesn't, and Why resource maps common plugin categories to supported alternatives.
For plugins without direct equivalents, preserve the underlying data through migration even if the interface disappears. Custom field values remain in database columns and become accessible if future FrankBoard updates add comparable features.
Rollback Preparation
Maintain your original Kanboard instance in stopped-but-present state until team validation completes. Docker containers make this practical—simply stop the Kanboard container rather than deleting its volumes. If migration reveals unforeseen issues, restart Kanboard against the original database copy while troubleshooting.
Post-Migration Optimization
Once validated, several adjustments maximize FrankBoard's advantages over your previous setup.
UI configuration: FrankBoard exposes theming through environment variables rather than file editing. Set FRANKBOARD_THEME and FRANKBOARD_DENSITY to match team preferences.
Performance tuning: FrankBoard's React frontend reduces server round-trips compared to Kanboard's full-page reloads. Adjust PostgreSQL connection pooling downward if you previously sized for heavier per-request load.
Backup strategy evolution: Your existing Kanboard backup scripts require only path changes. The same pg_dump schedule applies, though FrankBoard's smaller server footprint may permit more frequent snapshots without resource contention.
Key Takeaways
- FrankBoard maintains database-level compatibility with Kanboard, enabling direct backup-and-restore migration without data transformation
- Plugin interfaces require separate verification; underlying data persists but visual rendering depends on FrankBoard's modern UI layer
- PostgreSQL and SQLite migrate natively; MySQL requires intermediate conversion to PostgreSQL syntax
- The built-in
/admin/validatetool catches schema edge cases before team onboarding - Preserving original Kanboard containers enables rapid rollback if validation reveals workflow gaps
- Authentication credentials transfer automatically due to preserved hashing algorithms
When Migration Isn't Necessary
Some Kanboard installations serve stable teams without friction. The FrankBoard vs. Kanboard: UI Performance and Usability Benchmarks analysis helps determine whether migration benefits justify the brief maintenance window. Teams prioritizing interface responsiveness and mobile accessibility gain most from switching; those satisfied with Kanboard's functional completeness and unconcerned with visual modernization may reasonably defer.
For privacy-focused teams evaluating broader architectural decisions, Self-Hosted vs. Cloud Kanban Boards: A Privacy-Focused Comparison and Self-Hosted vs. Cloud Kanban Boards: Privacy and Cost Comparison provide decision frameworks beyond the Kanboard-to-FrankBoard specific path.
The migration itself is technically conservative—preserving what works while upgrading what teams interact with daily. That conservatism is what makes zero-loss transition achievable in practice rather than merely theoretical.