PHPackages                             gplanchat/durable-bridge-temporal - 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. gplanchat/durable-bridge-temporal

ActiveLibrary

gplanchat/durable-bridge-temporal
=================================

Temporal journal EventStore + worker (gRPC only, no Temporal PHP SDK) for gplanchat/durable

00PHP

Since Mar 29Pushed 1mo agoCompare

[ Source](https://github.com/gplanchat/durable-bridge-temporal)[ Packagist](https://packagist.org/packages/gplanchat/durable-bridge-temporal)[ RSS](/packages/gplanchat-durable-bridge-temporal/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

durable-bridge-temporal (`src/Bridge/Temporal`)
===============================================

[](#durable-bridge-temporal-srcbridgetemporal)

Bridge **gRPC** (sans SDK Temporal PHP) pour persister le journal Durable dans un **workflow Temporal** minimal.

Namespace PHP : **`Gplanchat\Bridge\Temporal`**.

**Invariant déploiement** : si vous activez Temporal pour Durable, le **journal** (`EventStore`) et les **files applicatives** partagent la **même** connexion Temporal (`temporal://…`). Le **type d’accès** (worker journal receive-only vs enveloppe applicative) est choisi via **`options.purpose`** (`journal` | `application`) ou déduit (présence de **`inner`** ⇒ applicatif). Les schémas **`temporal-journal://`** et **`temporal-application://`** restent acceptés et sont normalisés en **`temporal://`**.

Prérequis
---------

[](#prérequis)

- PHP **ext-grpc**
- Serveur Temporal joignable (`target` type `host:7233`)

Composants
----------

[](#composants)

ClasseRôle`TemporalJournalEventStore`Implémente `Gplanchat\Durable\Store\EventStoreInterface``TemporalTransportFactory`Fabrique unique **`temporal://`** : journal (`TemporalJournalTransport`, receive-only) ou applicatif (`TemporalApplicationTransport` + `inner`) selon `purpose` / `inner``TemporalJournalTransport`Transport Symfony Messenger **receive-only** (même DSN `temporal://…`, sans `inner` par défaut)`TemporalApplicationTransport`Enveloppe un transport Messenger réel (`temporal://…?inner=…` ou `options.inner`) pour les messages applicatifs Durable ; évolution vers gRPC Temporal`RunTemporalJournalWorkerCommand`Boucle de poll (`durable:temporal:journal-worker:run`) pour FrankenPHP Worker ou systemd`TemporalBridgeBundle`Enregistre les factories Messenger + la commande journalDSN transport (unique)
----------------------

[](#dsn-transport-unique)

```
temporal://127.0.0.1:7233?namespace=default&journal_task_queue=durable-journal&tls=0

```

Paramètres query : `namespace`, `task_queue` ou `journal_task_queue`, `workflow_type`, `workflow_task_queue`, `activity_task_queue`, `identity`, `tls` (bool).

### Journal (receive-only)

[](#journal-receive-only)

Sans **`inner`** et sans `options.purpose=application` : le transport instancié est **`TemporalJournalTransport`**.

### Files applicatives (`inner`)

[](#files-applicatives-inner)

```
temporal://127.0.0.1:7233?namespace=default&inner=in-memory://&workflow_task_queue=durable-workflows&activity_task_queue=durable-activities&tls=0

```

Ou bien `temporal://…` **sans** `inner` dans l’URL et **`options: { purpose: application, inner: 'in-memory://' }`** dans la config Messenger.

- **`inner`** (requis pour l’accès applicatif) : DSN du transport Symfony Messenger réel (redis, doctrine, in-memory, etc.).
- **`workflow_task_queue`** / **`activity_task_queue`** : réservés à l’évolution gRPC ; tant que l’enveloppe délègue à **`inner`**, le trafic applicatif transite par ce transport.

Symfony
-------

[](#symfony)

1. Dans le monorepo, le code est déjà présent sous `src/Bridge/Temporal` ; pour un dépôt publié à part, `composer require gplanchat/durable-bridge-temporal`.
2. Enregistrer `Gplanchat\Bridge\Temporal\TemporalBridgeBundle` dans le kernel.
3. `framework.messenger.transports.temporal_journal: 'temporal://…'` (ou `purpose: journal` si tu partages le même DSN de base)
4. `messenger:consume temporal_journal` (nom du transport selon ta config).
5. Remplacer `EventStoreInterface` par `TemporalJournalEventStore` (DI explicite).

FrankenPHP Worker
-----------------

[](#frankenphp-worker)

Même logique que la commande console : exécuter le binaire PHP qui lance `durable:temporal:journal-worker:run --dsn='temporal://…'` (sans `--max-ticks`) sous le mode Worker FrankenPHP, ou équivalent process long.

Documentation
-------------

[](#documentation)

[Voir ADR014](../../../documentation/adr/ADR014-temporal-journal-eventstore-bridge.md).

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance60

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/144109625f8029112d56f43d08120cf03a0918ea3b4fd59ab53f09b02f630b00?d=identicon)[gplanchat](/maintainers/gplanchat)

---

Top Contributors

[![gplanchat](https://avatars.githubusercontent.com/u/152367?v=4)](https://github.com/gplanchat "gplanchat (2 commits)")

### Embed Badge

![Health badge](/badges/gplanchat-durable-bridge-temporal/health.svg)

```
[![Health](https://phpackages.com/badges/gplanchat-durable-bridge-temporal/health.svg)](https://phpackages.com/packages/gplanchat-durable-bridge-temporal)
```

PHPackages © 2026

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