schoolaid / nadota
Laravel admin panel package for resource-based CRUD interfaces similar to Laravel Nova
Requires
- php: ^8.2|^8.3
- laravel/framework: ^11.0|^12.0
- phpoffice/phpspreadsheet: ^1.30|^2.0|^3.0
Requires (Dev)
- fakerphp/faker: ^1.23
- laravel/boost: ^1.8
- laravel/sanctum: ^4.0
- mockery/mockery: ^1.6
- nunomaduro/collision: ^8.0
- orchestra/testbench: ^9.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.40
- 1.0.39
- 1.0.38
- 1.0.37
- 1.0.36
- 1.0.35
- 1.0.34
- 1.0.33
- 1.0.32
- 1.0.31
- 1.0.30
- 1.0.29
- 1.0.28
- 1.0.27
- 1.0.26
- 1.0.25
- 1.0.24
- 1.0.23
- 1.0.22
- 1.0.21
- 1.0.20
- 1.0.19
- 1.0.18
- 1.0.17
- 1.0.16
- 1.0.15
- 1.0.14
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-docs/rework-documentation
- dev-claude/document-event-tracking-e2O5f
- dev-copilot/identify-code-improvements
This package is auto-updated.
Last update: 2026-09-10 19:32:08 UTC
README
Laravel admin panel package for resource-based CRUD interfaces, similar to Laravel Nova — API-driven, built for an Inertia/SPA frontend.
Nadota lets you build administrative interfaces for Eloquent models through Resource classes that declare how data is displayed, validated, filtered, related, and authorized. It exposes everything as a REST/JSON API your frontend consumes.
- Package:
schoolaid/nadota - Version: 1.1.4
- Namespace:
SchoolAid\Nadota
Features
- Resource-based architecture — define admin panels declaratively
- 35+ field types — text, numeric, date/time, boolean, selection, file/media, code/JSON, signature, dynamic, computed, and layout fields
- 11 relationship types — BelongsTo, HasOne, HasMany, BelongsToMany, HasManyThrough, HasOneThrough, MorphTo, MorphOne, MorphMany, MorphToMany, MorphedByMany
- Advanced filtering — built-in filters (boolean, date, range, select, relation, exists, morph) plus custom filters
- Sorting & searching — per-field configuration
- Authorization — Laravel policy integration with granular per-field gates
- Actions & Action Events — bulk/row operations with built-in audit logging
- Attachments — attach/detach/sync for relation fields
- Exports — CSV and Excel
- Soft deletes — trashed listing, restore, force delete
Requirements
- PHP
^8.2 | ^8.3 - Laravel
^11.0 | ^12.0
Installation
composer require schoolaid/nadota
Publish the configuration (optional — it is also merged automatically):
php artisan vendor:publish --provider="SchoolAid\Nadota\NadotaServiceProvider" --tag="nadota-config"
See the Installation guide for migrations and the optional provider stub.
Quick Start
Create a resource in app/Nadota (auto-discovered):
<?php namespace App\Nadota; use SchoolAid\Nadota\Resource; use SchoolAid\Nadota\Http\Requests\NadotaRequest; use SchoolAid\Nadota\Http\Fields\Input; use SchoolAid\Nadota\Http\Fields\Email; use SchoolAid\Nadota\Http\Fields\Relations\BelongsTo; class UserResource extends Resource { public string $model = \App\Models\User::class; public function fields(NadotaRequest $request): array { return [ Input::make('Name', 'name')->sortable()->searchable()->required(), Email::make('Email', 'email')->rules(['email', 'unique:users,email'])->searchable(), BelongsTo::make('Role', 'role') ->relatedModel(\App\Models\Role::class) ->relationAttribute('name') ->filterable(), ]; } }
The resource is served under the nadota-api prefix:
GET /nadota-api/users POST /nadota-api/users GET /nadota-api/users/{id} PUT /nadota-api/users/{id} DELETE /nadota-api/users/{id}
Full walkthrough: Quick Start.
Documentation
Complete documentation lives in docs/:
- Getting Started — Installation · Quick Start · Configuration
- Guides — Resources · Authorization · Lifecycle Hooks · Actions · Action Events · Attachments · Exports · Soft Deletes · Menu
- Fields — Overview · Basic · Relations · Dynamic · Depends On · Custom
- Filters — Overview · Built-in · Morph
- API — Overview · Routes · Responses · Filtering
- Internals — Architecture · Pipeline
Testing
composer test # run the Pest suite composer test-coverage # with coverage ./vendor/bin/pest tests/Unit/Fields/InputTest.php # a single file
Code Quality
composer analyse # PHPStan static analysis composer format # Laravel Pint
License
The MIT License (MIT). See the license field in composer.json.
Changelog
See CHANGELOG.md.