Upgrading Mixpost Pro to v7 from v6
Always back up your database before starting the upgrade. If something goes wrong, you will need it to restore your previous state.
This guide walks you through upgrading Mixpost Pro from v6 to v7. Choose the path that matches your installation method: Docker or PHP (manual / Laravel package).
v7 changes the default value of MIXPOST_CORE_PATH from mixpost to empty. Read Mixpost now runs at the root of your domain before you upgrade — it affects your dashboard URL and the Redirect URIs registered with your social provider apps.
Mixpost now runs at the root of your domain
From v7 the MIXPOST_CORE_PATH prefix is opt-in: it is empty by default and Mixpost is served from the root of the domain.
Only if you never set MIXPOST_CORE_PATH yourself. If your .env already sets it explicitly, your paths do not change at all — the value you set keeps working exactly as before.
What changes
| Dashboard | /<MIXPOST_CORE_PATH> | / |
| API | /<MIXPOST_CORE_PATH>/api/* | /api/* |
| MCP server | /<MIXPOST_CORE_PATH>/mcp | /mcp |
| OAuth callback | /<MIXPOST_CORE_PATH>/callback/{provider} | /callback/{provider} |
| Engagement webhook | /<MIXPOST_CORE_PATH>/inbox-webhook/{provider} | /inbox-webhook/{provider} |
| Uninstall callback | /<MIXPOST_CORE_PATH>/uninstall-callback/{provider} | /uninstall-callback/{provider} |
| Public pages | /pages/* | /pages/* — unchanged |
<MIXPOST_CORE_PATH> is the prefix your instance uses today — mixpost unless you set a different one. The After column shows where each route lands once MIXPOST_CORE_PATH is empty.
Public pages, manifest.json and the Bluesky OAuth metadata endpoints are registered outside the core path and are not affected.
A moved dashboard is obvious — you will see it the first time you open Mixpost. A moved callback URL is silent: already-connected accounts keep publishing, but the Redirect URI registered with each social provider app no longer matches, so reconnecting an account or connecting a new one fails. The same applies to the Engagement webhook callbacks.
Decide which of the three options below you want before you upgrade.
Option A — keep everything exactly as it is (recommended)
The safest path for an existing installation: pin the previous value and nothing changes. Use mixpost if you never changed it, or the custom prefix you chose at install time.
MIXPOST_CORE_PATH=mixpost
Your dashboard stays at https://example.com/mixpost, and every Redirect URI already registered with your social provider apps keeps working. There is nothing else to do.
Option B — dashboard at the root, callbacks unchanged
v7 adds MIXPOST_CALLBACK_PATH, a prefix that applies only to the callback routes.
It exists because a callback URL is not merely a setting on your side. Your social provider apps have already been authorized against those exact URLs, and several platforms tie their app review to them — changing a callback URL there means submitting for approval again and waiting for it, while account connections stay broken in the meantime.
This option moves the dashboard to the root while leaving every registered callback URL exactly where it is:
MIXPOST_CORE_PATH=
MIXPOST_CALLBACK_PATH=mixpost
The dashboard is served from https://example.com, while /mixpost/callback/{provider}, /mixpost/inbox-webhook/{provider} and /mixpost/uninstall-callback/{provider} stay exactly where your provider apps expect them.
Leave MIXPOST_CALLBACK_PATH empty to have the callback routes follow MIXPOST_CORE_PATH, which is the default.
FORCE_CORE_PATH_CALLBACK_TO_NATIVEMIXPOST_CALLBACK_PATH supersedes FORCE_CORE_PATH_CALLBACK_TO_NATIVE, which is now deprecated. The old variable still works — setting it to true is equivalent to MIXPOST_CALLBACK_PATH=mixpost — but MIXPOST_CALLBACK_PATH lets you choose any prefix, so prefer it in new configurations.
Option C — move to the root
Leave both MIXPOST_CORE_PATH and MIXPOST_CALLBACK_PATH empty. Your dashboard moves to https://example.com, and after upgrading you must update, for every social provider app you use:
- the Redirect URI — from
/<MIXPOST_CORE_PATH>/callback/{provider}to/callback/{provider} - the Engagement webhook callback URL, if you use Engagement — from
/<MIXPOST_CORE_PATH>/inbox-webhook/{provider}to/inbox-webhook/{provider}
Also update any API client or MCP client that has the old base URL hardcoded. The exact Redirect URI for each provider is always shown in that provider's service form inside Mixpost, so you can copy it from there after the upgrade.
Installed inside an existing Laravel application?
Keep a prefix. With an empty core path Mixpost registers its routes at the root of your application, including / itself. Routes defined by your own application are registered after the package's, so on a conflicting URI your route wins and Mixpost's is silently shadowed — a route that simply stops resolving, with no error at boot.
Set MIXPOST_CORE_PATH to a prefix of your choice (mixpost keeps your current URLs) and Mixpost stays isolated from your own routes.
Upgrade Using Docker
- Open the
.envfile next to yourdocker-compose.ymland apply the option you picked in Mixpost now runs at the root of your domain — setMIXPOST_CORE_PATH, andMIXPOST_CALLBACK_PATHtoo if your option uses it, to the values that option lists.
Mixpost rebuilds the .env inside the container from this file on every start, so anything you leave out falls back to the new defaults. An absent MIXPOST_CORE_PATH is exactly what moves your paths to the root.
- Navigate to the folder containing your
docker-compose.yml. - Run the following commands:
# Pull the latest version
docker compose pull
# Stop and remove the old container
docker compose down
# Start a new container
docker compose up -d
If something goes wrong, revert to the v6 image tag (inovector/mixpost-pro-team:v6) in your docker-compose.yml, restore your database backup, and run docker compose up -d again.
Upgrade in a PHP Environment
Choose your installation type below.
Manual Installation (PHP)
If you installed Mixpost Pro using the manual installation method, use the automatic upgrade script:
curl -fsSL https://raw.githubusercontent.com/inovector/MixpostProTeamApp/main/scripts/upgrade/upgrade_v7.sh | bash
The script handles dependency updates, migrations, asset publishing, and cache clearing.
Before or after running it, apply the option you picked in Mixpost now runs at the root of your domain to your .env — set MIXPOST_CORE_PATH, and MIXPOST_CALLBACK_PATH too if your option uses it. If MIXPOST_CORE_PATH is absent from your .env, Mixpost is served from the root.
Laravel Package
If Mixpost Pro is installed within an existing Laravel application, follow these steps.
Mixpost Pro v7 requires Laravel 12 or 13. If your application runs Laravel 10 or 11, upgrade Laravel first before proceeding.
Step 1. Update dependencies
composer require inovector/mixpost-pro-team "^7.0" -W
Step 2. Run database migrations
php artisan mixpost:upgrade-database --force
The command runs the upgrade migrations shipped with the package. Executed migrations are recorded in the migrations table, so it is safe to run more than once.
Step 3. Publish assets
php artisan mixpost:publish-assets --force=true
Step 4. Update config
If you previously published the Mixpost config file, re-publish it so the new keys are available:
php artisan vendor:publish --tag=mixpost-config --force
v7 changes the following config keys:
core_path(MIXPOST_CORE_PATH) — the default changed frommixpostto empty. Re-publishing the config applies the new default, so setMIXPOST_CORE_PATHin your.envbefore you re-publish — see Installed inside an existing Laravel application?.callback_path(MIXPOST_CALLBACK_PATH, new, default empty) — a prefix applied only to the callback routes. Empty means they followcore_path.force_core_path_callback_to_native(FORCE_CORE_PATH_CALLBACK_TO_NATIVE) — deprecated in favour ofcallback_path, still honoured.
See the environment variables reference for the full list.
Step 5. Raise retry_after on the queue connection
This step is specific to a Laravel package installation. You wrote the mixpost-redis connection yourself when you installed Mixpost, so nothing updates it for you — Docker and manual installations get the corrected value with the rest of the app files.
Open config/queue.php and raise retry_after on the mixpost-redis connection to 960:
'mixpost-redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 960,
'block_for' => null,
],
retry_after must stay above the longest supervisor timeout, which is 900 seconds. The value published with earlier versions — 11 * 60, that is 660 — sits below it on the growth and scale tiers: Redis considers a job abandoned while its worker is still running and hands it to a second one, so a post gets published twice and an analytics import runs twice.
v7 adds a check for this to the System Status page, which reports the value your connection needs for the tier you run. Restart Horizon after the change: php artisan horizon:terminate.
Step 6. Clear the cache
php artisan optimize:clear --except cache
php artisan mixpost:clear-services-cache
php artisan mixpost:clear-settings-cache
Step 7. Optimize application
php artisan optimize --except cache
Step 8. Restart Reverb
Only required if reverb is your BROADCAST_DRIVER. Skip this step otherwise.
php artisan reverb:restart
Step 9. Verify your routes
Confirm Mixpost is registered where you expect, and that none of its routes are shadowed by your application's own:
php artisan route:list --name=mixpost