PHPackages                             kleisli/milly-crudui - 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. [Admin Panels](/categories/admin)
4. /
5. kleisli/milly-crudui

ActiveNeos-package[Admin Panels](/categories/admin)

kleisli/milly-crudui
====================

1.0.4(1y ago)429PHP

Since Feb 26Pushed 7mo ago1 watchersCompare

[ Source](https://github.com/Kleisli/Milly.CrudUI)[ Packagist](https://packagist.org/packages/kleisli/milly-crudui)[ RSS](/packages/kleisli-milly-crudui/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (4)Versions (18)Used By (0)

Milly.CrudUI
============

[](#millycrudui)

Build administration UIs for Neos.Flow entities

[![](Documentation/Images/cyber_skank.png)](Documentation/Images/cyber_skank.png)Example Neos backend UI from [Milly.CrudUI.Showcase](https://github.com/Kleisli/Milly.CrudUI.Showcase)

Model-View-Controller
---------------------

[](#model-view-controller)

### Domain Model and Repository

[](#domain-model-and-repository)

With Milly.CrudUI you can manage any flow entity.

#### Customize models

[](#customize-models)

- [Make the entities sortable](Documentation/Domain.md#sorting)

### Views

[](#views)

Milly.CrudUI loads default fusion templates out of the box, but you can create your own, if you want to add custom elements.

[![](Documentation/Images/index.png)](Documentation/Images/index.png)Example index view from [Milly.CrudUI.Showcase](https://github.com/Kleisli/Milly.CrudUI.Showcase)

[![](Documentation/Images/edit.png)](Documentation/Images/edit.png)Example edit view with Tracks as relation from [Milly.CrudUI.Showcase](https://github.com/Kleisli/Milly.CrudUI.Showcase)

[![](Documentation/Images/new.png)](Documentation/Images/new.png)Example creation view from [Milly.CrudUI.Showcase](https://github.com/Kleisli/Milly.CrudUI.Showcase)

#### Customize views

[](#customize-views)

- [Apply custom styles with theming](Documentation/Views.md#theming)
- [Add custom fusion templates](Documentation/Views.md#custom-templates)

### Controller

[](#controller)

Milly.CrudUI can be used for Neos backend modules or with regular ActionControllers to provide crud functionality to frontend users.

Neos backend module

```
class MyModelController extends AbstractModuleController
{
    use CrudControllerTrait;
}

```

For Neos frontend or in plain Flow applications

```
class MyModelController extends ActionController
{
    use CrudControllerTrait;
}

```

#### Customize controllers

[](#customize-controllers)

- [Refer to a mismatching Model Namespace](Documentation/Controller.md#mismatching-model-namespace)
- [Select the crud functionalities to add](Documentation/Controller.md#select-the-functionalities-to-add)

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

[](#configuration)

Configuration Settings have to be defined for each model. A Model `MyModel` is defined in the configuration file `Configuration/Settings.CrudUI.MyModel.yaml`

```
Milly:
  CrudUI:
    entities:
      :
        readonly: true
        label:
          one: 'My model'
          many: 'My models'
        parent: 'parentProperty'
        views: []
        properties: []
        relations: []

```

### Labels

[](#labels)

- `label` : Singular and plural form of how the entity class is labelled in the UI

### Parent

[](#parent)

- `parent` : If you want to manage nested structures, you can set a property, that is a reference the parent of the current model. The parent model must have a configured `relation` to the child model.

### Views-Configuration

[](#views-configuration)

For each view, an array of properties that should be rendered can be defined.

```
views:
    index:
        properties: [, ]
    show:
        properties: []
    edit:
        properties: []
    relation:
        properties: []
    export:
        properties: []

```

Configuration of the view `relation` specifies what properties of a model are displayed when it is shown as relation in the `show` view of the `parent` model.

The views configuration are optional. When no views configuration exists for a view, all properties are displayed and the default settings are applied.

#### Customize views-configuration

[](#customize-views-configuration)

- [column headers for `index` and `relation`](Documentation/Configuration.md#show-column-headers)
- [pagination for `index`](Documentation/Configuration.md#pagination)
- [filter options for `index`](Documentation/Configuration.md#filters)
- [orderBy options for `index`](Documentation/Configuration.md#orderBy)

### Properties-Configuration

[](#properties-configuration)

To make a property displayable or editable with Milly.CrudUI it has to be added as a key to the `properties` configuration.

```
properties:
  : []
  :
    label: 'Title'
    readonly: true

```

- `label` : how the property is labelled in the UI

If there is no property configuration

- the default type `string` is used
- the label will be fetched from the xlf file `Model/MyModel.xlf` with the property name as trans-unit id. see [MyModel.xlf](Documentation/Examples/MyModel.xlf) for an example.
    - if there is no such file or key, the property name will be used as label

```
properties:
    :
        type: image
    :
        type: select
        options:
            repository: MyVendor\MyPackage\Domain\Repository\MyEntityRepository

```

PropertyEditors provide form fields to edit properties and PropertyDisplayers are used to display properties values. There are several built-in combinations of PropertyEditor and PropertyDisplayer defined by a `type`. For some types there are `options` that can or have to be defined.

The following property types exist. For more details, see the detailed list of [Property Types](Documentation/PropertyTypes.md)

- `string` (default)
- `textarea`
- `number`
- `email`
- `select` for ManyToOne properties
- `multiSelect` for OneToMany or ManyToMany properties
- `booleanRadio` for boolean properties
- `booleanCheckbox` for boolean properties
- `date` for DateTime properties
- `dateTime` for DateTime properties
- `dateInterval` for DateInterval properties
- `image` for `\Neos\Flow\ResourceManagement\PersistentResource` properties
- `audio` for `\Neos\Flow\ResourceManagement\PersistentResource` properties
- `jsonList` for array properties annotated with `@ORM\Column(type="flow_json_array")`

#### Customize properties-configuration

[](#customize-properties-configuration)

- [Map properties (e.g. of connected entities)](Documentation/Configuration.md#map-properties-of-connected-entities)
- [Add custom property editors and displayers](Documentation/Configuration.md#add-custom-property-types)

### Relations-Configuration

[](#relations-configuration)

Technically, a property can also be a relation (see types `select` or `multiSelect`) and relations are also properties of the class.

```
relations:
  oneToManyProperty: []
  manyToManyProperty:
    label: 'Many'
    readonly: true

```

The differences in the context of Milly.CrudUI are:

- when configured in `properties`, the user can only choose from existing objects, while in `relations` the user can create new objects of the relation class
- the list of objects in `relations` can show more than one property of the objects (configured in `views.relation`), as `properties` the objects are displayed as list of their labels

Why Milly?
----------

[](#why-milly)

[Milly Koss](https://en.wikipedia.org/wiki/Milly_Koss) was an American pioneering computer programmer. The Association for Women in Computing awarded her an Ada Lovelace Award in 2000.

> We needed to understand how we might reuse tested code and have the machine help in programming. As we programmed, we examined the process and tried to think of ways to abstract these steps to incorporate them into higher-level language. This led to the development of interpreters, assemblers, compilers, and generators—programs designed to operate on or produce other programs, that is, automatic programming. (Milly Koss, [Source](https://en.wikipedia.org/wiki/Automatic_programming))

Kudos
-----

[](#kudos)

This package is based on the idea and inspired by [Sandstorm.CrudForms](https://github.com/sandstorm/CrudForms)

The development of this package has significantly been funded by [Profolio](https://www.profolio.ch/) - a digital platform for career choice &amp; career counseling

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance58

Moderate activity, may be stable

Popularity11

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 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.

###  Release Activity

Cadence

Every ~24 days

Recently: every ~32 days

Total

16

Last Release

438d ago

Major Versions

0.9.9 → 1.0.0-rc12024-05-17

### Community

Maintainers

![](https://www.gravatar.com/avatar/b0c4c2e910a7d2e4fd8cf1e4a2392d2c54622ae5ab12e8b338422d404fa8f21a?d=identicon)[kleisli](/maintainers/kleisli)

---

Top Contributors

[![Kleisli](https://avatars.githubusercontent.com/u/18674199?v=4)](https://github.com/Kleisli "Kleisli (79 commits)")

---

Tags

admin-uicrud-generatorneos-cmsneos-flowneos-fusion

### Embed Badge

![Health badge](/badges/kleisli-milly-crudui/health.svg)

```
[![Health](https://phpackages.com/badges/kleisli-milly-crudui/health.svg)](https://phpackages.com/packages/kleisli-milly-crudui)
```

###  Alternatives

[jeroennoten/laravel-adminlte

Easy AdminLTE integration with Laravel

4.0k4.8M43](/packages/jeroennoten-laravel-adminlte)[dmstr/yii2-adminlte-asset

AdminLTE backend theme asset bundle for Yii 2.0 Framework

1.1k1.8M67](/packages/dmstr-yii2-adminlte-asset)[dwij/laraadmin

LaraAdmin is a Open source Laravel Admin Panel / CMS which can be used as Admin Backend, Data Management Tool or CRM boilerplate for Laravel with features like CRUD Generation, Module Manager, Media, Menus, Backups and much more

1.6k68.7k](/packages/dwij-laraadmin)[filament/spatie-laravel-media-library-plugin

Filament support for `spatie/laravel-medialibrary`.

1764.8M125](/packages/filament-spatie-laravel-media-library-plugin)[bezhansalleh/filament-exceptions

A Simple &amp; Beautiful Pluggable Exception Viewer for FilamentPHP's Admin Panel

193195.9k13](/packages/bezhansalleh-filament-exceptions)[neos/demo

Site package for the Neos Demo Site

18181.0k6](/packages/neos-demo)

PHPackages © 2026

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