Your Old Store Walks Into Your New One Like It Always Lived There
The component that actually knows where your products, orders, customers, addresses, coupons, taxes, and images need to land. Plug in. Press Migrate. Stop sweating.
Migration. The Word That Makes Store Owners Sweat.
You've been putting this off, haven't you. The catalog you've built over years. The thousands of orders. The customers, addresses, saved carts, the discount codes you handed out last Black Friday. All of it lives in the old place. All of it has to end up in the new place. And the little voice in your head has been whispering “what if it breaks” for six months.
That's not migration. That's a hostage situation, and your data is the hostage. The longer you wait, the more data you have to move, the higher the stakes, the worse the eventual scramble. The store down the street already moved. They're outrunning you while you stare at a phpMyAdmin window like it's going to migrate itself.
Stop Being Held Hostage By Your Own Database
Not a CSV exporter. Not a generic data importer that asks you to map 80 fields by hand. An actual migration engine that knows where everything goes.
One-Click Dashboard
Open the component. See every tier. Press Start. Watch the progress badge tick through. No console commands required.
Tier-Based Engine
Catalog → customers → orders → images → menus → templates. Each phase finishes before the next starts. A bad row doesn't blow up the entire run.
Pre-Flight Analyzer
Before a single row moves, the analyzer scans your source database and tells you what's coming, what's risky, and what needs your attention. You see the report. You decide.
ID Mapping That Doesn't Break References
Source ID 4827 becomes destination ID 12. The map gets stored. Orders still reference the right products. Customers still own the right addresses. The thing nobody else gets right.
Image Migration That Actually Works
Discovers every product image. Copies the file. Rewrites the reference. Your three years of product photography land in the new store still attached to the right product. No gray boxes.
Menu Migration — SEO Stays Alive
Your Joomla menus that pointed at old store views get rewritten to point at the new ones. Your URLs stay alive. Your Google rank doesn't get nuked.
CSS & Template Migrator
Your custom CSS and custom templates from the old store get translated and ported across. Your custom look survives the move. Your designer doesn't get a 2 a.m. phone call.
Akeeba Backup On Autopilot
One toggle. The migrator asks Akeeba to take a fresh backup before it touches a row. Your safety net is automatic. If anything goes sideways, you're already covered.
Verification — Receipts For Everything
Products in: 2,847. Products out: 2,847. Orders in: 18,219. Orders out: 18,219. One screen tells you “you're whole.” The difference between a confident go-live and a panicked one is having receipts.
Row-Level Error Log
Anything that didn't import lands here with source row, destination row, and actual error message. You debug surgically. You stop grepping log files at midnight.
Runs History — Forever
Every migration run logged. Re-run, audit, compare. Your migration history becomes a paper trail you can show your accountant, your partner, or your future self.
CLI Commands For Massive Stores
Migrating a million-product catalog from a laptop browser is a recipe for a timeout. Run it from the shell instead. No browser babysitting. No spinner forever.
Stores That Stopped Procrastinating
Install It. Press Migrate. Have Dinner.
You can keep telling yourself the migration is too risky, too expensive, too disruptive. You can keep limping along on a store platform that's slowly bleeding you. Or you can install the migrator, point it at your old database, press Start, and have your new store running by dinner.
Translated In The Following Languages
Arabic Unitag (ar-AA), Chinese, Traditional (zh-TW), Danish (da-DK), Dutch (nl-NL), English (en-GB), English, USA (en-US), Finnish (fi-FI), French (fr-FR), German (de-DE), Greek (el-GR), Hebrew (he-IL), Italian (it-IT), Japanese (ja-JP), Norwegian Bokmål (nb-NO), Persian Farsi (fa-IR), Polish (pl-PL), Portuguese, Brazil (pt-BR), Portuguese, Portugal (pt-PT), Russian (ru-RU), Spanish (es-ES), Swedish (sv-SE), Turkish (tr-TR)
- Developer J2Commerce
- Extension Type Migration, Component
- J2Commerce Version 6.x
- Joomla Version 6.x
Arabic Unitag
Chinese, Traditional
Danish
Dutch
English
English, USA
Finnish
French
German
Greek
Hebrew
Italian
Japanese
Norwegian Bokmål
Persian Farsi
Polish
Portuguese, Brazil
Portuguese, Portugal
Russian
Spanish
Swedish
TurkishImprovement Require Super User permissions for the Access Control step and tool
Improvement Require Users admin permission for the Shopware customer groups tool
Improvement Require Users permissions for the Shopware customer import
Improvement Require Users delete permission for the Shopware migration reset
Improvement Require Users permissions for the onboarding clean start when it resets user data
Fix Show translated labels for the resync conflict-mode options instead of raw language keys
Fix Show the menu migration empty state with its translated title, text and button
New Feature Add the missing labels for adapter status, run status, menu actions and the configuration step
Improvement Translate 226 strings that were missing from 20 locales
Improvement Number the placeholders in five multi-value strings so translations can reorder them
Fix Fix the Sync Store screen failing to load its settings for the page scripts
Improvement Resolve the event dispatcher from the DI container across the component
Improvement Apply the template tools' administrator check in the templates model as well
New Feature Register the remaining Tools screen labels used by its report and summary
New Feature Keep every migrated customer on the same user ID as the source site
New Feature Show user ID conflicts in a modal so each one can keep a new ID or overwrite
Improvement Move a matched or displaced account and everything that references its user ID
Improvement Never move a Super User account or the account running the migration
Improvement End the sessions and remove the passkeys of any account whose user ID changes
Improvement Never reuse a user ID that rows from a deleted account still reference
Improvement Number accounts that cannot keep their ID from a block above the source range
Fix Fall back to bootstrap5 for a menu subtemplate nothing on the site can render, instead of a fatal product page
Improvement Hold both core-tier routes for contacts, menus, modules and redirects to the same component rights as their tools
Improvement Map any migrated item whose access level has no migrated match to the most restrictive level and report it
New Feature Migrate Joomla menus, menu types and site modules with their menu assignments
New Feature Migrate contacts and contact categories
New Feature Convert sh404SEF URLs and aliases into Joomla redirects so old links keep working
Fix Copy custom field values, which a table with no primary key left empty
Fix Point content tags at the migrated articles instead of the source article ids
Fix Keep every row of composite-key link tables such as product filters when paging
Improvement Recreate item-level asset rows through the item tiers instead of copying source ones
Improvement Require a password reset for accounts whose source password cannot be verified here
Improvement Resolve a migrated menu item's component from its rewritten link
Improvement Hold the menus, modules, redirects and contacts tools to their own component's rights
New Feature CLI migrate: separate source database (--mode B/C), --tiles run order and --source-path
Fix Run the Joomla article step from the CLI
Fix Keep contacts whose linked user no longer exists, clearing the link instead
Fix Remap J2Store product permalinks and category filters to their J2Commerce targets
Fix Rewrite the additional-images column using the J2Commerce product image key
Fix Apply the PHP and Joomla version floors the package installer only declared
Improvement Raise the declared PHP floor to 8.3, the version Joomla 6 itself requires
Improvement Move the package installer to the Joomla 6 installer-script interface
Fix Stop the package installer emitting a deprecation notice on every install
Improvement State rollback support explicitly instead of leaving it implied
Update Name the Joomla requirement when installing on a release that is too old
Fix Write a rebuilt image under a name carrying exactly one extension
Fix Read an image reference's type from one canonical extension, so a query string cannot disagree with it
Fix Migrate an SVG whose URL carries a query string, which was previously refused
Fix Apply the allowed-extensions setting to an image reference given as a URL, not only a stored path
Fix Accept gzip bytes only for a .svgz reference, not for a .svg
Update Records why narrowing the SSRF guard opt-in to the source site is not yet possible
Fix Migrate articles and categories from a Joomla 3 source without expiring them on their publish date
Fix Drop source columns the target schema does not have, so a Joomla 3 row no longer fails to insert
Fix Skip the workflow copy when the source has no workflow tables
Fix Remap the legacy Bootstrap 2, 3 and 4 subtemplate names on migrated menu items
Update Applies to a Joomla 3 or J2Store 3 source; a Joomla 4+ source is unaffected
Fix Write additional image, thumbnail and tiny image JSON as an index-keyed object, matching the core component
Fix Treat a protocol-relative image URL as remote instead of a site-relative path
Fix Check a downloaded image's type from its bytes and cap its pixel count before resizing
Fix Refuse a downloaded image the temporary file could not be written for
Update Records what still blocks reusing the core component's own image guard and downloader
Fix Keep tag filters on migrated brand and deal menu items (tag alias to tag id)
New Feature Repair Menu Links restores the tag filter on already-migrated tag menus
Fix Fix Detect Custom Tables report listing no tables when tables exist
Fix Fix Detect Template Overrides report listing nothing
Fix Fix command-line audit printing empty tables
Fix Show Note and Default Page column labels on the migrated menus screen
New Feature Add an accessible label to the migrated menu Note field
Update Requires the j2commerce4 adapter 6.2.1 for the matching data-tile fixes
Fix A dependent step stays locked while a completed step has an unacknowledged ID reassignment, and Run All says so instead of skipping in silence
Fix A preview of a Tools step is reported as a preview rather than as a completed step
Fix A dry run changes no migrated data: no id map row, no category, no account and no completion marker, in the Joomla core lane as in every other tier
Fix Dry-run all and the per-tile Dry-run now run a real preview in report mode and record a Dry Run history row
Fix A sync no longer counts every row a second time as skipped, so processed equals the source count
Fix A user left alone under skip mode is still mapped, so profiles and notes attached to it migrate; the run reports how many were skipped
Fix When the source is the site's own database the Joomla core tiers map rows onto themselves instead of cloning categories, articles and notes
Improvement Hold finishing a run row to the same permission as the actions that write migration data
Fix A source address is screened against all of its DNS answers, not just the first
Fix Apply J2Commerce defaults for dashboard statuses, downloads folder and badges
Fix Clear the id map when a table is reset, so an empty table no longer reads Synced
Fix Count only migration tiles for progress, so a finished run reads as finished
Fix Drop a profile or note whose owner has no mapped target account
Fix Every resync entity group now passes the same backup gate, schema check and source interlock, including Users and Content
Fix Explain the handshake failure when the source server does not offer TLS
Fix Fix inserted rows being counted as skipped and left out of the id map
Fix Fix Order Infos and Order Breakdown reporting Partial 0 of N after a completed run
Fix Hold the tile_completed marker back until the tier accounts for every source row
Fix Honour Skip on a re-run so an existing account is left completely alone
Fix Honour the category selection when migrating content
Fix Keep a literal #__ in migrated content from being rewritten to the table prefix
Fix Keep one-time tools marked done instead of reverting to Pending on reload
Fix Keep this site's own API token where the source also carries one
Fix Let the SSL/TLS switch turn off for the direct database mode as well
Fix Map the group ids inside copied permission rules instead of reusing source ids
Fix Match migrated view levels to this site's own instead of reusing source ids
Fix Migrate images whose stored path starts with a slash
Fix Rebuild the user group tree after migrating it, as the other tree copies do
Fix Remote image fetches re-check each redirect hop instead of following it blindly
Fix Report real source and target row counts in the verify command
Fix Resolve every user group to a real target group before granting membership
Fix Rewrite leftover J2Store language keys shown as raw text on screen
Fix Show & instead of & in two admin labels
Fix Stop a blank download status list switching every customer download off
Fix Stop a resync wiping profile keys the source has no opinion about
Fix Stop articles being filed into a new category named after a number
Fix Stop the migrator running silently wrong on the PDO MySQL driver
Fix Stop the tools view reporting a tile Synced when only part of its rows migrated
New Feature Add --include-tools to run the held-back tiles in the same pass
New Feature Add a tool that rewrites leftover J2Store keys on a store migrated earlier
New Feature Change detection by watermark or row hash, resumable — a stopped run picks up where it left off instead of rescanning
New Feature Delta Resync: re-run a migration against a source store that kept trading, and move only what changed
New Feature Dry-run mode: see the would-insert / would-update / would-conflict table and a CSV artifact before writing anything
New Feature Fall back to the configured image folder when a source image is not at the root
New Feature Headless `j2commerce:migrator:resync` CLI command so large stores never run a six-figure delta through admin AJAX
New Feature Log every group that could not be mapped, instead of guessing one
New Feature Mandatory backup gate before any resync writes, with a single explicit headless override
New Feature New Console plugin so the migrator's CLI commands appear in `joomla list`
New Feature Payment token copy for J2Commerce 4 sources, off by default
New Feature Pin every mapped tier to the tile the layout puts on it
New Feature Pin the parameter-type return value and the held-back tier list against a silent drift
New Feature Privileged usergroup membership is withheld by default and every grant or withhold is recorded in the run report
New Feature Resync batch size and default conflict mode are configurable in component options
New Feature Resync wizard in the admin, with per-entity-group conflict modes (skip, overwrite, merge, report, newest-wins)
New Feature Resync writes go straight to the tables, so a delta never re-fires order events, customer emails or stock adjustments
New Feature Source Site URL is held to public addresses by default, with an explicit opt-in for local and LAN migrations
New Feature Source Site URL setting so product images can be fetched over HTTP when source files are not on this server
Improvement A command-line run that names no tier now runs the data tiers only
Improvement Align the console plugin and the J2Commerce 4 adapter versions with the component
Improvement Connection wording no longer assumes the source store is J2Store
Improvement One shared guard now decides every outbound fetch, replacing three separate copies
Improvement Rename the connection switch to Use SSL/TLS and add help text
Improvement Repaint a tile carrying an older marker at its real partial progress instead of 100%
Improvement Row-write primitives moved into a shared trait, so adapters reuse the engine instead of duplicating it
Improvement Separate a row matched onto an existing record from a row that was simply skipped
Improvement Tell the tools view which tiers keep no idmap accounting, so their row count is not overwritten with zero
Improvement Trust the completion marker for those tiers only when the current session has no run figures of its own
Improvement Verification now covers the resync path and reports per-entity results
Improvement Adapters that cannot count their source rows keep the previous trust-the-marker behaviour
Improvement An interrupted run on such a tile still reports Partial rather than a false Synced
Update Requires Joomla 6.x and J2Commerce 6.x. Package installs the component plus the J2Commerce 4 adapter and Console plugins
Fix PR928 conflict handling, natural-key matching and an authorization sweep
Fix PR929 close the menu-write authorization gaps and stop the review screen wiping languages
Fix PR930 restore in-place menu items from a recorded link instead of guessing
Fix PR979 diskless report exports, full locale sync
Fix PR984 close the carried-forward authorization and disclosure gaps
Fix PR994 encrypt the source-store connection by default
Fix PR1003 retire the J2Store 4 adapter
Fix PR1004 migrate the store template setting to a template that exists
Fix PR1006 stop packaging local tooling files into the component zip
Fix PR1007 make the artifacts download_token migration re-runnable
Fix PR1008 move migrated credentials out of the export surface, repair the WordPress verifier
Fix PR1012 carry migrated passwords into Joomla's own format
Fix PR1028 retire the interim credential store
Fix PR1033 complete the shipped locale set
Fix Fix migration stopping early with holes on large tables — the skip-join now paginates the raw source before filtering, so every order, cart, and history row migrates
Fix Fix batched ID-map writes silently dropping rows on an InnoDB deadlock — add a transient-error retry with backoff
Fix Fix table-name resolution corrupting names whose body contains the DB prefix (e.g. prefix commerce_ turned j2commerce_weights into j2weights)
Fix Fix Reset Migration ID Map and the other destructive tools — the typed-confirmation phrase is now sent to the server and the prompt states exactly what to type
Improvement Keep the status summary bar as the last item so tool cards render above it instead of hidden below
Fix
Improvement Widen migration coverage for shortcode-only stores
Improvement Store-settings fix, easycheckout menus, diagnosable tools
Improvement Robust category migration + help URL [version bumped]
Improvement Sanitize legacy-encoded config values so Migrate Store Settings doesn't error [version bumped]
Fix Reset Migration ID Map no longer reports a false error
New Feature Configure Connection link to all adapters
Fix
Fix
New Feature Encrypt stored Mode B/C source-database passwords at rest (AES-256-CBC)
New Feature Add Setup Guide onboarding wizard for first-time migration setup
New Feature Add connection probe-table validation before a migration run
Fix Complete db_password_encrypted schema (install SQL + 6.0.0 update SQL)
Improvement Rebase local feature work onto 6.0.8 base
Update Keeps repo translations, Mode B connection fix, and Linux Akeeba field-case fix
Update Requires Joomla 6.x + J2Commerce 6.x
Fix
Fix Akeeba field types load on Linux
Improvement Updated help links
Improvement Reliable Mode B connection
New Feature Images tile progress
Fix move HikaShop tile layout from component into HikaShop plugin
New Feature support for 19 more languages
Fix Fixed wrong package inclusion
New Feature Update server for automatic updates
New Feature J2Commerce v6 and Joomla 6 support
The J2Store 4 / J2Commerce 4 Adapter Is Already In The Truck
This is the one you came here for. If your store is on J2Store 4 or J2Commerce 4 right now, you already have the moving truck loaded — it shipped in the same package as the migrator itself.
The adapter knows the source layout cold. Products, variants, orders, order items, customers, addresses, coupons, vouchers, taxes, geozones, shipping methods, payment methods, custom fields, downloads, subscriptions — every table you care about has a mapped path into the new store.
- You don't write column mappings
- You don't translate primary keys
- You don't try to figure out where variant options live in the new schema
- The adapter handles all of it. You watch the dashboard turn green.
The hardest part of any migration is the source-to-destination map, and that map is already drawn for the two source platforms most existing customers are on. The work somebody else would charge you four figures to do — the migrator does it before lunch.
Tier-Based Migration That Doesn't Crash When One Row Misbehaves
Most generic “import everything in one transaction” tools die the second they hit a single bad row. Half your catalog made it, half didn't, and the half that didn't is the half you care about most. You roll back. You panic. You try again. Same result.
This migrator works in tiers, and inside each tier, in batches. A bad row gets logged, the batch finishes, the tier moves on. At the end you have a list of every problem child with exactly what went wrong. You fix those. You re-run the tier.
The phrase you want at 11 p.m. on go-live night is “the rest finished, here's the list of 3 rows to look at” — not “everything failed, start over.”
Verification After Every Run
The migration finishes. Now what? Now you need to trust that everything came across. Not believe — trust, with evidence.
The verification service compares source row counts to destination row counts for every entity. Products in: 2,847. Products out: 2,847. Orders in: 18,219. Orders out: 18,219. Images in: 11,402. Images out: 11,402. One screen tells you you're whole.
If something didn't make it, the verifier names it and the error log explains why. You fix and re-run that slice. You don't re-run the whole migration. You don't lose what already worked.
Stay Updated
Subscribe for free and be the first to know about the latest features, updates, and new additions.