WordPress Multisite Alternative β Multi-tenant WordPress with shared MySQL, domain and path routing, and isolated uploads. No Multisite complexity. No per-site server overhead.
π Website & Documentation: grabwp.com
WordPress PHP License WordPress.org
GrabWP Tenancy turns a single WordPress installation into a multi-tenant platform β perfect for freelancers, agencies, and SaaS builders who need to host multiple client sites without spinning up separate servers.
- No WordPress Multisite required β avoids network admin complexity and shared-database risks
- Shared MySQL with tenant prefixes β cost-effective isolation, each tenant gets its own table prefix
- Flexible routing β domain-based or path-based (e.g.,
yoursite.com/site/abc123) with zero DNS changes - Isolated uploads β each tenant's media is stored in a dedicated directory
- Lightweight β loads before WordPress core hooks for minimal overhead
| Resource | Link |
|---|---|
| π₯ WordPress.org | Plugin Directory β official distribution |
| π Documentation | grabwp.com β complete guides and support |
| π¬ Support Forum | WordPress.org Forum β community help |
| π Issues | GitHub Issues β bug reports |
| β Reviews | Rate on WordPress.org |
| Feature | Details |
|---|---|
| Shared MySQL | Tenant isolation via unique table prefixes ({tenant_id}_) |
| Separated Uploads | Each tenant gets wp-content/grabwp-tenancy/{tenant_id}/uploads/ |
| Domain Routing | Map any custom domain to a tenant |
| Path-Based Routing | Host tenants on subdirectories β no DNS changes needed |
| Shared Themes & Plugins | All tenants share the same extensions |
| Tenant Cloning | Duplicate any tenant (or mainsite) including DB + files |
| Admin Interface | Full tenant CRUD with list table, edit, delete, clone |
| Security Controls | Hide plugin/theme management, disallow file edits per tenant |
| One-click Setup | Auto-install MU-plugin and wp-config.php loader from admin |
Need complete isolation for your client sites or Wordpress SaaS platform? GrabWP Tenancy Pro takes you from shared infrastructure to per-tenant independence:
| Feature | Description |
|---|---|
| Dedicated MySQL or SQLite per tenant | Complete data isolation β zero cross-tenant risk, no shared tables |
Full wp-content separation |
Each tenant gets isolated themes, plugins and uploads |
| AJAX Backup & Restore | 7-step backup and 8-step restore with real-time progress UI |
| Cross-database migration | Move tenants freely between shared MySQL, dedicated MySQL, and SQLite |
| Extension sync & management | Sync plugins/themes with filesystem; switch between symlink and copy installs |
| Broken symlink auto-repair | One-click detection and repair for broken plugin/theme symlinks |
| Custom tenant data location | Store content anywhere β outside wp-content/uploads via settings or wp-config.php |
| Per-tenant config files | Each tenant gets its own wp-config.php; new tenants inherit master defaults |
From $9.99/month β all plans include every Pro feature.
Use code **EARLYBIRDPRO** at checkout for 20% off.
π Get GrabWP Tenancy Pro β
- WordPress 5.0+ (tested up to 6.9)
- PHP 7.4+
- Go to Plugins > Add New in your WordPress admin
- Search for "GrabWP Tenancy"
- Click Install Now then Activate
- Add to
wp-config.php:
require_once __DIR__ . '/wp-content/plugins/grabwp-tenancy/load.php';The plugin's Status page provides a one-click auto-installer for both the MU-plugin and
wp-config.phpline.
- Download from WordPress.org Plugin Directory
- Upload
grabwp-tenancyto/wp-content/plugins/ - Activate and follow the Status page setup wizard
π Need help? See the complete documentation or the support forum.
wp-content/
βββ grabwp-tenancy/ # Tenant data (outside uploads for security)
β βββ tenants.php # Domain/path mappings
β βββ {tenant_id}/
β βββ uploads/ # Isolated uploads per tenant
βββ plugins/
βββ grabwp-tenancy/ # Base plugin
- Shared MySQL with tenant prefixes (
{tenant_id}_) - Cost-effective isolation β no extra databases needed (Pro adds dedicated DB option)
$tenant = [
'id' => 'abc123', // 6-char alphanumeric
'domains' => [ // Array, primary domain first
0 => 'client1.example.com',
1 => 'alias.example.com',
],
'status' => 'active', // active | inactive
'created_date' => 1714000000,
];Tenants can be served on custom domains or path-based subdirectories using the nodomain.local placeholder:
$tenant_mappings = [
'abc123' => ['tenant1.example.com'],
'def456' => ['nodomain.local'], // β yoursite.com/site/def456
];flowchart TD
A[HTTP Request] --> B[Extract domain or path]
B --> C[Load tenants.php]
C --> D[Search tenant mappings]
D --> E{Found?}
E -->|Yes| F[Set tenant context]
E -->|No| G[Use default/main site]
F --> H[Set DB prefix]
F --> I[Set content paths]
G --> J[Continue as main site]
H --> K[Initialize WordPress]
I --> K
J --> K
K --> L[Process request]
Does this work with WordPress Multisite?
No β it's a standalone alternative. It provides multi-tenancy through routing and DB prefixes without Multisite's network admin overhead.
Do I need a custom domain for every tenant?
No. Path-based routing lets you host tenants at yoursite.com/site/{id} with zero DNS changes.
How is this different from WordPress Multisite?
Multisite shares one DB, one plugin set, and one theme set. GrabWP Tenancy gives each tenant separate table prefixes and separate uploads. Pro adds dedicated databases and fully isolated wp-content per tenant β something Multisite cannot do.
Can I manage 50+ client sites?
Yes. GrabWP Tenancy is built for agencies and freelancers. Pro adds per-tenant backup/restore for easy management at scale.
Is it compatible with other plugins?
Most plugins work out of the box. Plugins that hardcode DB table names (without $wpdb->prefix) may need configuration.
The repository docs live in docs/:
docs/project-overview-pdr.md- product context and requirementsdocs/codebase-summary.md- code structure and runtime mapdocs/code-standards.md- conventions and validationdocs/system-architecture.md- bootstrap, routing, data, and clone architecturedocs/project-roadmap.md- current status and next milestonesdocs/deployment-guide.md- setup and release checklistdocs/design-guidelines.md- WordPress admin UI guidance
- Functions:
grabwp_tenancy_prefix - Classes:
GrabWP_Tenancy_prefix - Constants:
GRABWP_TENANCY_prefix
- Issues: GitHub Issues
- Pull Requests: GitHub PRs
- Documentation: grabwp.com
- Fix: Tenant data directory moved to
wp-content/grabwp-tenancy/(outsideuploads/) β prevents direct web access; existing installs on the old path are preserved automatically - Fix: Status page migration notice now references the correct new path
- Fix: Clone page hero buttons replaced with standard buttons
- Enhance: Admin bar
Plugins/Themesnodes hidden on tenant sites when corresponding settings are enabled - Enhance: Tenant create page β auto-suggested domain, new Clear button, fluid input width, improved layout
- Enhance: GrabWP Tenancy admin menu repositioned to the top of the sidebar
- Change: Default values for Hide Plugin Management and Hide Theme Management changed to
falsefor fresh installs
- New: Tenant cloning β duplicate any tenant (or mainsite) to a new tenant with DB copy and file sync
- New:
GRABWP_MAINSITE_ID(__mainsite__) constant for using mainsite as clone source - Enhance: Mainsite domain detection supports localhost and LAN domains with no TLD
- Fix: Plugin asset URL resolution when the plugin directory is symlinked
- Fix: Tenant ID generation now guarantees uniqueness
- Quality: Normalised all source files to LF line endings
- Path-based routing, Status page UI, installer refactor, nonce security, autoloader fix
- Dedicated Status page, one-click MU-plugin and wp-config.php installers, admin notices
See WordPress.org Changelog for full history.
GPLv2 or later β see LICENSE
Need enterprise isolation, dedicated databases, and per-tenant backups?
β Upgrade to GrabWP Tenancy Pro Β· From $9.99/month Β· Code EARLYBIRDPRO for 20% off