These docs have been generated using AI. Expect inaccuracies until we remove this banner.
- Docs
- Troy Server
Troy Server: For Developers
Troy Server lets you distribute WordPress plugins from your own server. Your code, your rules.
No approval process. No arbitrary takedowns. No one between you and your users.
Why Host Your Own Repository?
If you've followed WordPress development in recent years, you've seen what can happen when a centralized directory controls plugin distribution. Plugins blocked. Access revoked. Years of work made unavailable overnight.
Troy Server ensures that can't happen to you.
When you host plugins on your own Troy Server:
- You control distribution. Publish updates when you're ready, not when someone approves them.
- You own the relationship. Your users connect directly to you.
- You can't be deplatformed. Your code lives on your infrastructure.
- You respect privacy. Only anonymous statistics, if you want them at all.
How It Works
- Install Troy Server on a WordPress site (can be a simple VPS)
- Upload your plugin ZIP or connect your GitHub repository
- Add a
Troy:header to your plugin pointing to your server - Users install Troy Client + your pluginupdates flow automatically
That's the complete workflow. Your plugin users see updates in their WordPress dashboard just like any WordPress.org plugin, except the updates come from you.
System Requirements
| Requirement | Version |
|---|---|
| WordPress | 6.8+ |
| PHP | 8.4+ |
| MySQL | 8.0.19+ |
| HTTPS | Required |
About PHP 8.4:
Troy Server uses modern PHP features to keep the codebase clean and maintainable. Most quality hosts support PHP 8.4. If yours doesn't, it might be time for an upgrade.
No Caching or Translation Plugins:
Don't install caching plugins (WP Super Cache, W3TC, LiteSpeed, etc.) or translation plugins on your Troy Server. They break REST API responses and cause update failures.
In This Section
- Installation Set up your repository server
- Adding Plugins Upload ZIPs or connect GitHub
- GitHub Integration Automate releases from tags
- API Reference Technical endpoint documentation
- Troubleshooting When things don't work
Quick Example
Your plugin needs one header to use Troy:
/**
* Plugin Name: My Awesome Plugin
* Version: 1.2.0
* Troy: repo.example.org
*/
When a user has Troy Client installed, they'll receive updates for this plugin from repo.example.org. The update appears in their dashboard like normal—they just click "Update" and your new version installs.
Opt-in by design:
Troy only handles updates for plugins that explicitly include a Troy: header. It doesn't affect plugins without this header—those continue to update from WordPress.org as usual.
Who Uses Troy Server?
- Independent plugin developers who want control over their distribution
- Agencies managing private plugins for clients
- Enterprise teams distributing internal tools
- Anyone who needs a reliable alternative for distributing their own code
Your code. Your server. Your users.
