Custom plugin development at three brackets — $1,500-3,500 small, $4,000-9,000 medium, $10,000+ full module. Real stack, tested code, your repo.
Base scope of work — applies to all tiers. See the tier comparison below for hours and SLA specifics.
Tagged v1.0.0 release on private GitHub or GitLab. PSR-4 autoloading, PHP 8.1+, composer.json ready for Bedrock.
PHPUnit with wp-phpunit + Brain Monkey mocking. Playwright end-to-end on Medium and Full module brackets.
Tests run on every pull request. Lint, code standards, unit, and (where applicable) end-to-end.
Install instructions, hooks reference (filters and actions you can use to extend), upgrade path notes.
Built on @wordpress/components. Looks native, plays well with screen readers, no extra bundle bloat.
Custom tables only when needed. Migrations as plugin-activation hooks with rollback paths.
30-minute walkthrough of the code for your maintainer team. Architecture, conventions, extension points.
30 days included (60 for Full module). Bug fixes and WP-version compatibility checks without a separate ticket.
Transparent process — you always know what stage we're at and what comes next.
2-hour call, 2-3 page brief, repo and CI setup, stub plugin. You sign the brief before code starts.
Feature branch per component. Weekly v0.x.y releases for staging click-through. 2-3 day feedback loop.
Final staging QA, v1.0.0 tag, README, hooks docs, 30-minute video handover for your maintainer.
Pick the level that fits your size and required response time. You can switch tiers between months.
Integration plugins under 1,500 lines, simple editor tools, custom block libraries with under 10 blocks.
Larger integrations, front-end display plugins, plugins with a custom database table. Most plugin work lands here.
Custom applications inside WordPress. Booking engines, B2B quote systems, multi-vendor commission trackers.
Scope transparency — no surprises in the monthly report.
Access we require — passed via secure channel (1Password / Bitwarden).
"Asked us to clone a $500/year HubSpot plugin so we wouldn't have to renew. topcms talked us out of it — pointed at three free plugins that did 80% of what we needed and quoted the missing 20% as a $2,800 plugin we now own outright."
"Needed a Pipedrive sync for our 6 client agencies. The team scoped it as a Medium plugin, shipped in 5 weeks, and the test suite caught a real bug in our staging environment a month later. Worth every dollar."
"Took over a 3,000-line plugin we'd inherited from a freelancer who disappeared. The 1-day code audit told us the truth — it was salvageable but only with a refactor. They quoted the refactor as a fixed scope, finished in 3 weeks, and the plugin's been stable through two WP majors."
Three brackets: $1,500-3,500 for small integration plugins or custom block libraries in 1-3 weeks, $4,000-9,000 for medium plugins with React admin UI and full PHPUnit tests in 3-6 weeks, $10,000 and up for full custom modules over 6-14 weeks. Anything under $1,500 is better handled by a freelancer on Codeable or Fiverr Pro.
Custom plugin development makes sense when nothing on the .org repository covers the use case, when an existing plugin’s licence model doesn’t fit (per-site fees on agency builds, hostile pricing), when you need 1 of a plugin’s 200 features and the performance cost matters, when integration with internal systems has no public alternative, or when the code needs to live on your repo. Most plugin requests we get are better solved by an existing free plugin — we’ll tell you when that’s the case.
Depends on the use case. Generic plugins useful beyond one client often go to .org for the free marketing. Client-specific plugins stay on a private GitHub or GitLab repo. Composer-only distribution works for Bedrock-style WordPress setups where you install plugins with composer require. We discuss the trade-offs during scoping — the .org review queue takes 2-12 weeks, which sometimes rules it out.
GPL v2 by default — that’s a WordPress core requirement, every plugin running inside WordPress inherits the GPL. If you need a dual-licence setup where the plugin code stays GPL but commercial distribution rights are separate, we can structure that. We can’t ship a closed-source plugin that runs inside WordPress core — the licence is non-negotiable.
Yes, even on small plugin builds. PHPUnit with the wp-phpunit test suite for the PHP layer. Brain Monkey for mocking core WordPress functions. Playwright for end-to-end if the plugin has a real UI. GitHub Actions runs the test suite on every pull request. Plugins without tests break silently when WordPress core updates — we don’t ship those.
We target the latest WordPress major version plus the previous one (so currently WP 7.0 and 6.9). PHP 8.1 minimum. We don’t ship plugins targeting PHP 5.6 or 7.x — the official WordPress support window is long enough without us extending it. If your existing site runs an older PHP, we’ll either negotiate an upgrade or tell you the plugin will require a host change to install.
Yes. 30 days of post-launch support is included in every bracket (60 days for Full module). Beyond that, plugin maintenance runs through our regular Support and maintenance plans, with the plugin codebase as a tracked asset. Most clients move to our Standard tier for ongoing bug fixes, WP-version compatibility checks, and security patches.
Yes, with a paid 1-day code audit first. We need to read the existing code before committing to a maintenance or feature contract — we’ve taken over plugins that turned out to be unmaintainable spaghetti, and we won’t say yes to those without a clear path forward. Audit costs $400-800 depending on plugin size. After the audit we either propose a fixed-scope contract or honestly say we’re the wrong team.
Custom WordPress plugin development means we write a plugin from scratch — usually because nothing on the .org repository does what you need, or because you don’t want a $300/year subscription to a 50-feature plugin for the one feature you actually use. This page covers what we build, what it costs, and the decisions worth making before you commission a plugin instead of buying one.
Most plugin work that lands in our inbox shouldn’t actually become a custom plugin. The first conversation we have with every new client is whether something on the .org repository already covers 80% of the need. If it does, paying us $4,000 to rewrite it is wasted money. We’ll point you to the existing plugin and call it done.
Custom plugin development makes sense when one of these is true:
Roughly four categories, in order of how often we ship them.
A plugin that connects WordPress to one external system. Examples we’ve shipped: a HubSpot custom-object sync that the official HubSpot plugin doesn’t cover, an internal CRM bridge that maps Gravity Forms entries to a Pipedrive deal stage, a warehouse-feed importer that pulls product stock from a SOAP API every 15 minutes. These are 80% of our plugin work.
Build time: 2-4 weeks. Lines of code: usually 800-2,500. Distribution: private, installed via Composer or a private GitHub repo.
A plugin that adds features to the wp-admin for editors or admins. Custom block libraries, ACF field type plugins, a workflow plugin that adds a draft-review queue, a content-audit dashboard. Typically not visible on the front end.
Build time: 1-3 weeks. Lines of code: 500-2,000 including the React block code if there is one. Distribution: usually private, sometimes published to .org if it has wider use.
A plugin that adds a feature visible to site visitors. Custom search with Algolia or Elasticsearch backend, a member-only content gate, a custom subscription manager. Less common than the above two because these usually exist as commercial plugins already, and our job is to argue you out of building it.
Build time: 2-6 weeks. Lines of code: 1,500-5,000. Distribution: private repo, occasionally .org if the use case is generic enough.
A plugin that’s effectively a whole application — a custom booking engine, a B2B quote system, a multi-vendor commission tracker. The kind of project where we’ll ask whether you should be on Laravel or a SaaS platform instead. If WordPress is still the right host, we’ll build it, but the budget shifts to the upper end.
Build time: 6-14 weeks. Lines of code: 5,000+. Distribution: always private.
Integration plugins under 1,500 lines, simple editor tools, custom block libraries with under 10 blocks. Includes settings page, basic unit tests for the API layer, README.md, and a developer handover doc.
Larger integrations, front-end display plugins, plugins with a custom database table. Includes admin UI in React, comprehensive PHPUnit tests, GitHub Actions CI, semantic versioning, and 30 days of post-launch support.
Custom applications living inside WordPress. Includes architecture review, custom database schema, REST API endpoints, React-based front-end, full PHPUnit + Playwright test suite, GitHub Actions deploy, 60 days of post-launch support.
PHP target. PHP 8.1 minimum for new plugins. We use typed properties, enums where they fit, and named arguments. We don’t ship plugins that need PHP 5.6 — the WordPress core support window is long enough without us extending it artificially.
Composer for dependencies. Every plugin has a composer.json with PSR-4 autoloading. We vendor php-scoper’d dependencies into a unique namespace so our Guzzle doesn’t fight your other plugin’s Guzzle. The pain of plugin conflict in production isn’t worth saving 20 minutes of build setup.
React for admin UIs. The WordPress core team built @wordpress/scripts and @wordpress/components and they work fine. We use them instead of bundling our own React build. Block development goes through @wordpress/create-block with TypeScript on bigger projects.
Testing. PHPUnit with the wp-phpunit test suite for the PHP side. Brain Monkey for mocking core functions. Playwright for end-to-end where the plugin has a real UI. GitHub Actions running the tests on every PR. We don’t skip tests on “small” plugins — it’s the small plugins that break silently in WP 7.0.
Coding standards. WordPress Coding Standards with a sensible deviation list: we allow short array syntax ([]), we ignore the “Yoda condition” warning, we run PHP-CS-Fixer on top. CI fails the PR if any of these regress.
This is for the Medium bracket — the most common — assuming a 4-week build.
2-hour call to walk through the requirement. We write a 2-3 page brief: what the plugin does, what it doesn’t do, the API surface we’re committing to, the database schema if applicable, the settings UI. You sign the brief before code starts. We set up the repo, the CI, and a stub plugin that activates on a local WordPress.
Feature branch per major component. PR descriptions explain the change, the test coverage, and any decision worth noting. We tag a v0.x.y release at the end of every week so you can install it on your staging site and click through. Feedback loop usually 2-3 days.
Final round of QA against the staging site. Plugin gets a tagged v1.0.0 release on the private repo. We write a README that covers install, configuration, hooks (filters and actions you can use to extend the plugin), and the upgrade path for future major versions. 30-minute call walking your dev team or maintainer through the code.
composer require on Bedrock-style WordPress setupsThree options, three reasons to pick each.
WP.org repository if the plugin is generic enough that other people might use it and you want the free marketing. Downside: the review queue takes 2-12 weeks, the .org repo doesn’t like aggressive marketing in the readme.txt, and security disclosures go through the .org security team.
Private GitHub or GitLab repo if the plugin is yours alone and you want full control. We default here for client work. Updates go through manual upload or a tool like PluginKit if you want self-hosted update servers.
Composer-only if you run Bedrock-style WordPress and you want to install plugins through composer require from a private repo. Cleanest for agencies managing multiple client sites. We do this for our own internal plugins.
Custom plugins usually ship inside a larger project. The integration plugin lives on a site we built through our WordPress development services. The migration plugin runs as part of a WordPress migration from a CMS the .org importers can’t handle. Standalone plugin commissions exist, but they’re maybe 20% of what we do — most plugins are scoped during a build or migration discovery call.
If you have a plugin idea, the form below is the fastest way in. Drop the source system the plugin connects to (or just the problem you’re solving), the rough budget you’re working with, and the deadline. We’ll reply within one business day with either a discovery call or an honest “this exists on .org for free, install it and move on.”
30 days of post-launch support included (60 days for Full module). Bug fixes and WP-version compatibility checks without a separate ticket.