PHPackages                             aeliot/todo-registrar - 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. aeliot/todo-registrar

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

aeliot/todo-registrar
=====================

Register TODOs from source code in issue tracker

3.4.3(2mo ago)153.0k1[6 issues](https://github.com/Aeliot-Tm/todo-registrar/issues)MITPHPPHP ^8.2CI passing

Since Jun 13Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/Aeliot-Tm/todo-registrar)[ Packagist](https://packagist.org/packages/aeliot/todo-registrar)[ RSS](/packages/aeliot-todo-registrar/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (44)Versions (47)Used By (0)

[![logo](https://camo.githubusercontent.com/a13664c82b149e4c24da18de0a8b691afb6df4818546f6edc7bb14744fe6bb8e/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f41656c696f742d546d2f746f646f2d726567697374726172406d61696e2f646f63732f6c6f676f2e737667)](https://camo.githubusercontent.com/a13664c82b149e4c24da18de0a8b691afb6df4818546f6edc7bb14744fe6bb8e/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f41656c696f742d546d2f746f646f2d726567697374726172406d61696e2f646f63732f6c6f676f2e737667)

[![GitHub Release](https://camo.githubusercontent.com/9767009e538d83355aef18ecac438816cb768fbfa7dfc2f317d12245b30ed6ef/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f41656c696f742d546d2f746f646f2d7265676973747261723f6c6162656c3d52656c65617365266c6162656c436f6c6f723d626c61636b)](https://packagist.org/packages/aeliot/todo-registrar)[![Testing](https://github.com/Aeliot-Tm/todo-registrar/actions/workflows/automated_testing.yml/badge.svg?branch=main)](https://github.com/Aeliot-Tm/todo-registrar/actions/workflows/automated_testing.yml?query=branch%3Amain)[![Security Audit](https://github.com/Aeliot-Tm/todo-registrar/actions/workflows/security-audit.yaml/badge.svg?branch=main)](https://github.com/Aeliot-Tm/todo-registrar/actions/workflows/security-audit.yaml?query=branch%3Amain)[![GitHub License](https://camo.githubusercontent.com/ecc1adc3eb050227c24828a5f41fa6a0f0e1b098119904bb7f9f820ce5dfa87e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f41656c696f742d546d2f746f646f2d7265676973747261723f6c6162656c3d4c6963656e7365266c6162656c436f6c6f723d626c61636b)](LICENSE)

It takes TODO/FIXME and other comments from your php-code and register them as issues in Issue Trackers like JIRA. With all necessary labels, linked issues and so on.

Motivation
----------

[](#motivation)

Time to time developers left notes in code to not forget to do something. And they forget to do it. One of the main reason is that it is difficult to manage them.

Why do developers left comment in code instead of registering of issues? It is convenient. You don't need to deal with UI of Issue Tracker and to fill lots of field. And lots of times to register each issue. It takes time. The second reason, comment in code permit to mark exact place which have to be modified. And many other reasons. No matter why they do it. They do it and leave this comments for years.

Somebody have to manage it.

So, we need in tool which will be responsible for registering of issues and save time of developers. After that you can use all power of management to plan solving of lacks of your code.

This script do it for you. It registers issues with all necessary params. Then injects IDs/Keys of created issues into comment in code. This prevents creating of issues twice and injected marks helps to find proper places in code quickly.

How it works
------------

[](#how-it-works)

1. Detect TODO in comment.
2. Create issue in issue tracker ([list of supported](#supported-issue-trackers)).
3. Inject number of ticket into TODO-comment.

[![detect_register_inject.png](https://camo.githubusercontent.com/aac53c6e9ab21fda0b84207415310b30871080d2fa88c5af19d3aa6f4a7b9349/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f41656c696f742d546d2f746f646f2d726567697374726172406d61696e2f646f63732f6465746563745f72656769737465725f696e6a6563742e706e67)](https://camo.githubusercontent.com/aac53c6e9ab21fda0b84207415310b30871080d2fa88c5af19d3aa6f4a7b9349/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f41656c696f742d546d2f746f646f2d726567697374726172406d61696e2f646f63732f6465746563745f72656769737465725f696e6a6563742e706e67)

> See latest **benchmark [here](https://github.com/Aeliot-Tm/todo-registrar-benchmark/blob/main/benchmark.md)**.

Using
-----

[](#using)

**Basic using:**

1. Create [configuration file](docs/config/general_config.md).
2. Call shell script with necessary [command line options](#command-line-options).
3. Commit updated files. You can config your pipeline/job on CI which commits updates.

**There are prepared several ways of using:**

1. Using of GitHub Action: [TODO Registrar Action](https://github.com/marketplace/actions/todo-registrar).
2. [Using of Docker Container](#using-of-docker-container).
3. [Using of PHAR file](#using-of-phar-file).
4. [Using of Composer Package](#using-of-composer-package).

I recommend [TODO Registrar Action](https://github.com/marketplace/actions/todo-registrar) for repositories hosted on GitHub.

The next recommendation is using of Docker container. It provides fully isolated solution. There is no matter which version of PHP installed in yous system and which components required by Composer (no dependency hell).

The next one is using of single `PHAR` file. It frees you from dependency hell, but you have to pay attention to version of PHP installed in you system and its modules. However, this may be more familiar for you.

The last one is using of Composer package. The most common, but less flexible method.

### Using of Docker Container

[](#using-of-docker-container)

You can use the pre-built Docker image from GitHub Container Registry:

1. Pull the latest image ```
    docker pull ghcr.io/aeliot-tm/todo-registrar:latest
    ```
2. Run script with necessary [command line options](#command-line-options)```
    docker run --rm -it \
      -v $(pwd):/code \
      ghcr.io/aeliot-tm/todo-registrar:latest
    ```

**Important notes:**

- Mount your project directory to `/code` (this is the working directory inside the container).
- Use `-it` flags for interactive mode if you need to see real-time output.
- The container uses unbuffered output, so messages will appear in real-time.
- Pass necessary environment variables instructions `-e $VAR_NAME`or by the creating of `.env` file with necessary variables in the root of project.
- PHAR file inside the container (`/usr/local/bin/todo-registrar`). You can rely on it.

### Using of PHAR file

[](#using-of-phar-file)

1. Download PHAR directly to root directory ```
    wget -O todo-registrar.phar "https://github.com/Aeliot-Tm/todo-registrar/releases/latest/download/todo-registrar.phar"
    ```
2. Call script with necessary [command line options](#command-line-options)```
    php todo-registrar.phar
    ```

Additional instructions how to verify package read [here](docs/installation/phar_directly.md).

**Alternatively**, you can install `phar` file by [PHIVE](https://phar.io/)

1. Install phar file (by default it will be installed in directory `tools` in the root of project without extension) ```
    phive install todo-registrar
    ```
2. Call script with necessary [command line options](#command-line-options)```
    tools/todo-registrar
    ```

Additional instructions read [here](docs/installation/phive.md).

### Using of Composer Package

[](#using-of-composer-package)

1. Require the package as development dependency ```
    composer require --dev aeliot/todo-registrar
    ```
2. Call script with necessary [command line options](#command-line-options)```
    vendor/bin/todo-registrar
    ```

### Command Line Options

[](#command-line-options)

First of all, pay attention to **available options:**

Long FormShort FromDescription`--config=/path/to/config``-c /path/to/config`Path to [configuration file](docs/config/general_config.md) when it is not in default place`--report-format=FORMAT`Export format for [processing report](docs/report.md): `none`, `json`, `yaml` (default: `none`)`--report-path=PATH`Report file path. Default: `todo-registrar-report.`. Use `-` for stdout`-q`, `-v`, `-vv`, `-vvv`Verbosity levels. The command uses [Symfony Console verbosity levels](https://symfony.com/doc/7.4/console/verbosity.html)**NOTE:** You can pass a special value`--config=STDIN` then [script obtains YAML from STDIN](docs/config/general_config_yaml.md#loading-from-stdin).

### Integration on CI

[](#integration-on-ci)

The main idea is monitoring of new TODOs on single branch of repository to avoid creation of duplicated issues by competing processes and avoid merge conflicts.

The branch should be quite stable (without development directly in it. At the same time, it should be as close to development as possible for earlier catching of tech-debt. Soon of all, it is called `development`, but `main`/`master` is useful too.

Configure you integration depending on used git-server:

1. GitHub Action (use [TODO Registrar Action](https://github.com/marketplace/actions/todo-registrar))
2. [Configure GitLab CI](docs/GitlLab/integration_on_ci.md)

Configuration
-------------

[](#configuration)

First of all you have to create [general config](docs/config/general_config.md).

Additionally, script supports [inline configuration](docs/inline_config.md) - nice feature for the fine-tuning of each created issue. It helps flexibly configure different aspects of created issues like labels, components, relations to other issues and so on. So, it becomes mighty tool. 😊

Also, you can enable [sequential comments gluing](docs/sequential_comments_gluing.md) to treat consecutive single-line comments as a single multi-line comment for TODO processing.

### Supported tags

[](#supported-tags)

It detects `TODO` and `FIXME` by default. At the same time, you can config your custom set of tags in config file. Whey will be detected case insensitively.

Supported formats of comments:
------------------------------

[](#supported-formats-of-comments)

It detects TODO-tags in:

- single-line comments started with both `//` and `#` symbols
- multiple-line comments `/* ... */`
- phpDoc `/** ... **/`.

Comments can be formatted differently:

```
// TODO: comment summary
// TODO comment summary
// TODO@assigne: comment summary

/**
 * TODO: XX-001 comment summary
 *       with some complex description
 */

// TODO: comment summary
//       with some complex description
//       in sequential single-line comments
```

And others. [See all supported formats](docs/supported_patters_of_comments.md).

Supported Issue Trackers
------------------------

[](#supported-issue-trackers)

Issue TrackerDescription[![](https://camo.githubusercontent.com/dccd53d6ca653b7c7b8e77f2f3377eaae3f8f594c0a40e66834f4fc299e42c75/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f676974687562)](https://camo.githubusercontent.com/dccd53d6ca653b7c7b8e77f2f3377eaae3f8f594c0a40e66834f4fc299e42c75/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f676974687562) [GitHub](https://github.com/)See [description of configuration](docs/registrar/GitHub/config.md). Supported via API tokens.[![](https://camo.githubusercontent.com/4e55ae7a4ca43ceba7d254b2e2c68c7c5371a47a1f8c4a0085f3f285250b66c6/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f6769746c6162)](https://camo.githubusercontent.com/4e55ae7a4ca43ceba7d254b2e2c68c7c5371a47a1f8c4a0085f3f285250b66c6/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f6769746c6162) [GitLab](https://about.gitlab.com/)See [description of configuration](docs/registrar/GitLab/config.md). Supported via API tokens (HTTP Token or OAuth).[![](https://camo.githubusercontent.com/a5fb20e015365d65a6633464aad5f5b79c214f4da3450632dd1ffc6c03fb9408/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f6a697261)](https://camo.githubusercontent.com/a5fb20e015365d65a6633464aad5f5b79c214f4da3450632dd1ffc6c03fb9408/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f6a697261) [JIRA](https://www.atlassian.com/software/jira)See [description of configuration](docs/registrar/JIRA/config.md). Supported via API tokens.[![](https://camo.githubusercontent.com/5312834d7a3a272e93676ce042a9b141123800decdb3fb6f675c95f77b7d9242/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f7265646d696e65)](https://camo.githubusercontent.com/5312834d7a3a272e93676ce042a9b141123800decdb3fb6f675c95f77b7d9242/68747470733a2f2f63646e2e73696d706c6569636f6e732e6f72672f7265646d696e65) [Redmine](https://www.redmine.org/)See [description of configuration](docs/registrar/Redmine/config.md). Supported via API keys or Basic Auth.[![](https://camo.githubusercontent.com/b37a370a312de8f508b18f523ab5ed847e697ed10b05fe3bd8fd96dbd40d8798/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f662f66332f4c6f676f5f59616e6465785f547261636b65725f323032312e737667)](https://camo.githubusercontent.com/b37a370a312de8f508b18f523ab5ed847e697ed10b05fe3bd8fd96dbd40d8798/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f662f66332f4c6f676f5f59616e6465785f547261636b65725f323032312e737667) [Yandex Tracker](https://tracker.yandex.com/)See [description of configuration](docs/registrar/YandexTracker/config.md). Supported via OAuth tokens.Any custom Issue TrackerRead about [customization](docs/customization.md)Articles
--------

[](#articles)

RU:

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

[](#contributing)

Read [contributing instructions](CONTRIBUTING.md).

###  Health Score

49

—

FairBetter than 95% of packages

Maintenance80

Actively maintained with recent releases

Popularity25

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 98.5% 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 ~18 days

Recently: every ~2 days

Total

36

Last Release

66d ago

Major Versions

v1.8.0 → v2.0.02025-12-19

v2.3.1 → v3.0.02026-01-09

### Community

Maintainers

![](https://www.gravatar.com/avatar/56d81f2702c20990da8d701ba1083e398c94cfcadfdd27b1a90e7791aac92053?d=identicon)[aeliot-tm](/maintainers/aeliot-tm)

---

Top Contributors

[![Aeliot-Tm](https://avatars.githubusercontent.com/u/8513062?v=4)](https://github.com/Aeliot-Tm "Aeliot-Tm (792 commits)")[![actions-user](https://avatars.githubusercontent.com/u/65916846?v=4)](https://github.com/actions-user "actions-user (6 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (6 commits)")

---

Tags

github-issuesgitlab-issuesissue-automationissue-trackingjira-apireadminereadmine-issuesstatic-anaysistodo-automationtodo-commenttodo-registrartodo-trackeryandex-trackerstatic analysisTODO registrarissue-trackingJIRA APIyandex trackercreate issueTODO commenttodo trackingGitHub IssueGitLab IssueReadmine Issue

###  Code Quality

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/aeliot-todo-registrar/health.svg)

```
[![Health](https://phpackages.com/badges/aeliot-todo-registrar/health.svg)](https://phpackages.com/packages/aeliot-todo-registrar)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[symfony/maker-bundle

Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.

3.4k111.1M568](/packages/symfony-maker-bundle)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6939.5M343](/packages/drupal-core-recommended)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[silverstripe/framework

The SilverStripe framework

7213.5M2.5k](/packages/silverstripe-framework)

PHPackages © 2026

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