PHPackages                             web-vision/kanban-workspaces - 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. web-vision/kanban-workspaces

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

web-vision/kanban-workspaces
============================

Kanban Workspaces - Kanban Board Extension for TYPO3: Manage tasks and projects with an intuitive kanban interface

0.0.1(today)00GPL-2.0-or-laterJavaScriptPHP ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0

Since Jun 30Pushed todayCompare

[ Source](https://github.com/web-vision/kanban-workspaces)[ Packagist](https://packagist.org/packages/web-vision/kanban-workspaces)[ RSS](/packages/web-vision-kanban-workspaces/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (13)Versions (2)Used By (0)

[![TYPO3](https://camo.githubusercontent.com/bc6cede28f1d4c27c294b44db8268ad65a2df941a6d29d205a43919b47d4312a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31342e332e782d6f72616e67652e737667)](https://typo3.org/)[![TYPO3](https://camo.githubusercontent.com/3e8ed116aa59a4f10ea169b01a216d046c65ac61c4023db911071989cfad94f4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31332e342e782d6f72616e67652e737667)](https://typo3.org/)[![PHP](https://camo.githubusercontent.com/c2588b5670f2c910b8cc849ace22a22efda8956b7c2f797d11d2096bbfc7b1f5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d3737374242342e737667)](https://www.php.net/)[![PHP](https://camo.githubusercontent.com/278621fc49c71cdc38414030199af0284d7323979cad78496bfafbf7050ee4bc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e332532422d3737374242342e737667)](https://www.php.net/)[![PHP](https://camo.githubusercontent.com/e7fb02d4dba7ebc18300495e44eda0d0f1e5e176b17b0ad8542e31cf06735e73/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e342532422d3737374242342e737667)](https://www.php.net/)[![PHP](https://camo.githubusercontent.com/2371eeb1a98f81a6894947d4d7b429326ee7f4dbeb3d8940776b4ae7b8442725/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e352532422d3737374242342e737667)](https://www.php.net/)[![License](https://camo.githubusercontent.com/43a510dd0989747b1c3997cb691eaef0adc0f48c2ba392da31b012ef9030bf23/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d47504c2d2d322e302d2d6f722d2d6c617465722d626c75652e737667)](https://www.gnu.org/licenses/gpl-2.0.html)[![State](https://camo.githubusercontent.com/15eaa0ef5df905b2fa525d57cdfea36cc4eaa4eeb0cbb6498bf93f06d69c6d8c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73746174652d616c7068612d677265656e2e737667)](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/DeclarationFile/Index.html)

TYPO3 Extension `Kanban Workspaces`
===================================

[](#typo3-extension-kanban-workspaces)

Important

The extension is in an early experimental state and considered as `Proof-of-Concept (POC)`implementation and not everything is possible acting as smooth as expected or is finished.

URL**Repository:****Read online:****TER:**[https://extensions.typo3.org/extension/kanban\_workspaces/](https://extensions.typo3.org/extension/kanban_workspaces/)Description
-----------

[](#description)

Kanban board backend module for TYPO3 CMS workspace management.

This extension provides a Kanban-style UI in the TYPO3 backend to manage workspace content (pages, `tt_content`) via drag-and-drop, filters, and TYPO3 workspace APIs. Columns represent workspace stages; cards represent workspace records. You can move items between stages, filter by depth/language/stage, search, and use the integrated “Send to stage” workflow.

Features
--------

[](#features)

- **Kanban board**: Columns = workspace stages; cards = workspace records (pages, content elements).
- **Drag-and-drop**: Move cards between stages; persists via `Actions::sendToSpecificStageExecute`.
- **Filters**: Depth (this page / 1–4 levels / infinite), language (system languages + “all”), stage. Filters are stored in module data and applied to the workspace API request.
- **Global search**: Search input in header; filters the card list.
- **Preview modal**: Card detail with “Summary of changes”, “Activity”, and “History” tabs; Revert / Approve actions. Uses TYPO3 diff data where available.
- **Send to stage**: Integration with `@typo3/workspaces/renderable/send-to-stage-form.js` for stage transitions (including optional recipients and comments).
- **Workspace-aware**: Requires a non-Live workspace and a selected page (`id`); shows an infobox when on Live or no page is selected.
- **Stage configuration**: Stages come from `WorkspaceStageRepository`; optional Extension Manager setting to hide default TYPO3 stages and use only custom ones.

Compatibility
-------------

[](#compatibility)

BranchVersionTYPO3PHPmain0.0.x-devv13, v148.2, 8.3, 8.4, 8.5Installation
------------

[](#installation)

### Composer

[](#composer)

```
composer require web-vision/kanban-workspaces
```

### TypoScript

[](#typoscript)

Include the static template **“Kanban Workspaces Backend Module”** (`Configuration/TypoScript` via `ext_tables.php`) in the Install Tool or Template module.

### DDEV

[](#ddev)

If the project uses [DDEV](https://ddev.com/), run Composer and TYPO3 CLI commands inside the DDEV container (e.g. `ddev composer install`, `ddev exec typo3 …`).

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

[](#configuration)

### Extension Manager

[](#extension-manager)

Configure in **Admin Tools → Extension Manager → kanban\_workspaces** (or `ext_conf_template.txt`):

SettingTypeDescription`disableDefaultStage`booleanExclude default stages from the Kanban board; only custom stages (uid ≥ 1) are shown when enabled.`defaultStageId`intUsed by `DefaultStageDataHandlerHook` when overriding the stage for new workspace data.### TypoScript

[](#typoscript-1)

Optional overrides for template/partial/layout paths and `storagePid` are available in [Configuration/TypoScript/constants.typoscript](Configuration/TypoScript/constants.typoscript).

---

Usage
-----

[](#usage)

- **Location**: Backend → **Web** → **Kanban Workspaces** (module `web_kanbanworkspaces`, after *Web → Info*).
- **Access**: User-level (`access: user`), all workspaces (`workspaces: '*'`).

**Steps:**

1. Switch to a **non-Live** workspace (e.g. via the workspace selector in the backend).
2. Select a **page** in the page tree (the module receives the page `id`).
3. Open **Web → Kanban Workspaces**. The board loads workspace records for that page (depth, language, and stage from filters).
4. Use filters, search, drag-and-drop, card preview, and “Send to stage” as needed.

Architecture
------------

[](#architecture)

### Backend

[](#backend)

- [KanbanWorkspacesController](Classes/Controller/KanbanWorkspacesController.php) `index` action renders the module.
- It builds stage config from `WorkspaceStageRepository` (and the “disable default stages” EM setting), system languages, and depth options.
- It injects `WorkspaceConfig` (JSON) and loads `@web-vision/kanban-workspaces/App.js`, the workspace send-to-stage form, and CSS.

### Frontend

[](#frontend)

The frontend is built as ES6 modules under `Resources/Public/JavaScript/`, import-mapped to `@web-vision/kanban-workspaces/` (see [Configuration/JavaScriptModules.php](Configuration/JavaScriptModules.php)). The former single-file `Workspace.js` has been split into a central orchestrator and focused collaborators:

- [App.js](Resources/Public/JavaScript/App.js): entrypoint. Enables horizontal drag-to-scroll, instantiates `WorkspaceBoard`, and wires application-level events (e.g. `card:moved` → POST to the workspace dispatch API).
- [WorkspaceBoard.js](Resources/Public/JavaScript/WorkspaceBoard.js): `WorkspaceBoard` class — the orchestrator. Owns the shared state (cards, stages, filters, selection, history) and the lifecycle wiring, and delegates the actual work to its collaborators, which reach shared state and each other through their `board` reference.

ModulePathResponsibility`WorkspaceApi`[data/WorkspaceApi.js](Resources/Public/JavaScript/data/WorkspaceApi.js)AJAX transport over the workspace dispatch endpoint.`DataTransformer`[data/DataTransformer.js](Resources/Public/JavaScript/data/DataTransformer.js)Stateless transform of API payloads into card / comment / history / diff view models.`BoardRenderer`[ui/BoardRenderer.js](Resources/Public/JavaScript/ui/BoardRenderer.js)Columns, cards and filter-sidebar markup.`DragController`[ui/DragController.js](Resources/Public/JavaScript/ui/DragController.js)Drag-and-drop, drop placeholders, stage-transition start.`ModalController`[ui/ModalController.js](Resources/Public/JavaScript/ui/ModalController.js)Preview and Send-to-Stage modals; revert / approve workflow.`FilterController`[ui/FilterController.js](Resources/Public/JavaScript/ui/FilterController.js)Search and filter handling, persistence and reloads.`CardActions`[ui/CardActions.js](Resources/Public/JavaScript/ui/CardActions.js)Card context-menu actions (preview, edit, assign, discard, move/revert).`EventEmitter`[core/EventEmitter.js](Resources/Public/JavaScript/core/EventEmitter.js)Minimal pub/sub used for the board's custom events.`initHorizontalScroll`[core/HorizontalScroll.js](Resources/Public/JavaScript/core/HorizontalScroll.js)Drag-to-scroll behaviour for the board.utilities[core/utils.js](Resources/Public/JavaScript/core/utils.js)Stateless helpers (HTML escaping, dates, icons, toasts, debounce).### APIs

[](#apis)

- **Fetch**: `ajax/workspace` dispatch, `RemoteServer::getWorkspaceInfos` with `id`, `depth`, `language`, `stage`, etc.
- **Move**: `Actions::sendToSpecificStageExecute` with `affects.elements` and `nextStage`.

### Data flow

[](#data-flow)

 ```
flowchart LR
    User --> KanbanUI[Kanban UI]
    KanbanUI --> WorkspaceBoard[WorkspaceBoard JS]
    WorkspaceBoard  AJAX[TYPO3 workspace AJAX]
    AJAX  GridData[Workspace / GridDataService]
```

      Loading ---

API integration
---------------

[](#api-integration)

**Summary:**

- **getWorkspaceInfos**: Request fields include `id`, `depth`, `language`, `stage`, etc.; response in `result.data`.
- **sendToSpecificStageExecute**: Payload with `affects.elements` (table, uid, t3ver\_oid) and `nextStage`.
- **Language fallback**: A PSR-14 `WorkspaceLanguageFallbackListener` substitutes `"all"` for any empty/null `language.title` in the workspace grid, so records whose `sys_language_uid` is no longer present in the site configuration still render with a label.

---

Development and testing
-----------------------

[](#development-and-testing)

### JavaScript

[](#javascript)

- Entrypoint: [App.js](Resources/Public/JavaScript/App.js); orchestrator: [WorkspaceBoard.js](Resources/Public/JavaScript/WorkspaceBoard.js); collaborators under `core/`, `data/` and `ui/` (see the [Frontend](#frontend) architecture table).
- All modules live under `Resources/Public/JavaScript/`; import map `@web-vision/kanban-workspaces/` is defined in [Configuration/JavaScriptModules.php](Configuration/JavaScriptModules.php).

### Debug / events

[](#debug--events)

The board communicates through the `EventEmitter` ([core/EventEmitter.js](Resources/Public/JavaScript/core/EventEmitter.js)). Subscribe via `workspaceBoard.on('', handler)` to observe its lifecycle and interactions, e.g.:

- `board:initialized`, `board:rendered`, `board:destroyed` – board lifecycle.
- `data:loaded` – workspace records fetched and transformed.
- `card:moved`, `card:drop`, `card:dragstart`, `card:dragend`, `card:click` – card interactions.
- `filter:change`, `filter:clear`, `search:change`, `search:clear` – filter / search changes.

Set the `mockData` option (in [App.js](Resources/Public/JavaScript/App.js)) to `true` to render the board from `window.WorkspaceConfig.mockData` instead of the live API. These require the Kanban board to be initialised on the current page.

---

Project structure
-----------------

[](#project-structure)

```
Classes/
├── Controller/KanbanWorkspacesController.php
├── Domain/Model/Dto/EmConfiguration.php
└── EventListener/AfterDataGeneratedForWorkspaceEventListener.php
Configuration/
├── Backend/Modules.php
├── JavaScriptModules.php
├── Services.yaml
└── TypoScript/
    ├── constants.typoscript
    └── setup.typoscript
Resources/
├── Private/   (Templates, Layouts, Language)
└── Public/    (JavaScript, Css, Icons, Documentation)
ext_emconf.php, ext_localconf.php, ext_tables.php, ext_conf_template.txt

```

---

Troubleshooting
---------------

[](#troubleshooting)

IssueWhat to check“You’re on live workspace” / “Please select workspace”Switch to a non-Live workspace in the backend.Board empty or no dataEnsure a page is selected in the page tree (`id` is set).Module not visibleInclude the “Kanban Workspaces Backend Module” TypoScript template. Check user/group permissions and `workspaces` access.JS errors / API failuresVerify `workspace_dispatch` (and related) AJAX URLs. Check browser console and network tab; ensure `EXT:workspaces` is installed and workspace APIs are available.---

Funding Partner
---------------

[](#funding-partner)

The following companies have already pledged funding for the Kanban Workspace module for TYPO3.

  [![Web Vision](Resources/Public/Images/Partners/readme/wv.card.svg)](Resources/Public/Images/Partners/readme/wv.card.svg) [![dkd](Resources/Public/Images/Partners/readme/dkd.card.svg)](Resources/Public/Images/Partners/readme/dkd.card.svg)   [![eCentral](Resources/Public/Images/Partners/readme/ecentral.card.svg)](Resources/Public/Images/Partners/readme/ecentral.card.svg) [![Webconsulting](Resources/Public/Images/Partners/readme/webconsulting.card.svg)](Resources/Public/Images/Partners/readme/webconsulting.card.svg)   [![KM2](Resources/Public/Images/Partners/readme/km2.card.svg)](Resources/Public/Images/Partners/readme/km2.card.svg) [![Sutor Bank](Resources/Public/Images/Partners/readme/sutor.card.svg)](Resources/Public/Images/Partners/readme/sutor.card.svg)   [![Devzspace](Resources/Public/Images/Partners/readme/devzspace.card.svg)](Resources/Public/Images/Partners/readme/devzspace.card.svg)  ---

Create a release (maintainers only)
-----------------------------------

[](#create-a-release-maintainers-only)

Prerequisites:

- git binary
- ssh key allowed to push new branches to the repository
- GitHub command line tool `gh` installed and configured with user having permission to create pull requests.

**Prepare release locally**

> Set `RELEASE_BRANCH` to branch release should happen, for example: 'main'. Set `RELEASE_VERSION` to release version working on, for example: '1.0.0'.

```
echo '>> Create release based on configuration' ; \
  RELEASE_BRANCH='main' ; \
  RELEASE_VERSION="0.0.1"
  DEV_VERSION="0.0.2"
  echo ">> Checkout branches" && \
  git checkout main && \
  git fetch --all && \
  git pull --rebase && \
  git checkout ${RELEASE_BRANCH} && \
  git pull --rebase && \
  echo ">> Create release ${RELEASE_VERSION}" && \
  git checkout -b release-${RELEASE_VERSION} && \
  sed -i "s/^COMPOSER_ROOT_VERSION.*/COMPOSER_ROOT_VERSION=\"${RELEASE_VERSION}\"/" Build/Scripts/runTests.sh && \
  sed -i "s/^  RELEASE_VERSION.*/  RELEASE_VERSION=\"${RELEASE_VERSION}\"/" README.md && \
  sed -i "s/^  DEV_VERSION.*/  DEV_VERSION=\"${DEV_VERSION}\"/" README.md && \
  tailor set-version ${RELEASE_VERSION} && \
  composer config "extra"."typo3/cms"."version" "${RELEASE_VERSION}" && \
  echo "${RELEASE_VERSION}" > VERSION && \
  git add . && \
  git commit -m "[RELEASE] ${RELEASE_VERSION}" && \
  git push --set-upstream origin release-${RELEASE_VERSION} && \
  gh pr create --fill --base ${RELEASE_BRANCH} --title "[RELEASE] ${RELEASE_VERSION}" && \
  sleep 10 && \
  gh pr checks --watch --interval 2 && \
  sleep 10 && \
  gh pr merge -rd --admin && \
  git remote prune origin && \
  git tag ${RELEASE_VERSION} && \
  git push origin ${RELEASE_VERSION} && \
  echo ">> Post-release - set dev version: ${DEV_VERSION}-dev" && \
  git checkout -b set-version-${DEV_VERSION} && \
  sed -i "s/^COMPOSER_ROOT_VERSION.*/COMPOSER_ROOT_VERSION=\"${DEV_VERSION}-dev\"/" Build/Scripts/runTests.sh && \
  tailor set-version ${DEV_VERSION} && \
  composer config "extra"."typo3/cms"."version" "${DEV_VERSION}-dev" && \
  echo "${DEV_VERSION}-dev" > VERSION && \
  git add . && \
  git commit -m "[TASK] Set dev version ${DEV_VERSION}" && \
  git push --set-upstream origin set-version-${DEV_VERSION} && \
  gh pr create --fill --base ${RELEASE_BRANCH} --title "[TASK] Set dev version \"${DEV_VERSION}-dev\"" && \
  sleep 10 && \
  gh pr checks --watch --interval 2 && \
  sleep 10 && \
  gh pr merge -rd --admin && \
  git remote prune origin
```

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity40

Maturing project, gaining track record

 Bus Factor1

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

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1453466?v=4)[Stefan Bürk](/maintainers/sbuerk)[@sbuerk](https://github.com/sbuerk)

---

Top Contributors

[![sbuerk](https://avatars.githubusercontent.com/u/1453466?v=4)](https://github.com/sbuerk "sbuerk (52 commits)")[![gnb-devzspace](https://avatars.githubusercontent.com/u/96369029?v=4)](https://github.com/gnb-devzspace "gnb-devzspace (36 commits)")[![GhanshyamBhava](https://avatars.githubusercontent.com/u/23184123?v=4)](https://github.com/GhanshyamBhava "GhanshyamBhava (1 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/web-vision-kanban-workspaces/health.svg)

```
[![Health](https://phpackages.com/badges/web-vision-kanban-workspaces/health.svg)](https://phpackages.com/packages/web-vision-kanban-workspaces)
```

###  Alternatives

[friendsoftypo3/content-blocks

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

101466.4k45](/packages/friendsoftypo3-content-blocks)[eliashaeussler/typo3-form-consent

Extension for TYPO3 CMS that adds double opt-in functionality to EXT:form

1595.5k](/packages/eliashaeussler-typo3-form-consent)[pagemachine/typo3-formlog

Form log for TYPO3

23233.9k8](/packages/pagemachine-typo3-formlog)[friendsoftypo3/visual-editor

TYPO3 CMS Visual Editor - Brings a modern WYSIWYG editing experience to TYPO3 CMS.

576.1k2](/packages/friendsoftypo3-visual-editor)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

41515.2k](/packages/wazum-sluggi)[typo3/cms-install

TYPO3 CMS Install Tool - The Install Tool is used for installation, upgrade, system administration and setup tasks.

1812.0M446](/packages/typo3-cms-install)

PHPackages © 2026

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