PHPackages                             eighteen73/media-manager - 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. eighteen73/media-manager

ActiveWordpress-plugin

eighteen73/media-manager
========================

Native media folders, private media, shared multisite media, and safety-first cleanup.

v0.1.0(yesterday)01↑2900%[1 PRs](https://github.com/eighteen73/media-manager/pulls)GPL-2.0-or-laterPHPPHP &gt;=7.4CI passing

Since Aug 13Pushed todayCompare

[ Source](https://github.com/eighteen73/media-manager)[ Packagist](https://packagist.org/packages/eighteen73/media-manager)[ RSS](/packages/eighteen73-media-manager/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (3)Versions (4)Used By (0)

Media Manager
=============

[](#media-manager)

Native media folders, private media, shared multisite media, and safety-first cleanup for WordPress.

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

[](#requirements)

- WordPress 6.8+
- PHP 7.4+
- Node 20+ for development builds
- Docker (required by `@wordpress/env`) for development testing

Development
-----------

[](#development)

```
composer install
npm install
npm run build
npm run env:start
npm run test:unit
npm run test:php
npm run test:e2e
```

ScriptPurpose`npm run env:start`Start Docker wp-env (dev `:8888`, tests `:8889`)`npm run env:stop`Stop wp-env`npm run env:destroy`Destroy containers and volumes (needed after env config changes)`npm run test:unit`Jest unit/component tests (no WordPress required)`npm run test:php`PHPUnit integration tests inside wp-env `tests-cli``npm run test:e2e`Playwright E2E against the tests site (`:8889`)`npm run test:e2e:ui`Playwright UI mode`npm run test`Run unit, PHP, then E2E`npm run lint`CSS/JS/PHP lint`composer test`PHPUnit only (expects WordPress test lib; prefer `npm run test:php` on the host)Default wp-env credentials: `admin` / `password`.

`npm run build` must succeed before E2E. First-time Playwright setup:

```
npm run playwright:install
```

E2E global setup authenticates as admin and activates Media Manager on the tests site (`:8889`).

Testing standard (eighteen73)
-----------------------------

[](#testing-standard-eighteen73)

This plugin is the reference layout for other eighteen73 WordPress plugins.

### Layout

[](#layout)

```
tests/
  php/           # WP_UnitTestCase integration (PHPUnit)
    bootstrap.php
    {Area}/test-*.php
  e2e/           # Playwright browser specs + global-setup.js
  fixtures/      # Seeds / helpers (not a suite)
src/**/*.test.js # Jest co-located with admin JS

```

### Runtimes

[](#runtimes)

LayerRunnerEnvironmentPHPPHPUnit + `WP_UnitTestCase`Docker **wp-env** `tests-cli`JSJest via `@wordpress/scripts`Node onlyE2EPlaywright + `@wordpress/e2e-test-utils-playwright`wp-env **tests** site `http://localhost:8889`**Keep Docker wp-env** for PHP and E2E when the plugin needs MySQL, multisite, or real filesystem behavior (private media, shared network media).

**WordPress Playground** is complementary — demos, Blueprints, and PR previews — not a drop-in replacement for this plugin’s PHP/E2E suite:

```
npx @wp-playground/cli server --auto-mount
```

### Multisite note

[](#multisite-note)

- Development site (`:8888`) is multisite for shared-media work.
- Tests site (`:8889`) stays single-site at the wp-env layer so PHPUnit can install its own network via `WP_TESTS_MULTISITE` (avoids the known wp-env multisite + PHPUnit domain conflict).
- After changing [`.wp-env.json`](.wp-env.json), run `npm run env:destroy && npm run env:start`.

### Writing tests

[](#writing-tests)

- **PHP:** extend `WP_UnitTestCase`, name methods `test_*`, load the plugin from [`tests/php/bootstrap.php`](tests/php/bootstrap.php).
- **JS:** co-locate `*.test.js` next to the module; use Testing Library for components.
- **E2E:** import `{ test, expect }` from `@wordpress/e2e-test-utils-playwright`, use `admin.visitAdminPage()`, prefer role/label locators, add `data-testid` on plugin UI when needed.

License
-------

[](#license)

GPL-2.0-or-later

###  Health Score

34

—

LowBetter than 74% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity25

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

1d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/73229?v=4)[Brett Mason ](/maintainers/brettsmason)[@brettsmason](https://github.com/brettsmason)

---

Top Contributors

[![brettsmason](https://avatars.githubusercontent.com/u/73229?v=4)](https://github.com/brettsmason "brettsmason (30 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/eighteen73-media-manager/health.svg)

```
[![Health](https://phpackages.com/badges/eighteen73-media-manager/health.svg)](https://phpackages.com/packages/eighteen73-media-manager)
```

PHPackages © 2026

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