{"id":15016909,"url":"https://github.com/mooxphp/builder","last_synced_at":"2025-07-08T04:14:50.237Z","repository":{"id":62181923,"uuid":"492488553","full_name":"mooxphp/builder","owner":"mooxphp","description":"[READ-ONLY] Create Filament Resources in minutes","archived":false,"fork":false,"pushed_at":"2025-02-12T07:59:43.000Z","size":635,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-20T22:34:07.535Z","etag":null,"topics":["alpinejs","laravel","laravel-livewire","livewire-components","skeleton","tailwindcss","tall-stack","tallui"],"latest_commit_sha":null,"homepage":"https://moox.org","language":"PHP","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mooxphp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["mooxphp"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-05-15T13:01:55.000Z","updated_at":"2025-02-12T07:59:46.000Z","dependencies_parsed_at":"2024-04-08T20:59:08.898Z","dependency_job_id":"80cfdfc0-8e94-4035-ac28-c997756a09af","html_url":"https://github.com/mooxphp/builder","commit_stats":{"total_commits":537,"total_committers":90,"mean_commits":5.966666666666667,"dds":0.6983240223463687,"last_synced_commit":"c28d687d93216d00ed66993ef070d44dba5546ef"},"previous_names":["mooxphp/tallui-package-builder","mooxphp/builder"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mooxphp%2Fbuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mooxphp%2Fbuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mooxphp%2Fbuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mooxphp%2Fbuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mooxphp","download_url":"https://codeload.github.com/mooxphp/builder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239985506,"owners_count":19729511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alpinejs","laravel","laravel-livewire","livewire-components","skeleton","tailwindcss","tall-stack","tallui"],"created_at":"2024-09-24T19:49:33.255Z","updated_at":"2025-02-21T08:35:51.377Z","avatar_url":"https://github.com/mooxphp.png","language":"PHP","readme":"![Moox Builder](https://github.com/mooxphp/moox/raw/main/art/banner/builder.jpg)\n\n# Moox Builder\n\n🚀 What do you want to ~~build~~ **ship** today?\n\nFrom idea to a working LaravelApp in minutes. No coding required.\n\n## Work-in-Progress\n\n-   ✅ Entity generation with `builder:create`\n-   🟡 Generate all available contexts and presets\n-   🟡 Generate simple and nested taxonomies\n-   🚧 Entity deletion with `builder:delete`\n-   🚧 Bring back the build command to create packages\n\n## Pro Version (WIP, too)\n\n-   ✅ Implements more Blocks and Presets\n-   🟡 Offers advanced features like Publish, Author, Relations\n-   🚧 Package generation with `builder:package`\n-   🚧 App (Panel) generation with `builder:app`\n-   🚧 Frontend generation with `builder:frontend`\n-   🚧 UI for creating entities with custom blocks\n-   🚧 UI for creating packages\n-   🚧 UI for managing apps (panels)\n-   🚧 UI for managing frontend (themes)\n-   🚧 UI for managing versions\n-   🚧 Generate complete packages or apps as zip\n\n## Overview\n\nMoox Builder is a Laravel Package and Filament UI to build complete applications and packages with zero coding:\n\n-   🚀 Generate complete Filament Resources in App or Package context\n-   🚀 Generate and Publish Laravel Packages\n-   🚀 Preview and test everything instantly\n-   🔧 Production-ready code\n-   🔧 Dependency free, remove anytime\n-   🔧 Fully extensible\n\n## Quick Installation\n\nThese two commmands are all you need to install the package:\n\n```bash\ncomposer require moox/builder\nphp artisan mooxbuilder:install\n```\n\nCurious what the install command does? See manual installation below.\n\n## Compatibility\n\n-   Laravel 11\n-   PHP 8.3\n-   Filament 3.2\n-   Livewire 3\n-   Tailwind CSS 3\n-   PHPStan 2\n-   Pest 3\n\n## Quality Assurance\n\nAll generated code is:\n\n-   Type-safe with full type declarations\n-   PSR-12 compliant via Laravel Pint\n-   PHPStan Level 5 validated\n-   Pest tested\n-   Ready for production\n\n## Core Concepts\n\n### Contexts\n\n-   **App**: Direct application integration\n-   **Package**: Laravel package generation\n-   **Preview**: Instant testing environment\n-   Custom contexts via configuration\n\n### Blocks\n\nBuilding blocks for your entities:\n\n-   **Fields**: Text, Number, Date, Select, etc.\n-   **Features**: SoftDelete, Publish, Author\n-   **Sections**: Logical field groupings\n\n### Presets\n\nPresets are pre-configured collections of blocks:\n\n-   `Simple Item`: Basic CRUD resource\n-   `Publishable Item`: With publishing workflow\n-   `Full Item`: All available features\n-   `Simple Taxonomy`: For tag-like structures\n-   `Nested Taxonomy`: For category-like structures, using nested set\n-   Custom presets via configuration\n\n### Generators\n\nGenerators combine Blocks and Templates to generate the files. They are located in the `src/Generators` directory. They are divided into `Entity` and `Package` generators. You can implement own Generators and Templates in the `contexts` config array, see [Configuration](#configuration).\n\n### Templates\n\nTemplates are PHP stub files with simple markers to be replaced by the Generator. You can implement own Templates in the `contexts` config array, see [Configuration](#configuration). They are organized in the `src/Templates` directory into `App`, `Entity` and `Package` folders.\n\n### Services\n\nThe service layer manages the generation workflow:\n\n**Block Services**\n\n-   `BlockFactory`: Creates block instances from configuration\n-   `BlockReconstructor`: Reconstructs blocks from database records\n\n**Build Services**\n\n-   `BuildManager`: Orchestrates the build lifecycle and state transitions\n-   `BuildRecorder`: Persists build data and manages build history\n-   `BuildStateManager`: Tracks and manages build states across contexts\n-   `VersionManager`: Handles version control for packages and builds\n\n**Entity Services**\n\n-   `ContextAwareService`: Base class for entity services to handle context\n-   `EntityCreator`: Creates new entities with initial configuration\n-   `EntityRebuilder`: Updates existing entities with new blocks/settings\n-   `EntityGenerator`: Generates all entity-related files\n-   `EntityImporter`: Imports entities from existing migrations\n-   `EntityTablesRemover`: Manages database table cleanup\n\n**File Services**\n\n-   `FileManager`: Handles file operations, path normalization, and content formatting\n\n**Migration Services**\n\n-   `MigrationAnalyzer`: Analyzes existing migrations to extract structure\n-   `MigrationCreator`: Generates new migrations from entity configuration\n\n**Package Services**\n\n-   This part is not implemented yet\n\n**Preview Services**\n\n-   `PreviewManager`: Manages the preview context\n\n### Build Process\n\n1. **Entity Definition**\n\n    - Command/UI initiates build\n    - Option to generate from migration\n    - Block configuration (or Preset)\n    - Context selection\n\n2. **Generation**\n\n    - Creates DB entries for entity and build\n    - Generates files from templates and blocks\n\n3. **Integration**\n\n    - Preview functionality\n    - Production deployment\n    - Package publishing\n\n### Types\n\nTypes are currently only partly implemented and only used for the EntityImporter.\n\n## Usage\n\n### Commands\n\nCommands allow to create and delete an Entity using a Preset.\n\n-   AbstractBuilderCommand\n    -   CreateEntityCommand\n    -   DeleteEntityCommand\n\n#### Create Entity\n\nThis command `builder:create`creates an Entity. If you call it without any parameters, it will ask you some questions. With these parameters you can preset all needed information:\n\nName your Entity:\n\n```bash\nphp artisan builder:create Post\n# Model will be Post, table will be posts\n```\n\nChoose your context:\n\n```bash\nphp artisan builder:create Post --app\n# Generates in App/Filament\n\nphp artisan builder:create Post --package\n# Asks for the Package\n\nphp artisan builder:create Post --preview\n# Generates in App/Builder and migrates\n# To preview: https://your.test/builder/\n```\n\nChoose your preset:\n\n```bash\nphp artisan builder:create Post --preview --preset=simple-item\n\nphp artisan builder:create Post --preview --preset=publishable-item\n\nphp artisan builder:create Post --preview --preset=full-item\n\nphp artisan builder:create Post --preview --preset=simple-taxonomy\n\nphp artisan builder:create Post --preview --preset=nested-taxonomy\n```\n\nGenerate a package entity:\n\n```bash\nphp artisan builder:create Post --package=My/Blog --preset=simple-item\n# will also work --package=My\\Blog\n```\n\n#### Delete Entity\n\nTo delete an entity including the migration and the migrated tables in the database, you can use the delete command. This command will search for a package in app or preview context or it will ask for a namespace, if it does not find the Entity.\n\n```bash\nphp artisan builder:delete Post\n# Searches and deletes the entity\n# Asks to remove the database table\n```\n\nYou can force the command to just remove everything:\n\n```bash\nphp artisan builder:delete Post --force\n# Searches and deletes the entity\n# and the migrated db table\n```\n\nAnd you can specify a namespace to also remove the entity from there:\n\n```bash\nphp artisan builder:delete --package=My/Blog\n# will also work --package=My\\Blog\n```\n\n## Configuration\n\nYou can change nearly everything, Blocks, Generators, Templates, Presets and Contexts in the Moox Builder configuration.\n\nTake a look at the [Configuration](config/builder.php) for more information.\n\n## Moox Core Features\n\nYou can opt-out of any Moox dependency, but these niceties you'll miss then:\n\n#### Tabs and Translation\n\nMoox Core provides Dynamic Tabs and Translatable Config. See [Moox Core docs](https://github.com/mooxphp/core/blob/main/README.md#dynamic-tabs).\n\n#### Item Types\n\nThe item also support 'item' types, means you are able to configure selectable types for your Entity. By default, we provide \"Post\" and \"Page\" as example. If you don't want to use types, just empty the array and the field and column become invisible.\n\n```php\n    /*\n    |--------------------------------------------------------------------------\n    | Item Types\n    |--------------------------------------------------------------------------\n    |\n    | This array contains the types of items entities. You can delete\n    | the types you don't need and add new ones. If you don't need\n    | types, you can empty this array like this: 'types' =\u003e [],\n    |\n    */\n\n    'types' =\u003e [\n        'post' =\u003e 'Post',\n        'page' =\u003e 'Page',\n    ],\n```\n\n#### Author Model\n\nYou can configure the user model used for displaying Authors. By default it is tied to App User:\n\n```php\n    /*\n    |--------------------------------------------------------------------------\n    | Author Model\n    |--------------------------------------------------------------------------\n    |\n    | This sets the user model that can be used as author. It should be an\n    | authenticatable model and support the morph relationship.\n    | It should have fields similar to Moox User or WpUser.\n    |\n    */\n\n    'user_model' =\u003e \\App\\Models\\User::class,\n```\n\nYou may probably use Moox User\n\n```php\n    'user_model' =\u003e \\Moox\\User\\Models\\User::class,\n```\n\nor Moox Press User instead:\n\n```php\n    'user_model' =\u003e \\Moox\\Press\\Models\\WpUser::class,\n```\n\n## Do not track Previews\n\nIf you want to use the Preview feature, you may add the following to your `.gitignore`:\n\n```\n/app/Builder/*\n/config/previews/*\n/lang/*/previews/*\n```\n\n## Manual Installation\n\nInstead of using the install-command `php artisan mooxbuilder:install` you are able to install this package manually step by step:\n\n```bash\n// Publish and run the migrations:\nphp artisan vendor:publish --tag=\"builder-migrations\"\nphp artisan migrate\n\n// Publish the config file with:\nphp artisan vendor:publish --tag=\"builder-config\"\n```\n\n## Security Vulnerabilities\n\nPlease review [our security policy](https://github.com/mooxphp/moox/security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n-   [Alf Drollinger](https://github.com/adrolli)\n-   [All Contributors](../../contributors)\n\n## Contributing\n\nWe value every contribution. Moox is developed in the [Moox Monorepo](https://github.com/mooxphp/moox), that uses [All Contributors](https://allcontributors.org/) for managing contributions. Please refer to the Monorepo docs for more information.\n\n## Coding Rules\n\n1. Single Responsibility\n\n-   Services have ONE responsibility\n-   Generators collect files\n-   FileManager handles operations\n-   BuildContext manages paths\n\n2. Never\n\n-   Use direct file operations\n-   Handle paths manually\n-   Format files directly\n-   Assume types or interfaces\n\n3. Always\n\n-   Use FileManager for files\n-   Use BuildContext for paths\n-   Validate inputs\n-   Document changes\n\n4. Type Safety\n\n-   Full type declarations\n-   PHPStan level 8\n-   No assumed signatures\n-   Validated inputs\n\n5. All services follow these principles:\n\n-   Type-safe implementations\n-   Context awareness where needed\n-   Clear responsibility boundaries\n-   Proper error handling\n\n## Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\n\n## Roadmap\n\nSee [DEVLOG.md](DEVLOG.md) for the current tasks and ideas for the future.\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","funding_links":["https://github.com/sponsors/mooxphp"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooxphp%2Fbuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmooxphp%2Fbuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooxphp%2Fbuilder/lists"}