PHPackages                             thee-prime/wpflint-app - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. thee-prime/wpflint-app

ActiveProject[Framework](/categories/framework)

thee-prime/wpflint-app
======================

WPFlint WordPress plugin skeleton — start your plugin with composer create-project thee-prime/wpflint-app my-plugin

v1.0(1mo ago)012MITPHPPHP &gt;=7.4

Since May 10Pushed 1mo agoCompare

[ Source](https://github.com/thee-prime/wpflint-app)[ Packagist](https://packagist.org/packages/thee-prime/wpflint-app)[ RSS](/packages/thee-prime-wpflint-app/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

WPFlint Plugin Skeleton
=======================

[](#wpflint-plugin-skeleton)

The official project skeleton for [WPFlint](https://github.com/thee-prime/wpflint) — a Laravel-inspired framework for WordPress plugins.

Quick Start
-----------

[](#quick-start)

```
composer create-project thee-prime/wpflint-app my-shop-plugin
```

The setup wizard runs automatically and asks you:

```
Plugin name        : My Shop
Plugin slug        [my-shop]:
PHP namespace      [MyShop]:
Text domain        [my-shop]:
Description        [A WPFlint-powered WordPress plugin.]:
Author             :

```

Then it:

- Generates `my-shop.php` with the correct WordPress plugin header
- Stamps your namespace everywhere (`MyShop\Providers\AppServiceProvider`, etc.)
- Runs [Strauss](https://github.com/BrianHenryIE/strauss) to prefix the framework under your namespace (`MyShop\WPFlint\...`) — **zero conflict** when multiple WPFlint plugins are active
- Optionally sets up the Claude Code MCP server for AI-assisted development

What you get
------------

[](#what-you-get)

```
my-shop-plugin/
├── app/
│   ├── Http/
│   │   ├── Controllers/
│   │   ├── Middleware/
│   │   └── Requests/
│   ├── Events/
│   ├── Jobs/
│   │   └── ExampleJob.php
│   ├── Listeners/
│   ├── Models/
│   ├── Providers/
│   │   └── AppServiceProvider.php   ← start here
│   └── Rules/
├── config/
│   └── app.php
├── database/
│   └── migrations/
├── routes/
│   ├── ajax.php                     ← wp_ajax_* actions
│   └── api.php                      ← REST API endpoints
├── templates/
├── vendor-prefixed/                 ← Strauss output (namespace-isolated framework)
├── my-shop.php                      ← main plugin file
└── uninstall.php

```

Routes
------

[](#routes)

### AJAX routes — `routes/ajax.php`

[](#ajax-routes--routesajaxphp)

```
use MyShop\Http\Controllers\OrderController;

// Logged-in users only:
$router->ajax( 'my-shop/save-order', [ OrderController::class, 'store' ] )
       ->middleware( [ 'nonce:my_shop_save_order', 'can:edit_posts' ] );

// Public endpoint (guests + logged-in):
$router->ajax( 'my-shop/get-prices', [ OrderController::class, 'prices' ] )
       ->nopriv();
```

### REST API routes — `routes/api.php`

[](#rest-api-routes--routesapiphp)

```
use MyShop\Http\Controllers\OrderController;

$router->rest( 'my-shop/v1', function ( $r ) {
    $r->get(    '/orders',             [ OrderController::class, 'index'   ] );
    $r->post(   '/orders',             [ OrderController::class, 'store'   ] );
    $r->get(    '/orders/(?P\d+)', [ OrderController::class, 'show'    ] );
    $r->put(    '/orders/(?P\d+)', [ OrderController::class, 'update'  ] );
    $r->delete( '/orders/(?P\d+)', [ OrderController::class, 'destroy' ] );
} );
```

Admin menus
-----------

[](#admin-menus)

Registered in `AppServiceProvider::register_menus()` via the `AdminPage` fluent builder:

```
AdminPage::make( __( 'My Shop', 'my-shop' ), 'my-shop' )
    ->icon( 'dashicons-cart' )
    ->position( 56 )
    ->render( function () { include plugin_dir_path( __FILE__ ) . 'templates/main.php'; } )
    ->submenu( __( 'Settings', 'my-shop' ), 'my-shop-settings', function () {
        include plugin_dir_path( __FILE__ ) . 'templates/settings.php';
    } )
    ->register();
```

Background jobs (queue)
-----------------------

[](#background-jobs-queue)

1. Uncomment `QueueServiceProvider` in `AppServiceProvider::register()`.
2. Run `wp wpflint migrate` to create the jobs tables.
3. Dispatch jobs anywhere in your plugin:

```
use MyShop\Jobs\ExampleJob;

wpflint_dispatch( new ExampleJob( $user_id ) );

// Delayed (runs after 60 s):
wpflint_dispatch( ( new ExampleJob( $user_id ) )->delay( 60 ) );

// Different queue, max 5 attempts:
wpflint_dispatch( ( new ExampleJob( $user_id ) )->on_queue( 'emails' )->tries( 5 ) );
```

WP-CLI commands
---------------

[](#wp-cli-commands)

All generator commands are available inside WordPress via WP-CLI:

```
wp wpflint make:controller  OrderController
wp wpflint make:controller  OrderController --rest
wp wpflint make:model       Order
wp wpflint make:model       Order --migration
wp wpflint make:migration   create_orders_table
wp wpflint make:event       OrderPlaced
wp wpflint make:listener    SendConfirmation
wp wpflint make:middleware  EnsureStoreIsOpen
wp wpflint make:request     StoreOrderRequest
wp wpflint make:rule        PhoneNumber
wp wpflint make:provider    OrderServiceProvider
wp wpflint make:command     ProcessOrdersCommand
wp wpflint migrate
wp wpflint cache:clear
```

Why Strauss?
------------

[](#why-strauss)

Without Strauss, two plugins both using WPFlint would produce a PHP fatal error (`Cannot redeclare class WPFlint\Application`). Strauss copies the framework into `vendor-prefixed/` and rewrites all namespaces to be scoped under your plugin:

```
WPFlint\Application  →  MyShop\WPFlint\Application
WPFlint\Http\Router  →  MyShop\WPFlint\Http\Router

```

Both plugins load their own isolated copy. No conflict, ever.

After setup
-----------

[](#after-setup)

```
cd my-shop-plugin

# Copy to WordPress:
cp -r . /path/to/wp-content/plugins/my-shop/

# Or symlink for development:
ln -s $(pwd) /path/to/wp-content/plugins/my-shop
```

Activate **My Shop** in the WordPress admin and start building.

Requirements
------------

[](#requirements)

- PHP 7.4+
- WordPress 5.9+
- Composer 2.x

License
-------

[](#license)

MIT

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance94

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

30d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4b5707e39fde8c3a9e0db530a2f1117e4219feddcedc9a4a74d1328b4c499bdd?d=identicon)[thee-prime](/maintainers/thee-prime)

---

Top Contributors

[![ajdm-jakiur](https://avatars.githubusercontent.com/u/243452307?v=4)](https://github.com/ajdm-jakiur "ajdm-jakiur (12 commits)")

---

Tags

pluginwordpressSkeletonwpflint

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/thee-prime-wpflint-app/health.svg)

```
[![Health](https://phpackages.com/badges/thee-prime-wpflint-app/health.svg)](https://phpackages.com/packages/thee-prime-wpflint-app)
```

###  Alternatives

[alleyinteractive/pest-plugin-wordpress

WordPress Pest Integration

273.9k1](/packages/alleyinteractive-pest-plugin-wordpress)[justcoded/wordpress-theme-framework

Lightweight theme framework base with Model-View concept for developers who want to better organize their own custom themes.

264.1k2](/packages/justcoded-wordpress-theme-framework)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
