PHPackages                             scheb/tombstone - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. scheb/tombstone

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

scheb/tombstone
===============

Dead code detection with tombstones for PHP

v1.10.0(6mo ago)285622.5k↓17.6%22[4 issues](https://github.com/scheb/tombstone/issues)1MITPHPPHP &gt;=7.1.3CI passing

Since Aug 19Pushed 3w ago10 watchersCompare

[ Source](https://github.com/scheb/tombstone)[ Packagist](https://packagist.org/packages/scheb/tombstone)[ Docs](https://github.com/scheb/tombstone)[ RSS](/packages/scheb-tombstone/feed)WikiDiscussions 1.x Synced 2d ago

READMEChangelog (10)Dependencies (13)Versions (39)Used By (1)

scheb/tombstone
===============

[](#schebtombstone)

Implements the concept of **tombstones for dead code detection in PHP**.

The library provides you with a toolbox to place, track and evaluate tombstones in your code.

[![Build Status](https://github.com/scheb/tombstone/actions/workflows/ci.yaml/badge.svg?branch=1.x)](https://github.com/scheb/tombstone/actions?query=workflow%3ACI+branch%3A1.x)[![Code Coverage](https://camo.githubusercontent.com/493f70a35e6c1da36b9bd4d5bc9b8ee3d86dc76e103515fa2dc519cfc8285926/68747470733a2f2f636f6465636f762e696f2f67682f73636865622f746f6d6273746f6e652f6272616e63682f312e782f67726170682f62616467652e737667)](https://app.codecov.io/gh/scheb/tombstone/branch/1.x)[![Latest Stable Version](https://camo.githubusercontent.com/b4d2fdf05b5de3d610e14c97de7a6ec34ab191b0fc2f0a0d13e855a29e4da269/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73636865622f746f6d6273746f6e65)](https://packagist.org/packages/scheb/tombstone)[![Monthly Downloads](https://camo.githubusercontent.com/8adfe638530aa5ac94e597177f68070d09e095720a1f420d5d20ed3196f84192/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646d2f73636865622f746f6d6273746f6e65)](https://packagist.org/packages/scheb/tombstone/stats)[![Total Downloads](https://camo.githubusercontent.com/38565116e6b893d51155a556e14d671d487575e1e0bdbfe5fa195782304eadce/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73636865622f746f6d6273746f6e65)](https://packagist.org/packages/scheb/tombstone/stats)[![License](https://camo.githubusercontent.com/b08820f8a55bdfff4be2ba657a5600a27781c635282c392f8fa4e03e28b0ddb9/68747470733a2f2f706f7365722e707567782e6f72672f73636865622f746f6d6273746f6e652f6c6963656e73652e737667)](https://packagist.org/packages/scheb/tombstone)

[![Logo](doc/tombstone-logo.svg)](doc/tombstone-logo.svg)

What are Tombstones?
--------------------

[](#what-are-tombstones)

To get the basic idea, watch David Schnepper's 5 minute talk from Velocity Santa Clara 2014.

[ ![Tombstone Youtube Video](https://camo.githubusercontent.com/34da522aec1933a7f65c0153f758039e433e2845c301a458e94329194ad9195d/68747470733a2f2f692e7974696d672e636f6d2f76692f323955587a6651574f68512f6d617872657364656661756c742e6a7067)](https://www.youtube.com/watch?v=29UXzfQWOhQ)When you want to identify and clean-up dead code in a project, static code analysis tools are the weapon of choice. But these tools have some limitations, especially in a dynamic language like PHP:

- They can only tell you, if a piece of code is referenced, not if it's actually used
- They cannot resolve dynamic or generated call paths

Tombstones provide a way to track if a piece of code is actually invoked. **They are executable markers in your code**, that you can place where you suspect dead code. Then, you collect tombstone invocations on production. After a while, the logs will tell you, which tombstones are dead and which ones aren't (the so called "vampires").

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

[](#installation)

The library consists of multiple components, that need to be installed and configured independently:

Read [how to install `scheb/tombstone-logger`](doc/logger/installation.md) for placing and logging tombstones in your code.

Read [how to install `scheb/tombstone-analyzer`](doc/analyzer/installation.md), which takes log data from `scheb/tombstone-logger` to generate reports in various formats. For example an HTML report:

[![Dashboard view](doc/analyzer/dashboard-small.png)](doc/analyzer/dashboard.png) [![Code view](doc/analyzer/code-small.png)](doc/analyzer/code.png)

Security
--------

[](#security)

For information about the security policy and know security issues, see [SECURITY.md](SECURITY.md).

Contributing
------------

[](#contributing)

Want to contribute to this project? See [CONTRIBUTING.md](CONTRIBUTING.md).

License
-------

[](#license)

This software is available under the [MIT license](LICENSE).

Acknowledgments
---------------

[](#acknowledgments)

The library is heavily inspired by [Nestoria.com's implementation](http://devblog.nestoria.com/post/115930183873/tombstones-for-dead-code)of the tombstone concept.

Thanks to [Jordi Boggiano](https://github.com/Seldaek) for creating [Monolog](https://github.com/Seldaek/monolog), from where I lend the handler/formatter concept.

The tombstone graphic is based on a licensed illustration by "lemonadeserenade".

Support Me
----------

[](#support-me)

I'm developing this library since 2015. I love to hear from people using it, giving me the motivation to keep working on my open source projects.

If you want to let me know you're finding it useful, please consider giving it a star ⭐ on GitHub.

If you love my work and want to say thank you, you can help me out for a beer 🍻️ [via PayPal](https://paypal.me/ChristianScheb).

###  Health Score

63

—

FairBetter than 99% of packages

Maintenance82

Actively maintained with recent releases

Popularity56

Moderate usage in the ecosystem

Community29

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 93.9% 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 ~103 days

Recently: every ~143 days

Total

39

Last Release

25d ago

Major Versions

0.x-dev → v1.0.02020-08-14

PHP version history (3 changes)0.1.0PHP &gt;=5.3.6

0.9.0PHP ^7.1.3

v1.1.0PHP &gt;=7.1.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/496658d46619a414a62b1e933fb7fc2e57eff4f0a4109f4cffc32093f57d65da?d=identicon)[scheb](/maintainers/scheb)

---

Top Contributors

[![scheb](https://avatars.githubusercontent.com/u/1259952?v=4)](https://github.com/scheb "scheb (491 commits)")[![rg-scheb](https://avatars.githubusercontent.com/u/249925692?v=4)](https://github.com/rg-scheb "rg-scheb (12 commits)")[![JimTools](https://avatars.githubusercontent.com/u/1222052?v=4)](https://github.com/JimTools "JimTools (3 commits)")[![rob-rg-schwarzberg](https://avatars.githubusercontent.com/u/8994305?v=4)](https://github.com/rob-rg-schwarzberg "rob-rg-schwarzberg (2 commits)")[![swarrenwecareconnectorg](https://avatars.githubusercontent.com/u/64211184?v=4)](https://github.com/swarrenwecareconnectorg "swarrenwecareconnectorg (2 commits)")[![fbecker-complex](https://avatars.githubusercontent.com/u/71324952?v=4)](https://github.com/fbecker-complex "fbecker-complex (2 commits)")[![wouterj](https://avatars.githubusercontent.com/u/749025?v=4)](https://github.com/wouterj "wouterj (2 commits)")[![topikito](https://avatars.githubusercontent.com/u/694244?v=4)](https://github.com/topikito "topikito (1 commits)")[![dav-m85](https://avatars.githubusercontent.com/u/1519726?v=4)](https://github.com/dav-m85 "dav-m85 (1 commits)")[![X-Coder264](https://avatars.githubusercontent.com/u/12602463?v=4)](https://github.com/X-Coder264 "X-Coder264 (1 commits)")[![ghispi](https://avatars.githubusercontent.com/u/7512885?v=4)](https://github.com/ghispi "ghispi (1 commits)")[![jawira](https://avatars.githubusercontent.com/u/496541?v=4)](https://github.com/jawira "jawira (1 commits)")[![jquiaios](https://avatars.githubusercontent.com/u/16556006?v=4)](https://github.com/jquiaios "jquiaios (1 commits)")[![lyudmild](https://avatars.githubusercontent.com/u/12250492?v=4)](https://github.com/lyudmild "lyudmild (1 commits)")[![sebb](https://avatars.githubusercontent.com/u/192541?v=4)](https://github.com/sebb "sebb (1 commits)")[![simoheinonen](https://avatars.githubusercontent.com/u/3840367?v=4)](https://github.com/simoheinonen "simoheinonen (1 commits)")

---

Tags

dead-code-removaldynamic-code-analysisstatic-code-analysistombstonesStatic code analysistombstonedead code removaldynamic code analysis

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/scheb-tombstone/health.svg)

```
[![Health](https://phpackages.com/badges/scheb-tombstone/health.svg)](https://phpackages.com/packages/scheb-tombstone)
```

###  Alternatives

[typo3/cms

TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.

1.2k1.9M122](/packages/typo3-cms)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M574](/packages/shopware-core)[aeliot/todo-registrar

Register TODOs from source code in issue tracker

153.0k](/packages/aeliot-todo-registrar)[jolicode/castor

A lightweight and modern task runner. Automate everything. In PHP.

54743.1k4](/packages/jolicode-castor)[contao/core-bundle

Contao Open Source CMS

1231.6M2.8k](/packages/contao-core-bundle)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)

PHPackages © 2026

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