PHPackages                             rolf-thomas/ddev-project-menu - 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. [CLI &amp; Console](/categories/cli)
4. /
5. rolf-thomas/ddev-project-menu

ActiveLibrary[CLI &amp; Console](/categories/cli)

rolf-thomas/ddev-project-menu
=============================

Interactive TUI menu for DDEV projects to run shell scripts from the terminal

03PHP

Since May 4Pushed 2mo agoCompare

[ Source](https://github.com/rolf-thomas/ddev-project-menu)[ Packagist](https://packagist.org/packages/rolf-thomas/ddev-project-menu)[ RSS](/packages/rolf-thomas-ddev-project-menu/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependenciesVersions (1)Used By (0)

ddev-project-menu
=================

[](#ddev-project-menu)

An interactive TUI (terminal UI) menu for DDEV projects. Run `ddev project` inside any DDEV project to get a keyboard-navigable menu of your shell scripts.

Features
--------

[](#features)

- Scans `private/scripts/*.sh` for annotated shell scripts
- Groups scripts with a two-column layout: menu list on the left, help panel on the right
- Displays the DDEV project name as a Figlet title
- Confirmation prompt support before executing sensitive scripts
- No external TUI framework required at runtime — pure ANSI escape sequences

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

[](#requirements)

- PHP 8.1+
- DDEV

Installation
------------

[](#installation)

Add this package as a dev dependency to your DDEV project:

```
composer require --dev rolf-thomas/ddev-project-menu
```

Then create the DDEV custom command file at `.ddev/commands/host/project`:

```
#!/usr/bin/env bash
## Description: Open the interactive project menu
## Usage: project
## Example: ddev project

"$(composer -d "$DDEV_APPROOT" config vendor-dir)/rolf-thomas/ddev-project-menu/bin/ddev-project-menu"
```

Make it executable:

```
chmod +x .ddev/commands/host/project
```

> The command runs on the **host** (not inside the container) — this is required for interactive TTY support.

Usage
-----

[](#usage)

```
ddev project
```

Navigate with arrow keys, press `Enter` to run the selected script, `q` or `Esc` to quit.

Script annotations
------------------

[](#script-annotations)

Scripts are included in the menu only if they have a `@label` annotation. All tags are read from the leading comment block (stops at the first non-comment line):

```
#!/usr/bin/env bash
# @label       Deploy to staging
# @description Builds assets and syncs files to the staging server.
#              Runs composer install on the remote as well.
# @confirm     true
# @group       Deployment
```

TagRequiredDescription`@label`yesShort label shown in the menu list`@description`noHelp text shown in the right panel (multiple lines supported)`@group`noGroup heading; defaults to `Sonstige``@confirm`noSet to `true` to ask for confirmation before executingScripts without `@label` are silently skipped — useful for helper files like `functions.sh` or `ask.sh` that are sourced by other scripts.

Local development
-----------------

[](#local-development)

Clone the repository and install dependencies:

```
composer install
```

To test against a real DDEV project, add this package as a path repository in the host project's `composer.json`:

```
"repositories": {
    "ddev-project-menu": {
        "type": "path",
        "url": "/path/to/ddev-project-menu",
        "options": { "symlink": true }
    }
}
```

Then run `ddev project` in that project to test the full TUI interactively.

License
-------

[](#license)

MIT

###  Health Score

19

—

LowBetter than 9% of packages

Maintenance56

Moderate activity, may be stable

Popularity3

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity12

Early-stage or recently created project

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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/7dc3f5bcdcb15a88a3b10629bc9a5ef8bd24bd90172baa767f1f9aef378d4145?d=identicon)[rolf-thomas](/maintainers/rolf-thomas)

### Embed Badge

![Health badge](/badges/rolf-thomas-ddev-project-menu/health.svg)

```
[![Health](https://phpackages.com/badges/rolf-thomas-ddev-project-menu/health.svg)](https://phpackages.com/packages/rolf-thomas-ddev-project-menu)
```

###  Alternatives

[illuminate/console

The Illuminate Console package.

13046.0M6.8k](/packages/illuminate-console)[styleci/cli

The CLI tool for StyleCI

71470.5k9](/packages/styleci-cli)[winbox/args

Windows command-line formatter

20720.9k21](/packages/winbox-args)[mallardduck/laravel-traits

A collection of useful Laravel snippets in the form of easy to use traits.

136.2k2](/packages/mallardduck-laravel-traits)

PHPackages © 2026

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