This document outlines the development roadmap for BackupForce — the free, open-source Salesforce backup and recovery tool.
Last Updated: December 19, 2025
BackupForce is an open-source Salesforce backup and recovery tool. Our goal is to provide enterprise-grade backup and recovery features, built by Salesforce admins for the community.
- 100% Free - No subscriptions, no per-user pricing, no storage limits
- Relationship-Aware - Smart backup/restore that preserves data relationships
- Cross-Platform - Native apps for Windows, macOS, and Linux (no Java required)
- Open Source - Full transparency, community-driven development
| Phase | Feature | Status | Priority |
|---|---|---|---|
| Phase 1 | Core Restore Infrastructure | ✅ Complete | High |
| Phase 2 | Data Source Handling | ✅ Complete | High |
| Phase 3 | Relationship Resolution | ✅ Complete | High |
| Phase 4 | Advanced Options | ✅ Complete | Medium |
| Phase 5 | Validation & Safety | ✅ Complete | Medium |
| Phase 6 | Testing | ✅ Complete | High |
| Phase 7 | Cross-Org Data Transformation | ✅ Complete | High |
| Phase 8 | Duplicate Record Handling | ⏳ Planned | High |
| Phase 9 | Related Record Creation | ⏳ Planned | Medium |
| Phase 10 | Relationship-Aware Backup | ✅ Complete | High |
| Phase 11 | Cascade Delete | ⏳ Planned | High |
| Phase 12 | Scheduled Automated Backups | ✅ Complete | High |
| Phase 13 | CLI & Automation | 🔥 Next | Medium |
| Phase 14 | Advanced Data Management | ⏳ Planned | Medium |
| Phase 15 | Enterprise Features | ⏳ Future | Low |
- Create RestoreExecutor class with Bulk API 2.0 integration
- Support for INSERT, UPDATE, UPSERT operations
- Automatic fallback to Composite API for small batches (≤200 records)
- Batch processing with configurable batch size
- Progress callbacks and cancellation support
- Restore screen with source selection
- Objects table with record counts
- Restore mode selection (Insert/Update/Upsert)
- Progress bar and status updates
- Stop/Cancel functionality
- Scan folders for backup CSV files
- Parse CSV headers to determine fields
- Count records in each file
- Display in UI table
- Query backup tables from configured database (DatabaseScanner)
- Support Snowflake, PostgreSQL, SQL Server sources
- Display available tables with record counts
- Handle schema differences between database types
- Parse JSON backup files (Future enhancement)
- Convert JSON to records for restore
- Support nested JSON structures
- Radio buttons for CSV/Database source
- Database connection picker
- Source validation before restore
- Use
_ref_*columns from enriched backups (RelationshipResolver) - Resolve lookup field values during restore
- Query target org for external ID matches
- Cache resolved references for performance
- Analyze object relationships (DependencyOrderer)
- Build dependency graph using topological sort
- Sort objects: parents before children
- Handle circular dependencies gracefully
- Auto-detect relationship fields via metadata
- Map source IDs to target IDs
- Support polymorphic relationships
- Wire up
preserveIdsCheckcheckbox - Use external ID upsert with original Salesforce ID
- Validate ID format before restore
- Dropdown to select external ID field for upsert
- Query available external ID fields from org
- Validate field exists on target object
- Compare source fields to target schema (FieldValidator)
- Auto-map matching fields
- Exclude non-createable/non-updateable fields
- Skip enrichment fields (ref*)
- Validate CSV structure before restore (FieldValidator)
- Check required fields are present
- Verify field data types match target
- Display validation errors before starting
- Preview mode without making changes
- Show what would be inserted/updated
- Generate validation report
- Retry logic for transient failures (up to 3 retries)
- Individual record error tracking
- Continue on error option
- Detailed error reporting with categorized messages
- Track created record IDs (Partial - IDs are tracked)
- Option to rollback on failure (Future enhancement)
- Delete records created in failed batch
- RestoreExecutor tests (RestoreExecutorTest)
- DependencyOrderer tests (DependencyOrdererTest)
- FieldValidator tests (FieldValidatorTest)
- Options and result classes tests
- End-to-end restore tests (Future enhancement)
- Mock Salesforce API responses
- Database source tests
- Large file handling (1M+ records)
- Memory optimization tests
- Concurrent restore tests
Cross-org restore allows restoring data between different Salesforce orgs that may have different configurations (RecordTypes, picklist values, users, etc.).
- Compare backup metadata with target org (SchemaComparer)
- Detect RecordType mismatches (missing, renamed)
- Detect picklist value differences
- Detect user reference mismatches
- Generate comparison report with suggestions
- TransformationConfig for persisting mappings
- Global user mappings (source user ID → target user ID)
- Global RecordType mappings (source → target)
- Per-object configurations
- Unmapped value behaviors (KEEP_ORIGINAL, USE_DEFAULT, SET_NULL, SKIP_RECORD, FAIL)
- Save/Load mappings to JSON file
- DataTransformer applies mappings during restore
- RecordType ID resolution
- User/Owner ID resolution
- Picklist value mapping
- Field renaming/mapping
- Custom value transformations (regex, prefix, suffix, etc.)
- Transformation statistics tracking
- REGEX_REPLACE - Pattern-based text replacement
- PREFIX - Add text before values
- SUFFIX - Add text after values
- TRIM - Remove whitespace
- UPPERCASE/LOWERCASE - Case conversion
- CONSTANT - Replace with fixed value
- LOOKUP - Replace based on lookup map
- Schema analysis with target org
- RecordType mapping tab with auto-suggest
- User mapping tab with auto-suggest
- Picklist mapping tab with auto-suggest
- Field mapping tab
- Custom value transformations tab
- Validation and apply functionality
- DataTransformerTest (37 tests)
- RecordType mapping tests
- User mapping tests
- Picklist mapping tests
- Field mapping tests
- Value transformation tests
- Statistics tests
- Edge case tests
Handle duplicate records during restore with configurable rules and actions.
- Define duplicate matching rules per object
- Match by field(s): Email, Name, External ID, custom fields
- Match criteria: Exact match, fuzzy match, case-insensitive
- Compound matching (multiple fields AND/OR)
- Query target org to find existing duplicates
- Skip - Don't import duplicate records
- Update - Update existing record with import data
- Overwrite - Replace all fields in existing record
- Merge - Update only empty fields in existing record
- Create Anyway - Ignore duplicates, create new record
- Fail - Stop import on duplicate found
- Choose which fields to update on duplicates
- Update only if source value is not null/empty
- Update only if source value is newer (date comparison)
- Append to multi-select picklists
- Custom merge logic per field
- Configure duplicate rules per object
- Preview duplicates before import
- Duplicate action selection
- Field-level merge configuration
- Duplicate handling statistics
- Track duplicates found vs created vs updated
- Export duplicate report (which records matched)
- Show field-level differences for review
Create related child records automatically during parent import (e.g., create Opportunity for each Account).
- Define parent-child relationships for import
- Select child object to create per parent
- Map parent fields to child fields
- Define default values for child fields
- Multiple child objects per parent (Account → Opportunity + Contact)
- Map parent fields to child fields (Account.Name → Opportunity.Name)
- Formula-based field values (e.g., Opportunity.CloseDate = TODAY() + 30)
- Static default values
- Conditional field population (if parent field X = Y, set child field Z)
- Pre-defined templates for common scenarios
- Opportunity defaults (Stage, CloseDate, Amount)
- Contact defaults (Role, Status)
- Custom object templates
- Save/load templates for reuse
- Check child duplicate rules before creating
- Skip child creation if duplicate exists
- Update existing child if duplicate found
- Parent-child atomic transactions (rollback both on failure)
- Visual relationship mapping interface
- Field mapping with drag-and-drop
- Default value configuration
- Preview generated child records
- Template management
- Import Accounts → Auto-create Opportunities
- Import Accounts → Auto-create Contacts
- Import Leads → Auto-create Tasks
- Import custom objects with related children
User Pain Point: "If I set a limit on Account, but say to preserve relationships, it should know to look at relationship objects and also download those records."
When backing up with record limits, automatically include related records to maintain data integrity.
- Analyze object relationships on backup start
- Build relationship graph (parent → child mappings)
- Identify lookup and master-detail relationships
- Detect polymorphic relationships (WhoId, WhatId)
- "Preserve Relationships" checkbox in backup options
- When enabled with record limit, auto-include related records
- Query related child records for each parent
- Example: Backup 100 Accounts → include all their Contacts, Opportunities, Cases
- Configure relationship depth (1, 2, 3 levels or unlimited)
- Level 1: Direct children (Account → Contact)
- Level 2: Grandchildren (Account → Opportunity → OpportunityLineItem)
- Level 3+: Deep hierarchies
- Generate WHERE clauses based on parent IDs
- Batch queries for large parent sets
- Use Bulk API for large related record sets
- Optimize query order for efficiency
- Generate manifest file listing all objects and counts
- Record relationship mappings in manifest
- Enable restoration in correct dependency order
- Include source org metadata snapshot
User Pain Point: "I want to be able to delete [a record] and delete all related records accordingly."
Smart deletion of records with all their related children — like deleting an Account and all its Cases, Contacts, Opportunities, etc.
- Analyze relationships for selected record(s)
- Build complete dependency tree
- Identify all child records across all objects
- Handle circular relationships
- Show what WILL be deleted before execution
- Display record counts per object
- Tree view of deletion hierarchy
- Export preview to CSV for approval
- Full Cascade - Delete record and ALL related children
- Selective Cascade - Choose which child objects to include
- Orphan Mode - Delete only, don't cascade (for cleanup)
- Backup First - Auto-backup before deletion (safety net)
- Delete in reverse dependency order (children first)
- Use Bulk API 2.0 for efficiency
- Progress tracking with record counts
- Error handling with partial rollback option
- Delete records matching a SOQL query
- Example: Delete all Accounts WHERE Industry = 'Test'
- Include all related records for each matched parent
- Useful for data cleanup and testing
- Option to hard delete (bypass recycle bin)
- Empty recycle bin after deletion
- Restore from recycle bin option
User Pain Point: "Someone can write scripts to auto run data loader and dump the files onto a server" — Let's make this easy without code!
- Backup schedule configuration screen
- Daily, weekly, monthly schedule options
- Time zone support
- Multiple schedules per connection
- Time-based scheduling (cron-like)
- On-demand manual trigger
- System startup trigger
- Post-deployment trigger (via webhook)
- In-app scheduler with ScheduledExecutorService
- Windows Task Scheduler integration
- macOS launchd integration
- Linux cron/systemd integration
- Headless backup execution
- Track LastModifiedDate for each object
- Only backup changed records since last run
- Full vs incremental backup modes
- Merge incremental into full periodically
- Email notifications on completion/failure
- Slack/Teams webhook integration
- Desktop notifications
- Backup log history
- Keep last N backups
- Delete backups older than X days
- Archive to external storage (S3, Azure, GCS)
- Compression for old backups
User Pain Point: "SFDMU is the cheapest way to create restorable backups, but also the most unfriendly UX wise"
-
backupforce backup- Run backup from CLI -
backupforce restore- Run restore from CLI -
backupforce delete- Run cascade delete from CLI - Configuration via JSON/YAML files
- GitHub Actions workflow examples
- Azure DevOps pipeline support
- Jenkins integration guide
- Docker container image
- PowerShell module
- Bash scripts
- Python SDK
- Node.js package
Based on common Salesforce pain points from the community.
- Export field history beyond 24-month limit
- Track all historical changes
- Rebuild field history timeline
- Analytics on field change patterns
- Compare backup to live org
- Show added/modified/deleted records
- Field-level diff view
- Generate change report
- Mask sensitive data during export
- Configurable masking rules per field
- Faker-style data generation
- GDPR/HIPAA compliance helpers
- Smart sandbox data population
- Configurable data volume
- Maintain relationships
- Anonymize for non-production
- Handle Contract status limitations
- Special logic for activated contracts
- Status field mapping during restore
- Full metadata export (classes, triggers, flows)
- Version control integration (Git)
- Metadata diff between backups
- Deploy metadata from backup
- Manage multiple Salesforce orgs
- Org-to-org data sync
- Central backup dashboard
- Org comparison tools
- Backup audit trail
- SOC 2 compliance features
- Encryption at rest
- Access logging
| Phase | Target |
|---|---|
| Phase 1-7 | ✅ December 2025 (Complete) |
| Phase 8-9 | ⏳ January 2026 |
| Phase 10 | 🔥 January 2026 (Relationship-Aware Backup) |
| Phase 11 | 🔥 January 2026 (Cascade Delete) |
| Phase 12 | ⏳ February 2026 (Scheduled Backups) |
| Phase 13 | ⏳ March 2026 (CLI) |
| Phase 14-15 | ⏳ Q2 2026 (Advanced Features) |
These features are planned for future releases:
- JSON File Support: Parse and restore from JSON backup files
- Manual Field Mapping: UI for mapping source fields to different target fields
- Full Rollback: Automatic rollback of all created records on failure
- Integration Tests: End-to-end tests with mocked Salesforce APIs
- Performance Tests: Large file and concurrent restore testing
Contributions are welcome! If you'd like to help with any of these features:
- Check the Issues page
- Comment on the feature you'd like to work on
- Submit a pull request
- ✅ Cross-Org Data Transformation (Phase 7)
- SchemaComparer for detecting org differences
- TransformationConfig for mapping configuration
- DataTransformer for applying transformations
- Transformation UI with auto-suggest
- 37 comprehensive unit tests
- ✅ DatabaseScanner for Snowflake/PostgreSQL/SQL Server
- ✅ RelationshipResolver for ref* column processing
- ✅ DependencyOrderer with topological sort
- ✅ External ID field selector UI
- ✅ FieldValidator for pre-restore validation
- ✅ Dry run mode for restore preview
- ✅ Retry logic with categorized error messages
- ✅ Unit tests for restore components
- ✅ RestoreExecutor with Bulk API 2.0 support
- ✅ RestoreController UI integration
- ✅ CSV folder scanning
- ✅ Basic insert/update/upsert operations