Manage unlimited themes and plugins from GitHub β all from one screen.
WP Puller v2.0 is a ground-up rewrite. The old single-asset tabbed interface is gone, replaced by a card-based dashboard that lets you manage as many GitHub-connected themes and plugins as you need.
Thanks to https://github.com/codician-team for building the original version!
- Add unlimited themes and plugins, each with its own GitHub repo, branch, and settings
- Each asset gets its own card showing name, version, commit, and connection status
- Automatic migration from v1.x β your existing configuration carries over
- Asset cards in a responsive grid, each showing live status at a glance: version, current commit SHA, last check time, and connection state
- Slide-out panels for Settings, Branches, and Backups β one click from each card's footer icons
- Bulk actions in the header: Check All for Updates, Update All
- Confirmation modals for destructive actions (restore, delete, deploy, remove)
- Notice bar with auto-dismiss for success/error/warning feedback
- Store multiple GitHub Personal Access Tokens in a shared, encrypted vault
- Reuse the same token across multiple assets β no need to paste it again
- Supports both fine-grained (
github_pat_) and classic (ghp_) tokens - AES-256-CBC encryption at rest using WordPress security salts
- Orphaned tokens auto-cleaned when the last asset using them is removed
- Branches panel shows the 20 most recently active branches, sorted by commit date
- Fetches all branches (up to 1000 via GraphQL, 500 via REST) then sorts by recency β no more alphabetical guessing
- Deploy any branch for testing β backup created automatically before switching
- Use for Updates β promote a tested branch to be the configured updates branch
- Compare any branch against the deployed/configured branch: see commits ahead/behind, files changed with additions and deletions
- Configured branch shows a green "updates" badge; deployed branch highlighted in the table
- Single global webhook endpoint (
/wp-json/wp-puller/v1/webhook) handles all assets - GitHub push events are matched to configured assets by repo URL and branch
- HMAC-SHA256 signature verification with timing-safe comparison
- Per-asset auto-update toggle β enable or disable webhook-triggered updates individually
- Webhook panel accessible from the header with payload URL, secret, copy buttons, and step-by-step GitHub setup instructions
- One-click secret regeneration
- Automatic backup before every update (manual or webhook)
- Per-asset backup retention: 1β10 backups (configurable)
- One-click restore from the Backups panel
- Backup list shows name, creation date, file size, and detected version from asset headers
- Manual delete with confirmation
- Last 20 events displayed with status indicator, timestamp, and source
- Logs show asset name and semantic version (e.g., "MyTheme updated successfully to 2.1.0")
- Events logged: updates (success/failure), backups created, restores, webhook events, signature failures
- Clear all logs with one click
- Per-asset Check for Updates β shows current vs. latest version, commit SHAs, and update availability
- Detects version from asset headers (style.css for themes, main PHP file for plugins)
- Check All runs across every configured asset and displays results inline on each card
- Themes: validates
style.csswith Theme Name header, detects active theme - Plugins: scans PHP files for Plugin Name header, checks active status
- Subdirectory support: set a path within the repo if the asset lives in a subfolder
- Archive validation before install β helpful error messages if structure is wrong
- All AJAX endpoints protected by WordPress nonces and
manage_optionscapability checks - Webhook signatures verified with HMAC-SHA256
- Tokens encrypted at rest, decrypted only on demand
- File operations use WordPress Filesystem API
- Backup directory protected with
.htaccess
- WordPress 5.0+
- PHP 7.4+ with OpenSSL
- Writable
/wp-content/directory - GitHub PAT for private repositories (public repos work without one)
- From v1.x: Activate the updated plugin β your single-asset configuration will be automatically migrated to the new multi-asset format. No manual steps required.
- Webhook URL unchanged: If you already have a GitHub webhook configured, it will continue working.
- Token re-encryption: Your existing PAT will be migrated into the new encrypted token vault.