SplitPress
Wordpress Plugin to backup and restore large WP Sites.
by Med Toledo · github.com/medardotoledo/splitpress · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/medardotoledo/splitpress/archive/refs/heads/main.zipReadme
SplitPress
Avoid timeout crashes, memory exhausts, and server upload limits when migrating large WordPress installations.
SplitPress is a premium, developer-focused WordPress plugin designed to solve the "huge site migration crash" problem. Traditional backup tools fail on sites with large media libraries (e.g., multi-gigabyte uploads) or strict hosting limitations (e.g., 500MB upload limits, low PHP execution timeout, lack of mysqldump execution rights).
SplitPress solves this by dividing migrations into two distinct, manageable workflows:
- Configuration Package (.wpsm): A lightweight package containing a pure-PHP SQL dump (no command-line dependencies) and configuration metadata (active plugins, theme context).
- Segmented Media Archives (ZIP): An asynchronous, chunked packaging engine that slices the
/wp-content/uploads/directory into multiple smaller ZIP files (e.g., 200MB each) using AJAX recursion.
Key Features
- ⚡ Zero Timeouts (AJAX Chunking): Compresses media sequentially in bounded file list ranges, preventing PHP
max_execution_timetimeouts. - 🛠️ Pure-PHP SQL Exporter: Safely exports all database tables in batches of 500 rows. Works on any host without requiring
exec()ormysqldump. - 📦 Adjustable Archive Size: Allows the user to select the chunk limit (e.g., 100MB to 500MB) to respect target host
upload_max_filesizelimits. - 🔌 Zero External Dependencies: Native filesystem iterators and the standard PHP
ZipArchiveextension. - 🖥️ Premium Admin Dashboard: Modern Dark Mode dashboard built with native JS/AJAX, clean progress indicators, and an interactive import dropzone.
How It Works
Export Pipeline
- The database is queried chunk-by-chunk and written to a temporary SQL file, which is then compressed inside a
.wpsm(WordPress Split Migrate) zip wrapper along with active theme/plugin definitions. - The filesystem scanning engine maps
/wp-content/uploads/recursively into a cached JSON index. - The frontend triggers recursive AJAX calls. The server packs folders into sequential ZIPs (e.g.,
part1.zip,part2.zip), cutting off each archive as soon as the files' aggregate size exceeds the user-specified threshold.
Import Pipeline
- The user uploads the
.wpsmconfiguration file. The plugin parses the database instructions line-by-line, executing them without timing out. - The user uploads the media ZIP files sequentially. The plugin extracts them directly into
/wp-content/uploads/, matching their relative folder paths.
Installation & Setup
- Clone this repository or download the ZIP:
git clone https://github.com/medtoledo/splitpress.git - Upload the
splitpressfolder to your WordPress plugins directory (/wp-content/plugins/). - Activate SplitPress through the 'Plugins' menu in WordPress.
- Navigate to SplitPress in the WP Admin menu.
Tech Stack & Highlights
- Backend: WordPress API, PHP OOP,
ZipArchive,RecursiveDirectoryIterator, Database streaming. - Frontend: Vanilla JS, jQuery (WP Core wrapped), AJAX, CSS3 Grid/Variables, HTML5 Drag & Drop.
- Security: Cryptographic Nonces for AJAX calls, WP capability validation (
manage_options), file input sanitization.
License
This project is licensed under the GPL2 License - see the LICENSE file for details.