How to Migrate from Kanboard to FrankBoard
Migrating from Kanboard to FrankBoard preserves all existing task data because both platforms share the same underlying database schema. The process involves creating a backup, deploying FrankBoard alongside or in place of your existing instance, and redirecting your database connection—no complex data transformation is required.
How to Migrate from Kanboard to FrankBoard
What Makes This Migration Straightforward
FrankBoard is built directly on Kanboard's foundation, which means the database layer remains identical. Your projects, tasks, swimlanes, columns, users, and activity history all transfer without conversion scripts or manual field mapping. This architectural continuity eliminates the typical migration risks: data corruption, truncated histories, or broken relationships between records.
The primary change is the frontend layer. FrankBoard replaces Kanboard's dated interface with a modern, responsive UI while keeping the same REST API endpoints and plugin hooks where possible. For teams already comfortable with Kanboard's logic, this means zero retraining on workflow concepts—only a smoother visual experience.
Pre-Migration: Inventory Your Current Setup
Before touching any files, document your existing environment. Check your current Kanboard version, note which plugins are active, and verify your database type and size. PostgreSQL and MySQL are both supported, though PostgreSQL is recommended for new FrankBoard deployments due to better concurrency handling under the heavier frontend.
List any custom configurations in your config.php file: LDAP integration, SMTP settings, reverse proxy headers, or custom upload directories. These values transfer directly since FrankBoard reads the same configuration keys.
If you rely on Kanboard plugins, consult FrankBoard and Kanboard Plugin Compatibility to identify which extensions work unchanged, which need updates, and which have native FrankBoard equivalents.
Step 1: Create a Complete Database Backup
This is non-negotiable. Use your database's native dump tool:
PostgreSQL:
pg_dump -U kanboard_user -h localhost -Fc kanboard_db > kanboard_backup.dump
MySQL/MariaDB:
mysqldump -u kanboard_user -p kanboard_db > kanboard_backup.sql
Store this backup outside your server. Test that it restores correctly to a temporary database before proceeding. A verified backup is your only safety net if the migration encounters environment-specific issues.
Step 2: Preserve File Attachments and Data Directory
Kanboard stores uploaded files in a data directory, typically at /var/www/kanboard/data or wherever your Docker volume mounts. This directory contains task attachments, avatars, and plugin assets. Copy the entire directory:
rsync -avz /path/to/kanboard/data/ /backup/frankboard-data/
Verify the copy includes hidden files and maintains permissions. FrankBoard expects the same directory structure for file handling.
Step 3: Deploy FrankBoard Using Docker
The cleanest migration path deploys FrankBoard as a fresh container pointing to your existing database. This preserves your original Kanboard installation as a fallback until you confirm everything works.
Create a docker-compose.yml based on FrankBoard's recommended stack:
version: '3.8'
services:
frankboard:
image: frankboard/frankboard:latest
ports:
- "8080:80"
environment:
- DATABASE_URL=postgres://kanboard_user:password@db:5432/kanboard_db
- FRANKBOARD_PLUGINS_DIR=/data/plugins
volumes:
- ./data:/data
depends_on:
- db
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=kanboard_user
- POSTGRES_PASSWORD=your_password
- POSTGRES_DB=kanboard_db
volumes:
- ./postgres-data:/var/lib/postgresql/data
For detailed environment variables and security hardening, see Deploy FrankBoard with Docker and PostgreSQL.
If you're currently running Kanboard via Docker Compose, stop the Kanboard container but leave your database container running. Update the DATABASE_URL in FrankBoard's environment to point to the existing database host and credentials.
Step 4: Connect FrankBoard to Your Existing Database
Start only the FrankBoard container initially, keeping your database accessible. The application will detect the existing Kanboard schema on first connection and initialize its frontend metadata tables without altering core data.
Watch the container logs for connection errors:
docker-compose logs -f frankboard
Successful connection logs show schema recognition and cache warming. If you see authentication failures, verify your database user permissions include CONNECT, SELECT, INSERT, UPDATE, and DELETE on all existing tables.
Step 5: Verify Data Integrity
Log into FrankBoard with your existing Kanboard credentials. Systematically check:
- All projects are present with correct owners
- Task counts match your previous dashboard
- Swimlane and column structures are intact
- Task details, comments, and subtasks display correctly
- Activity streams show complete history
- File attachments open and download properly
Create a test task and verify it appears in the database alongside legacy records. This confirms write permissions are correct and the schema remains compatible.
Step 6: Switch Traffic and Decommission Kanboard
Once verification passes, update your reverse proxy or DNS to point your canonical URL to FrankBoard's port. Common patterns:
- Nginx: Update
proxy_passtohttp://localhost:8080 - Traefik: Change service labels to the FrankBoard container
- Cloudflare: Update origin IP or tunnel configuration
Maintain your Kanboard container stopped but present for 48-72 hours. This provides instant rollback if edge cases emerge under real team usage.
After the confidence period, remove the Kanboard container and reclaim its volume space. Retain your initial database dump indefinitely as an archival snapshot.
Handling Plugin and Customization Gaps
Not every Kanboard plugin has a FrankBoard equivalent. For critical workflow extensions, evaluate these paths:
- Native replacement: FrankBoard bundles several popular features (automatic actions, custom filters) that previously required plugins
- Community ports: Check if the plugin maintainer or FrankBoard community has released an updated version
- API integration: FrankBoard's API compatibility allows external scripts to replicate some plugin behaviors
- Feature request: The project maintains a public roadmap; missing capabilities may already be planned
Teams heavily dependent on niche plugins should run parallel instances longer or contribute to porting efforts. The core project management functionality, however, is fully preserved.
Migration Timing and Team Communication
Schedule the actual cutover during low-activity periods. Friday evenings or sprint boundaries work well for most teams. Announce the migration 48 hours ahead with:
- Expected downtime window (typically 15-30 minutes for verified backups)
- New URL if changing domains
- Brief screenshot of the new interface to set expectations
- Point of contact for edge-case reports
Post-migration, reserve 30 minutes for a team walkthrough. Even though workflows are identical, the visual reorganization of menus and the responsive board view benefit from quick orientation.
Troubleshooting Common Issues
Blank boards after login: Usually indicates the frontend cache hasn't warmed. Hard-refresh (Ctrl+Shift+R) or restart the container.
Missing avatars: The data directory copy likely omitted hidden files or wrong permissions. Verify .htaccess files and directory ownership match the container's www-data user.
Plugin errors in logs: Incompatible extensions attempting to load. Remove from plugins/ directory and restart.
Slow initial load: FrankBoard's UI is heavier than Kanboard's vanilla interface. Ensure your VPS meets minimum specs (2 CPU cores, 4GB RAM recommended for teams under 20 users). For performance expectations, review FrankBoard vs. Kanboard: UI Performance and UX Benchmarks.
Why Teams Choose This Path
The migration to FrankBoard represents a broader trend among small technical teams reclaiming control over their tooling. SaaS Fatigue: Why Small Teams Are Switching from Trello and Notion to Self-Hosted Kanban Boards in 2026 examines the motivations—recurring costs, data sovereignty, and feature bloat—that make self-hosted solutions attractive.
For teams already invested in Kanboard's reliability, FrankBoard offers modernization without abandonment. The migration preserves institutional knowledge embedded in years of task histories while delivering an interface that matches contemporary expectations.
Those evaluating whether self-hosting aligns with their constraints should consult Self-Hosted vs. Cloud Kanban Boards: A Privacy-Focused Comparison or its cost-focused companion, Self-Hosted vs. Cloud Kanban Boards: Privacy and Cost Comparison.
Key Takeaways
- FrankBoard uses Kanboard's database schema directly—no data conversion or export/import process is needed
- The complete migration requires only a database backup, file directory copy, and Docker container deployment
- Verify backup integrity before any changes; maintain the original Kanboard instance as fallback for 48-72 hours
- Most core functionality transfers immediately; plugin compatibility requires individual verification
- The migration typically completes in under 30 minutes of downtime for prepared teams