PHPackages                             wazum/composer-fanfare - 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. wazum/composer-fanfare

ActiveComposer-plugin[CLI &amp; Console](/categories/cli)

wazum/composer-fanfare
======================

Display a colored ASCII banner after composer install/update.

v1.3.0(4w ago)20MITPHPPHP &gt;=8.2CI passing

Since May 8Pushed 4w agoCompare

[ Source](https://github.com/wazum/composer-fanfare)[ Packagist](https://packagist.org/packages/wazum/composer-fanfare)[ RSS](/packages/wazum-composer-fanfare/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (4)Dependencies (7)Versions (7)Used By (0)

composer-fanfare
================

[](#composer-fanfare)

[![Latest Version](https://camo.githubusercontent.com/00dd0a91ac11259fc98c5575424286c5fd9551451a8a41a0874716f6629d9840/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f77617a756d2f636f6d706f7365722d66616e666172652e737667)](https://packagist.org/packages/wazum/composer-fanfare)[![CI](https://github.com/wazum/composer-fanfare/actions/workflows/ci.yml/badge.svg)](https://github.com/wazum/composer-fanfare/actions/workflows/ci.yml)[![PHP Version](https://camo.githubusercontent.com/c3e40ef6b5fa5a0d64435540ad1f9faf8209af33fe9b22a1730627deb047b7d1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f77617a756d2f636f6d706f7365722d66616e666172652e737667)](https://packagist.org/packages/wazum/composer-fanfare)[![License](https://camo.githubusercontent.com/89ad6dddadac406356365b5fe5ffcc942e2c9b1648d151a086dc7fb4c93d0994/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f77617a756d2f636f6d706f7365722d66616e666172652e737667)](LICENSE)

Display a colored ASCII banner after `composer install` / `composer update`.

[![composer-fanfare in action](art/demo.gif?v=7)](art/demo.gif?v=7)[1](#user-content-fn-1-51a43ba17031f624c406604e976067d6)

Every `composer install` ends the same boring way: autoload files generated, then silence.

`composer-fanfare` replaces that with a project-specific full-stop — a colored ASCII banner that confirms which project just finished and lets you convey your own message: "Made with ❤️ by the maintainers".

Useful when you're proud of your work, juggle multiple repos, or just want a little fun after the thousandth `composer install`.

Stays respectful: silent in CI, plain in non-TTY shells, suppressed under `--quiet`.

Install
-------

[](#install)

```
composer require wazum/composer-fanfare
```

Important

Composer 2.2+ asks for plugin approval on first run. Interactive shells prompt you; in CI or non-interactive setups, allow it explicitly:

```
composer config allow-plugins.wazum/composer-fanfare true
```

Configure
---------

[](#configure)

Drop a plain-text template anywhere in your project (e.g. `art/banner.txt`) and reference it from `composer.json`:

```
{
    "extra": {
        "fanfare": {
            "template": "art/banner.txt",
            "colors": "sunset"
        }
    }
}
```

- `template` — path to the template, relative to the project root.
- `colors` — one of:
    - a hex string (`"#ff6ec7"`)
    - an array of hex stops (`["#ff6ec7", "#7873f5"]`) — colors interpolate smoothly between stops
    - a preset name: `aurora`, `catppuccin`, `doom`, `dracula`, `fire`, `gruvbox`, `iceberg`, `matrix`, `monokai`, `nord`, `ocean`, `pride`, `solarized`, `sunset`, `synthwave`
    - `"random"` — picks a random preset on each install/update
    - omit for plain output
- `direction` — controls how the gradient flows:
    - `"vertical"` (default) — one color per line, top to bottom
    - `"horizontal"` — color per character, left to right (whitespace stays uncolored)
    - `"diagonal"` — flows top-left to bottom-right across the whole banner
- `transform` — optional palette transform applied after color resolution:
    - `"reverse"` — reverses the stop order (e.g. `sunset` reversed → sunrise)
- `animation` — optional reveal animation:
    - `"typewriter"` — types each visible character with a small per-character delay
    - `"shimmer"` — slides the gradient across the banner; vertical/horizontal rotate the static colors, diagonal does a smooth phase shift across the whole plane
    - `"drip"` — reveals cells in random order in small bursts, like raindrops landing on the banner
    - omit for an instant render. Skipped automatically in non-TTY / non-decorated terminals.
- `footer` — `true` (default) prints a dim line below the banner with project name + version, PHP version, and locked package count. Set to `false` to hide.

Note

The banner falls back to plain text when `NO_COLOR` is set or output isn't a TTY. Composer's `--quiet` mode suppresses it entirely via the IO layer. If any banner line is wider than the current terminal, the banner is skipped silently to avoid wrapping artefacts.

### Disabling

[](#disabling)

Skip the banner for a single run by setting `COMPOSER_FANFARE=0` inline:

```
COMPOSER_FANFARE=0 composer install
```

Or disable it globally for the current shell or CI environment:

```
export COMPOSER_FANFARE=0
```

### Setting values from the CLI

[](#setting-values-from-the-cli)

If you'd rather not hand-edit `composer.json`, every key can be set with `composer config`:

```
composer config extra.fanfare.template art/banner.txt
composer config extra.fanfare.colors synthwave
composer config extra.fanfare.direction diagonal
composer config extra.fanfare.transform reverse
```

Booleans and arrays need `--json` so the value is stored with the right type:

```
composer config --json extra.fanfare.colors '["#ff6ec7","#7873f5"]'
composer config --json extra.fanfare.footer false
```

Remove a key with `--unset`:

```
composer config --unset extra.fanfare.transform
```

### Color depth

[](#color-depth)

Truecolor escapes are emitted by default. The renderer downgrades automatically based on `COLORTERM` and `TERM`:

Detected supportTriggerOutput24-bit`COLORTERM=truecolor` / `24bit`, or any modern terminal`\033[38;2;R;G;Bm`256-color`TERM` matching `*-256color``\033[38;5;Nm` (xterm 6×6×6 cube + 24-step grayscale ramp)16-color`TERM=ansi` / `vt100` / `linux`nearest-neighbor mapping to the standard ANSI palettePlain`NO_COLOR=1`, `TERM=dumb`, or non-TTYbanner content rendered without escapes### Preset gallery

[](#preset-gallery)

  **plain**
[![plain (no colors)](art/presets/plain.png?v=4)](art/presets/plain.png?v=4) **aurora**
[![aurora](art/presets/aurora.png?v=4)](art/presets/aurora.png?v=4) **catppuccin**
[![catppuccin](art/presets/catppuccin.png?v=4)](art/presets/catppuccin.png?v=4) **doom**
[![doom](art/presets/doom.png?v=4)](art/presets/doom.png?v=4)   **dracula**
[![dracula](art/presets/dracula.png?v=4)](art/presets/dracula.png?v=4) **fire**
[![fire](art/presets/fire.png?v=4)](art/presets/fire.png?v=4) **gruvbox**
[![gruvbox](art/presets/gruvbox.png?v=4)](art/presets/gruvbox.png?v=4) **iceberg**
[![iceberg](art/presets/iceberg.png?v=4)](art/presets/iceberg.png?v=4)   **matrix**
[![matrix](art/presets/matrix.png?v=4)](art/presets/matrix.png?v=4) **monokai**
[![monokai](art/presets/monokai.png?v=4)](art/presets/monokai.png?v=4) **nord**
[![nord](art/presets/nord.png?v=4)](art/presets/nord.png?v=4) **ocean**
[![ocean](art/presets/ocean.png?v=4)](art/presets/ocean.png?v=4)   **pride**
[![pride](art/presets/pride.png?v=4)](art/presets/pride.png?v=4) **solarized**
[![solarized](art/presets/solarized.png?v=4)](art/presets/solarized.png?v=4) **sunset**
[![sunset](art/presets/sunset.png?v=4)](art/presets/sunset.png?v=4) **synthwave**
[![synthwave](art/presets/synthwave.png?v=4)](art/presets/synthwave.png?v=4) Preview
-------

[](#preview)

Pick a preset without running an install:

```
composer fanfare:preview --gallery                                           # render every preset
composer fanfare:preview --preset=fire                                       # render just one
composer fanfare:preview --preset                                            # list preset names
composer fanfare:preview --gallery --direction=diagonal --transform=reverse  # combine
```

`--direction` and `--transform` accept the same values as the matching `extra.fanfare` keys. The preview uses your project's configured `extra.fanfare.template` if there is one, otherwise it falls back to a small built-in banner.

Creating a template
-------------------

[](#creating-a-template)

The template is any plain-text file. For large ASCII letters from a word, the classic tool is [figlet](http://www.figlet.org/):

```
brew install figlet                  # macOS
sudo apt-get install -y figlet       # Debian / Ubuntu

figlet -f standard "your project" > art/banner.txt
```

Try other fonts with `-f slant`, `-f big`, `-f small`, etc.; `figlist` lists what's installed. Prefer a browser? [patorjk.com/software/taag](https://patorjk.com/software/taag/) is a popular generator with the same fonts.

Another option is [toilet](https://caca.zoy.org/wiki/toilet), which offers its own font set and can be useful for compact banner styles:

```
brew install toilet                  # macOS
sudo apt-get install -y toilet       # Debian / Ubuntu

toilet -f pagga "composer-fanfare" > art/banner.txt
```

Note

Banner output relies on the font your terminal renders monospaced text in. Block-shading glyphs (`█▀▄░` from `pagga`/`smblock`/`block`) and box-drawing glyphs (`┏━┓┃` from `future`/`emboss`) are covered by every modern terminal font (JetBrains Mono, Fira Code, Cascadia, Hack, Menlo). Sparser ranges like braille (`⡠⢀⣀` from `smbraille`) are not — if a glyph shows up as `□`, switch to a font with wider Unicode coverage (DejaVu Sans Mono, Cascadia Code, Iosevka).

License
-------

[](#license)

MIT.

Footnotes
---------

1. The company names, project names, and email addresses shown in the demo (Atelier Prime, harbor sync, Neon District, meridian labs, lumen forge, etc.) are fictional — invented to illustrate the kind of personal banner you might write for your own project. [↩](#user-content-fnref-1-51a43ba17031f624c406604e976067d6)

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance94

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 94.3% 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

Every ~1 days

Total

4

Last Release

29d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f4ea950f22b43e010ba4f0a6effb0928a6a1d11f64d36cec0d030b757bdfa85e?d=identicon)[wazum](/maintainers/wazum)

---

Top Contributors

[![wazum](https://avatars.githubusercontent.com/u/146727?v=4)](https://github.com/wazum "wazum (33 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

cliasciiansicomposer-pluginbannerfanfare

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/wazum-composer-fanfare/health.svg)

```
[![Health](https://phpackages.com/badges/wazum-composer-fanfare/health.svg)](https://phpackages.com/packages/wazum-composer-fanfare)
```

###  Alternatives

[clue/term-react

Streaming terminal emulator, built on top of ReactPHP.

10410.7M2](/packages/clue-term-react)[alecrabbit/php-console-spinner

Extremely flexible spinner for \[async\] php cli applications

24035.5k2](/packages/alecrabbit-php-console-spinner)[alecrabbit/php-cli-snake

Lightweight cli spinner with zero dependencies

29214.4k5](/packages/alecrabbit-php-cli-snake)[malenki/ansi

Simple class to put some colors into your CLI PHP apps!

4245.7k1](/packages/malenki-ansi)[pgooch/php-ascii-tables

Convert multi-dimensional arrays into ASCII Tabled, and vise-versa.

364.3k1](/packages/pgooch-php-ascii-tables)

PHPackages © 2026

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