{"id":400025,"date":"2026-11-13T11:20:21","date_gmt":"2026-11-13T11:20:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/backupino\/"},"modified":"2026-11-13T12:22:37","modified_gmt":"2026-11-13T12:22:37","slug":"backupino","status":"publish","type":"plugin","link":"https:\/\/fa.wordpress.org\/plugins\/backupino\/","author":23598687,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.5","stable_tag":"1.0.5","tested":"7.1.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Backupino","header_author":"Backupino","header_description":"Fast, resumable WordPress backups, cloning and migration with a self-contained installer.","last_updated":"2026-11-13 12:22:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Backupino\/documents","header_author_uri":"https:\/\/profiles.wordpress.org\/backupino\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":97,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.4":{"tag":"1.0.4","author":"backupino","date":"2026-11-13 11:20:14","revision":3800274},"1.0.5":{"tag":"1.0.5","author":"backupino","date":"2026-11-13 12:22:37","revision":3800363}},"upgrade_notice":{"1.0.5":"<p>Bundled full Persian (fa_IR) localization, static PNG\/SVG directory icons, and clean .distignore distribution packaging.<\/p>","1.0.4":"<p>Security, compliance, and platform hardening release addressing WordPress.org directory requirements.<\/p>","1.0.3":"<p>Security, compliance, and bug-fix release addressing official WordPress.org review requirements, externalizing assets, redacting database credentials, and fixing installer form submission.<\/p>","1.0.2":"<p>Feature and consistency update. Adds design token hooks for download page theming, unifies installer locale fallbacks, and standardizes file line endings.<\/p>","1.0.1":"<p>Security and stability maintenance release. Adds wp-content execution protection for standalone installer, cryptographically random package name suffixes for Nginx safety, defensive directory handling in JobRunner, and proper job type option handling.<\/p>","1.0.0":"<p>Initial production release of Backupino. Includes resumable backups, standalone installer, permanent login-gated download link, Telegram\/Bale notifications, monthly scheduling with Jalali support, and 100% offline-first architecture.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3800363,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3800363,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3800361,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.4","1.0.5"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[151,2814,48680,4155,152],"plugin_category":[59],"plugin_contributors":[292533],"plugin_business_model":[],"class_list":["post-400025","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-clone","plugin_tags-jalali","plugin_tags-migration","plugin_tags-restore","plugin_category-utilities-and-tools","plugin_contributors-backupino","plugin_committers-backupino"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/backupino\/assets\/icon.svg?rev=3800361","icon":"https:\/\/ps.w.org\/backupino\/assets\/icon.svg?rev=3800361","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Backupino packs your entire WordPress site \u2014 files and database \u2014 into a single archive plus a self-contained <code>installer.php<\/code> script that rebuilds the site on an empty server without WordPress being pre-installed.<\/p>\n\n<p>Designed specifically for real shared hosting environments with strict execution limits, Backupino ensures that your backup and migration operations run smoothly without timeouts or memory crashes.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Resumable Chunk-Based Engine<\/strong>: Backups are processed in small, restartable slices (scan, files, database, finalize). If execution hits a timeout or server hiccup, it automatically resumes from the last successful checkpoint.<\/li>\n<li><strong>Pure SQL Database Dumper<\/strong>: Dumps tables with keyset pagination directly through WordPress database APIs. No <code>mysqldump<\/code>, <code>exec()<\/code>, or shell access required.<\/li>\n<li><strong>Standalone Installer (<code>installer.php<\/code>)<\/strong>: Ultra-lightweight (~72 KB) installer generated dynamically. Extracts archives, streams SQL dumps, replaces URLs, and builds a fresh <code>wp-config.php<\/code> with unique security salts.<\/li>\n<li><strong>Deep URL Search &amp; Replace<\/strong>: Smart migration engine that accurately deserializes PHP structures (including nested arrays and objects) and rewrites JSON-encoded strings without corruption.<\/li>\n<li><strong>Permanent Latest-Backup Link<\/strong>: A secure, non-expiring URL that points directly to the newest backup. Protected by WordPress administrator authentication (<code>manage_options<\/code>) or a dedicated secret access key (<code>?backupino_key=...<\/code>).<\/li>\n<li><strong>Telegram &amp; Bale Notifications<\/strong>: Instant alerts sent to your personal bot upon backup completion. Includes backup scope, formatted size, completion date, and direct download link. Equipped with an automatic 3-attempt retry queue.<\/li>\n<li><strong>Automated Monthly Backup<\/strong>: Built-in scheduling triggered on the first day of each month. Native Jalali calendar calculation for Persian sites (<code>fa_IR<\/code>) and Gregorian for other locales.<\/li>\n<li><strong>Automatic Retention Management<\/strong>: Retains the latest backup packages (default: 3) and automatically prunes older archives to conserve disk space.<\/li>\n<li><strong>100% Offline-First Architecture<\/strong>: Zero external scripts, zero CDNs, and zero third-party fonts. All assets are served locally from your server.<\/li>\n<li><strong>Latin Digit Normalization<\/strong>: All numbers in timestamps, sizes, and interfaces use standard Latin digits (<code>0-9<\/code>) across all languages.<\/li>\n<li><strong>WP-CLI Support<\/strong>: Full command-line interface for sysadmins (<code>wp backupino create<\/code>, <code>wp backupino jobs<\/code>, <code>wp backupino status<\/code>).<\/li>\n<\/ul>\n\n<h4>Free vs Pro<\/h4>\n\n<p>The <strong>free plugin<\/strong> provides complete backup, migration, and clone capabilities with no arbitrary file size or database restrictions. Restoring or migrating an existing backup is 100% free forever.<\/p>\n\n<p>The optional <strong>Pro add-on<\/strong> (distributed separately) adds advanced enterprise features such as cloud storage destinations (S3, Google Drive, ArvanCloud, etc.), in-place rollback restore, multisite network support, and incremental backups.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin can optionally connect to external third-party services to deliver backup notification alerts to the site administrator:<\/p>\n\n<ol>\n<li><strong>Telegram Bot API<\/strong><\/li>\n<\/ol>\n\n<p>* <strong>Service<\/strong>: Telegram Messenger (<code>https:\/\/api.telegram.org<\/code>)\n* <strong>Purpose<\/strong>: Dispatches backup completion notifications and download links to your personal Telegram chat or channel.\n* <strong>Data Transmitted<\/strong>: Site domain name, backup scope (files\/database), formatted archive size, completion timestamp, and permanent download link. On migration restoration, sends new site URL and admin dashboard login URL.\n* <strong>When Sent<\/strong>: Data is transmitted ONLY when the site administrator explicitly enables notifications in Backupino Settings, selects \"Telegram\", and inputs their personal bot token and chat ID (or when triggering a test alert or completing restoration in the standalone installer). If notification service is set to \"None\" (default), no requests are sent.\n* <strong>Terms of Service<\/strong>: <a href=\"https:\/\/telegram.org\/tos\">Telegram Terms of Service<\/a>\n* <strong>Privacy Policy<\/strong>: <a href=\"https:\/\/telegram.org\/privacy\">Telegram Privacy Policy<\/a><\/p>\n\n<ol>\n<li><strong>Bale Bot API<\/strong><\/li>\n<\/ol>\n\n<p>* <strong>Service<\/strong>: Bale Messenger (<code>https:\/\/tapi.bale.ai<\/code>)\n* <strong>Purpose<\/strong>: Dispatches backup completion notifications and download links to your personal Bale chat or channel.\n* <strong>Data Transmitted<\/strong>: Site domain name, backup scope (files\/database), formatted archive size, completion timestamp, and permanent download link. On migration restoration, sends new site URL and admin dashboard login URL.\n* <strong>When Sent<\/strong>: Data is transmitted ONLY when the site administrator explicitly enables notifications in Backupino Settings, selects \"Bale\", and inputs their personal bot token and chat ID (or when triggering a test alert or completing restoration in the standalone installer). If notification service is set to \"None\" (default), no requests are sent.\n* <strong>Terms of Service<\/strong>: <a href=\"https:\/\/bale.ai\/terms\">Bale Terms of Service<\/a>\n* <strong>Privacy Policy<\/strong>: <a href=\"https:\/\/bale.ai\/terms\">Bale Privacy Policy<\/a><\/p>\n\n<!--section=installation-->\n<h4>From WordPress Admin<\/h4>\n\n<ol>\n<li>Navigate to <strong>Plugins<\/strong> -&gt; <strong>Add New<\/strong> in your WordPress dashboard.<\/li>\n<li>Search for <code>Backupino<\/code>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Open the <strong>Backupino<\/strong> menu and click <strong>Create Backup<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin archive and extract it.<\/li>\n<li>Upload the <code>backupino\/<\/code> folder to your <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate Backupino from the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20target%20server%20require%20wordpress%20to%20be%20installed%20for%20restore%3F\"><h3>Does the target server require WordPress to be installed for restore?<\/h3><\/dt>\n<dd><p>No. Upload your backup archive along with <code>installer.php<\/code> into an empty web directory and open <code>installer.php<\/code> in your browser. The installer unpacks files, imports your database, and sets up WordPress cleanly.<\/p><\/dd>\n<dt id=\"where%20are%20backup%20packages%20stored%3F\"><h3>Where are backup packages stored?<\/h3><\/dt>\n<dd><p>Packages are stored locally in <code>\/wp-content\/backupino\/packages\/<\/code> (outside of the public uploads directory for enhanced security and isolation). The directory is secured with <code>.htaccess<\/code>, <code>web.config<\/code>, and empty <code>index.php<\/code> guards to prevent direct public file browsing and execution.<\/p><\/dd>\n<dt id=\"does%20the%20permanent%20download%20link%20ever%20expire%3F\"><h3>Does the permanent download link ever expire?<\/h3><\/dt>\n<dd><p>No. The permanent link (<code>?backupino_download=latest<\/code>) never expires and always resolves to the most recent backup archive. For security, requests are protected by WordPress administrator authentication (<code>manage_options<\/code> capability) or by providing the secret download access key generated in settings (<code>?backupino_key=...<\/code>).<\/p><\/dd>\n<dt id=\"is%20there%20any%20file%20size%20or%20database%20limit%20in%20the%20free%20version%3F\"><h3>Is there any file size or database limit in the free version?<\/h3><\/dt>\n<dd><p>No. There are no artificial limits on package size or database rows. Backupino is designed to handle sites of any size through chunked, resumable processing.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20backup%20process%20is%20interrupted%3F\"><h3>What happens if a backup process is interrupted?<\/h3><\/dt>\n<dd><p>Backupino tracks its state per slice in the database. If a backup process is interrupted by a server timeout or network drop, opening the dashboard or triggering the next cron tick immediately resumes the process from the exact point of interruption.<\/p><\/dd>\n<dt id=\"does%20backupino%20support%20the%20persian%20%2F%20jalali%20calendar%3F\"><h3>Does Backupino support the Persian \/ Jalali calendar?<\/h3><\/dt>\n<dd><p>Yes. If your WordPress site language is set to Persian (<code>fa_IR<\/code>), Backupino automatically formats dates using the Jalali calendar and schedules monthly backups on the 1st day of the solar month. All numbers strictly use Latin digits (<code>0-9<\/code>).<\/p><\/dd>\n<dt id=\"can%20i%20run%20backups%20from%20the%20command%20line%3F\"><h3>Can I run backups from the command line?<\/h3><\/dt>\n<dd><p>Yes. Backupino includes built-in WP-CLI commands:\n* <code>wp backupino create<\/code> \u2014 start a new backup job.\n* <code>wp backupino jobs<\/code> \u2014 view active and historical jobs.\n* <code>wp backupino status<\/code> \u2014 inspect the current running job.<\/p><\/dd>\n<dt id=\"are%20third-party%20notifications%20required%3F\"><h3>Are third-party notifications required?<\/h3><\/dt>\n<dd><p>No. Notifications are completely optional and disabled by default. If you do not configure Telegram or Bale credentials, Backupino operates strictly locally without sending any outbound external requests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Localization: Bundled 100% complete Persian (fa_IR) translations (.po and .mo) for instant out-of-the-box native experience.<\/li>\n<li>Assets: Added crisp static PNG fallbacks (icon-128x128.png and icon-256x256.png) and removed SVG animations per WordPress.org guidelines.<\/li>\n<li>Packaging: Added .distignore and updated .gitattributes to ensure clean, non-leaking distribution packages in WordPress.org SVN.<\/li>\n<li>Automation: Hardened GitHub Actions release deployment workflow with SVN asset synchronization and concurrency locking.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Compliance: Removed unconsented public attribution text and credit links from public download landing page to comply with WordPress.org guidelines.<\/li>\n<li>Compliance: Removed error_reporting and ini_set production calls, replacing them with output buffering cleanup in standalone installer.<\/li>\n<li>Compliance: Eliminated raw cURL usage in standalone installer; post-restore notifications are safely enqueued and dispatched via native WordPress HTTP API (wp_remote_post).<\/li>\n<li>Security: Eliminated all procedural mysqli_* database calls; standalone installer now relies exclusively on PDO with parameterized prepared statements.<\/li>\n<li>Reliability: Quarantined server configuration files (.htaccess, .user.ini, php.ini) safely during extraction to prevent overwriting existing destination host configurations.<\/li>\n<li>Compatibility: Added case-insensitive table prefix healing to automatically resolve mixed-case table prefixes and user roles\/capabilities when migrating between Windows and Linux environments.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Security: Implemented <code>ConfigWriter::redact_secrets()<\/code> to strip credentials and salts from <code>wp-config.php<\/code> during package build, injecting clean <code>backupino-wp-config.tpl<\/code> template and generating fresh cryptographic salts on restore.<\/li>\n<li>Security: Replaced persistent physical installer PHP files in uploads storage with dynamic streaming download via <code>Fs::stream_string_download()<\/code>.<\/li>\n<li>Compliance: Streamlined default settings options and unified scheduling to standard monthly execution with extensible storage driver filters.<\/li>\n<li>Compliance: Externalized all inline CSS and JS assets into dedicated static cacheable files for both the public download landing page and the standalone installer.<\/li>\n<li>Compliance: Removed bundled <code>.po<\/code>\/<code>.mo<\/code> translation files to rely exclusively on WordPress.org official language packs (<code>translate.wordpress.org<\/code>).<\/li>\n<li>Hardening: Added cryptographic <code>hash_equals()<\/code> download token comparison, strict table prefix regex validation (<code>\/^[a-zA-Z0-9_]+$\/<\/code>), URL validation, and eliminated internal path disclosures.<\/li>\n<li>Hardening: Standardized all text files to Unix line endings (<code>LF<\/code>) with <code>.gitattributes<\/code> to eliminate <code>Internal.LineEndings.Mixed<\/code> warnings.<\/li>\n<li>Fix: Fixed undefined variable <code>$backupino_settings<\/code> in <code>templates\/settings.php<\/code> causing a fatal error on the options page.<\/li>\n<li>Fix: Prevented native form GET submission in Step 2 of the standalone installer and resolved button ID mismatch (<code>back-to-step1<\/code>) to ensure uninterrupted progression to extraction.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Feature: Added <code>backupino_design_tokens<\/code> and <code>backupino_download_page_styles<\/code> extension hooks for public download landing page customization.<\/li>\n<li>Consistency: Unified standalone installer fallback locale to <code>en_US<\/code> across all extraction and notification stages.<\/li>\n<li>Hardening: Fully normalized line endings to LF across all plugin files to prevent mixed line ending warnings.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security: Standalone installer now rejects direct execution inside <code>wp-content\/<\/code> with HTTP 403 Forbidden to protect Nginx servers against unauthorized calls.<\/li>\n<li>Security: Package filenames now include a 12-character random cryptographic suffix preventing URL enumeration or guessing on Nginx setups.<\/li>\n<li>Security: Removed static <code>installer.php<\/code> persistence from package storage; installer is safely served dynamically with clean download headers.<\/li>\n<li>Fix: Replaced invalid <code>Fs::mkdir()<\/code> call with <code>Fs::ensure_dir()<\/code> in JobRunner to eliminate fatal error on clean WordPress environments.<\/li>\n<li>Fix: Properly release and clean lock file on unexpected stage errors or job failures.<\/li>\n<li>Fix: Background cron scheduler now reliably identifies manual jobs via <code>$job-&gt;option('type')<\/code> avoiding concurrent runner collisions.<\/li>\n<li>Quality: 100% passed all 5 categories of the official WordPress Plugin Check (PCP).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Resumable backup engine supporting files and pure SQL database dumps.<\/li>\n<li>Standalone installer (<code>installer.php<\/code>) with deep JSON &amp; serialized search and replace.<\/li>\n<li>Permanent latest-backup download link with administrator authentication gate.<\/li>\n<li>Telegram Bot API and Bale Bot API notification channels with automated retry queue.<\/li>\n<li>Monthly automated backup scheduling (Jalali calendar for <code>fa_IR<\/code>, Gregorian for other locales).<\/li>\n<li>Retention management system with default 3-package threshold.<\/li>\n<li>Full internationalization (<code>backupino.pot<\/code> and Persian <code>fa_IR<\/code> catalog) with logical CSS for RTL\/LTR.<\/li>\n<li>Latin digit normalization (<code>0-9<\/code>) across all interfaces and dates.<\/li>\n<li>Strict security hardening: zero dangerous functions, Zip-Slip prevention, and capability-checked REST API endpoints.<\/li>\n<li>100% offline-first architecture with zero external CDN dependencies.<\/li>\n<li>WP-CLI command integration.<\/li>\n<\/ul>","raw_excerpt":"Fast, resumable WordPress backups, cloning and migration with a self-contained installer.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/400025","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=400025"}],"author":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/backupino"}],"wp:attachment":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=400025"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=400025"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=400025"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=400025"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=400025"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=400025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}