PHPackages                             atwx/silverstripe-frontdesk-kit - 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. [Framework](/categories/framework)
4. /
5. atwx/silverstripe-frontdesk-kit

ActiveSilverstripe-vendormodule[Framework](/categories/framework)

atwx/silverstripe-frontdesk-kit
===============================

A frontend kit for Silverstripe framework

074PHP

Since May 26Pushed 1mo agoCompare

[ Source](https://github.com/atwx/silverstripe-frontdesk-kit)[ Packagist](https://packagist.org/packages/atwx/silverstripe-frontdesk-kit)[ RSS](/packages/atwx-silverstripe-frontdesk-kit/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependenciesVersions (1)Used By (0)

silverstripe-frontdesk-kit
==========================

[](#silverstripe-frontdesk-kit)

A modern CRUD frontend toolkit for Silverstripe 6, built on **Tailwind CSS + DaisyUI + HTMX + Alpine.js + Chart.js**.

Rather than rigid table columns from `$summary_fields` and FieldList blobs for filters, you define columns, filters, and row actions cleanly in the controller — inspired by Laravel Backpack and Django Admin.

Requirements
------------

[](#requirements)

- PHP ^8.4
- Silverstripe Framework ^6
- Composer

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

[](#installation)

```
composer require atwx/silverstripe-frontdesk-kit
```

Expose assets and flush Silverstripe:

```
composer install
vendor/bin/sake dev/build flush=1
```

Quick Start
-----------

[](#quick-start)

See **[docs/quickstart.md](docs/quickstart.md)** for a step-by-step guide to setting up a new project.

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

[](#documentation)

DocumentContents[docs/quickstart.md](docs/quickstart.md)New project setup, first controller[docs/columns.md](docs/columns.md)Defining columns, links, formatting, export[docs/filters.md](docs/filters.md)TextFilter, SelectFilter, DateRangeFilter[docs/row-actions.md](docs/row-actions.md)Row actions, HTMX actions, conditional visibility[docs/templates.md](docs/templates.md)Overriding templates, HTMX partial rendering[docs/charts.md](docs/charts.md)Declarative Chart.js rendering via `Chart` include[docs/frontend.md](docs/frontend.md)Building CSS/JS, theming via CSS custom propertiesOverview
--------

[](#overview)

```
class ContactManageController extends FrontdeskController
{
    private static $managed_model = Contact::class;
    private static $url_segment = 'contacts';
    private static $title = 'Contacts';

    protected function defineColumns(): ColumnCollection
    {
        return ColumnCollection::fromSummaryFields(Contact::class)
            ->make('Title', 'Name')->link('view/{ID}')->end()
            ->make('Company', 'Company')->end();
    }

    protected function defineFilters(): FilterCollection
    {
        return FilterCollection::create()
            ->add(TextFilter::create('Query', 'Search')
                ->apply(fn($list, $v) => $list->filterAny([
                    'FirstName:PartialMatch' => $v,
                    'Surname:PartialMatch'   => $v,
                ])));
    }

    protected function formFields(FieldList $fields): FieldList
    {
        $fields->removeByName('InternalNote');
        return $fields;
    }
}
```

Charts
------

[](#charts)

Chart.js is bundled. Render any Chart.js config declaratively:

```

```

Expose a JSON method on the controller:

```
public function RevenueChartJson(): string
{
    return json_encode([
        'type' => 'line',
        'data' => ['labels' => $labels, 'datasets' => [...]],
        'options' => ['responsive' => true, 'maintainAspectRatio' => false],
    ]);
}
```

The bundled JS picks up every `[data-fdk-chart]` canvas on page load and after HTMX swaps.

Form Field Styling
------------------

[](#form-field-styling)

DaisyUI utility classes (`input`, `select`, `textarea`, `checkbox`, `btn`) are applied automatically to any form field rendered inside a `FrontdeskController` or `Security` controller context — the CMS admin is left untouched.

Frontend Build
--------------

[](#frontend-build)

The kit ships a **prebuilt** `client/dist/frontdesk.css` + `frontdesk.js`, so consuming projects work without Node.js. There are two ways to consume the CSS — see **[docs/frontend.md](docs/frontend.md)** for details.

**1. Prebuilt stylesheet** (no build step) — load it directly, as `FrontdeskController.ss` does:

```

```

**2. Single Tailwind build** (recommended when your app already builds its own CSS) — *don't* also load `frontdesk.css`; that creates a second DaisyUI runtime that can override the kit's component styles. Instead import the kit's **preset**into your own Tailwind entry so the whole page comes from one build:

```
/* app/client/src/css/tailwind.css */
@import "tailwindcss";
@import "@fdk/preset.css";            /* daisyUI config + kit @source globs + .fdk-* */

@source "../../../templates/**/*.ss"; /* your own templates */
@source "../../../src/**/*.php";
```

Map the `@fdk` alias to the kit's CSS dir. With `@tailwindcss/vite` the alias replacement **must be absolute**:

```
// vite.config.js
import { fileURLToPath, URL } from 'node:url'
// …
resolve: {
  alias: [{
    find: '@fdk',
    replacement: fileURLToPath(new URL(
      './vendor/atwx/silverstripe-frontdesk-kit/client/src/css', import.meta.url)),
  }],
},
```

Then drop the `frontdesk.css` `` (keep the `frontdesk.js` ``).

Rebuilding the prebuilt files:

```
cd vendor/atwx/silverstripe-frontdesk-kit
yarn install
yarn build
```

Theme without rebuilding by overriding DaisyUI v5 tokens **after** the kit styles:

```
/* In your app CSS */
:root {
    --color-primary:   oklch(45% 0.24 277);  /* primary colour */
    --color-secondary: oklch(58% 0.23 277);  /* secondary colour */
}
```

Licence
-------

[](#licence)

BSD-3-Clause

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance61

Regular maintenance activity

Popularity12

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/64d979993815fa2d2ea95b3fd72b4f43e95a631ce569f4f1c0330786971b5fc2?d=identicon)[adiwidjaja](/maintainers/adiwidjaja)

---

Top Contributors

[![adiwidjaja](https://avatars.githubusercontent.com/u/280394?v=4)](https://github.com/adiwidjaja "adiwidjaja (31 commits)")

### Embed Badge

![Health badge](/badges/atwx-silverstripe-frontdesk-kit/health.svg)

```
[![Health](https://phpackages.com/badges/atwx-silverstripe-frontdesk-kit/health.svg)](https://phpackages.com/packages/atwx-silverstripe-frontdesk-kit)
```

###  Alternatives

[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k104.3M831](/packages/laravel-socialite)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k38.6M289](/packages/laravel-dusk)[pinguo/php-msf

Pinguo Micro Service Framework For PHP

1.7k4.2k](/packages/pinguo-php-msf)[nineinchnick/edatatables

Grid widget for the Yii Framework, wrapper for the DataTables jQuery plugin

173.2k](/packages/nineinchnick-edatatables)[link-cloud/fast-hyperf

LinkCloud Fast Hyperf

241.2k1](/packages/link-cloud-fast-hyperf)

PHPackages © 2026

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