schoolaid/nadota
Nadota
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.
Related Packages
Laravel admin constructor: Resource-first CRUD, Vue 3 SPA, JSON-API transport. P...
Voyager — the missing Laravel admin. Maintained fork supporting Laravel 12/13/14...
Uccello is a Laravel Package for providing a way to make easily complete web app...
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 1.2.6 | ^8.2| | ^11.0| | MIT | |
| 1.2.5 | ^8.2| | ^11.0| | MIT | |
| 1.2.4 | ^8.2| | ^11.0| | MIT | |
| 1.2.3 | ^8.2| | ^11.0| | MIT | |
| 1.2.2 | ^8.2| | ^11.0| | MIT | |
| 1.2.1 | ^8.2| | ^11.0| | MIT | |
| 1.2.0 | ^8.2| | ^11.0| | MIT | |
| 1.1.8 | ^8.2| | ^11.0| | MIT | |
| 1.1.7 | ^8.2| | ^11.0| | MIT | |
| 1.1.6 | ^8.2| | ^11.0| | MIT | |
| 1.1.5 | ^8.2| | ^11.0| | MIT | |
| 1.1.4 | ^8.2| | ^11.0| | MIT | |
| 1.1.3 | ^8.2| | ^11.0| | MIT | |
| 1.1.2 | ^8.2| | ^11.0| | MIT | |
| 1.1.1 | ^8.2| | ^11.0| | MIT | |
| 1.1.0 | ^8.2| | ^11.0| | MIT | |
| 1.0.40 | ^8.2| | ^11.0| | MIT | |
| 1.0.39 | ^8.2| | ^11.0| | MIT | |
| 1.0.38 | ^8.2| | ^11.0| | MIT | |
| 1.0.37 | ^8.2| | ^11.0| | MIT | |
| 1.0.36 | ^8.2| | ^11.0| | MIT | |
| 1.0.35 | ^8.2| | ^11.0| | MIT | |
| 1.0.34 | ^8.2| | ^11.0| | MIT | |
| 1.0.33 | ^8.2| | ^11.0| | MIT | |
| 1.0.32 | ^8.2| | ^11.0| | MIT | |
| 1.0.31 | ^8.2| | ^11.0| | MIT | |
| 1.0.30 | ^8.2| | ^11.0| | MIT | |
| 1.0.29 | ^8.2| | ^11.0| | MIT | |
| 1.0.28 | ^8.2| | ^11.0| | MIT | |
| 1.0.27 | ^8.2| | ^11.0| | MIT |
Showing the latest 30 of 57. See every release on Packagist