PHPackages                             tinymvc/orbit - 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. tinymvc/orbit

ActiveProject[Admin Panels](/categories/admin)

tinymvc/orbit
=============

A lightweight, fast and flexible admin dashboard built on TinyMVC + Inertia.js + React + Shadcn.

v1.0.1(2mo ago)04MITTypeScriptPHP &gt;=8.2

Since Feb 28Pushed 1mo agoCompare

[ Source](https://github.com/tinymvc/orbit)[ Packagist](https://packagist.org/packages/tinymvc/orbit)[ RSS](/packages/tinymvc-orbit/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (8)Versions (3)Used By (0)

 [![orbit-tinymvc-dashboard](https://private-user-images.githubusercontent.com/128284645/556308005-6cb9b6ad-c53f-4b46-8f24-f1e0b318e774.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MTk4MjgsIm5iZiI6MTc3NTQxOTUyOCwicGF0aCI6Ii8xMjgyODQ2NDUvNTU2MzA4MDA1LTZjYjliNmFkLWM1M2YtNGI0Ni04ZjI0LWYxZTBiMzE4ZTc3NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNVQyMDA1MjhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01MWNmODEwMTNiNmI5NjM5MWRkMzc0YjUyMzdkOGUyODBiOTFkMzBiYzcxZGQ1ZTZjNGQ5MTU0Y2UyN2IxNjVlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.3hpWNJVRkSusP259TOu1BhaOb8p7mgUMZnZlH_wPfC4)](https://private-user-images.githubusercontent.com/128284645/556308005-6cb9b6ad-c53f-4b46-8f24-f1e0b318e774.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MTk4MjgsIm5iZiI6MTc3NTQxOTUyOCwicGF0aCI6Ii8xMjgyODQ2NDUvNTU2MzA4MDA1LTZjYjliNmFkLWM1M2YtNGI0Ni04ZjI0LWYxZTBiMzE4ZTc3NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNVQyMDA1MjhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01MWNmODEwMTNiNmI5NjM5MWRkMzc0YjUyMzdkOGUyODBiOTFkMzBiYzcxZGQ1ZTZjNGQ5MTU0Y2UyN2IxNjVlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.3hpWNJVRkSusP259TOu1BhaOb8p7mgUMZnZlH_wPfC4) [![orbit-dashboard-shot](https://private-user-images.githubusercontent.com/128284645/556308009-16e6de11-bf84-46c2-ac44-0de2853ca9c3.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MTk4MjgsIm5iZiI6MTc3NTQxOTUyOCwicGF0aCI6Ii8xMjgyODQ2NDUvNTU2MzA4MDA5LTE2ZTZkZTExLWJmODQtNDZjMi1hYzQ0LTBkZTI4NTNjYTljMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNVQyMDA1MjhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xZDlmZjZhMmVmNjFmYTkxNWNmN2NjMmM1OGVjNzdmNjc4NTYxNmEyNWRiNWUwMzg4Y2EwNmFhZjFlZDU1YWZiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.k8udJMsPLM7M1s-_S6ZiNr9asboU8xBsNrNKZ5H7724)](https://private-user-images.githubusercontent.com/128284645/556308009-16e6de11-bf84-46c2-ac44-0de2853ca9c3.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MTk4MjgsIm5iZiI6MTc3NTQxOTUyOCwicGF0aCI6Ii8xMjgyODQ2NDUvNTU2MzA4MDA5LTE2ZTZkZTExLWJmODQtNDZjMi1hYzQ0LTBkZTI4NTNjYTljMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNVQyMDA1MjhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xZDlmZjZhMmVmNjFmYTkxNWNmN2NjMmM1OGVjNzdmNjc4NTYxNmEyNWRiNWUwMzg4Y2EwNmFhZjFlZDU1YWZiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.k8udJMsPLM7M1s-_S6ZiNr9asboU8xBsNrNKZ5H7724) [![orbit-dashboard-posts](https://private-user-images.githubusercontent.com/128284645/556307992-5b4a5a7a-4b4b-4351-b4d6-94b3104824cf.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MTk4MjgsIm5iZiI6MTc3NTQxOTUyOCwicGF0aCI6Ii8xMjgyODQ2NDUvNTU2MzA3OTkyLTViNGE1YTdhLTRiNGItNDM1MS1iNGQ2LTk0YjMxMDQ4MjRjZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNVQyMDA1MjhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02ODU2NjE4NWRkZDZlNTJlZTFjMWZkYzI2YzRlNzAwZWVjNjg1OWYxYmYzZmEwNjM2NjllYThkMjVhNTdlMDg3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.fX4t01ueR5l_ry_FX5HOjvBw--zLq5mKe7x5wI1VW4w)](https://private-user-images.githubusercontent.com/128284645/556307992-5b4a5a7a-4b4b-4351-b4d6-94b3104824cf.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MTk4MjgsIm5iZiI6MTc3NTQxOTUyOCwicGF0aCI6Ii8xMjgyODQ2NDUvNTU2MzA3OTkyLTViNGE1YTdhLTRiNGItNDM1MS1iNGQ2LTk0YjMxMDQ4MjRjZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNVQyMDA1MjhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02ODU2NjE4NWRkZDZlNTJlZTFjMWZkYzI2YzRlNzAwZWVjNjg1OWYxYmYzZmEwNjM2NjllYThkMjVhNTdlMDg3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.fX4t01ueR5l_ry_FX5HOjvBw--zLq5mKe7x5wI1VW4w)

Orbit — TinyMVC Dashboard Starter Kit
=====================================

[](#orbit--tinymvc-dashboard-starter-kit)

 **A lightweight, fast and flexible admin dashboard built on TinyMVC + Inertia.js + React + Shadcn**

 [![License](https://camo.githubusercontent.com/f3fd68590b4c81d6f9f4558ba393118dbbfa6be4962903b75b926a754459d588/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f74696e796d76632f6f726269743f7374796c653d666c61742d737175617265)](https://github.com/tinymvc/orbit) [![Packagist Version](https://camo.githubusercontent.com/c3fa9559405b6ea12afde002777539f99139fdf1f290c687592aef57c0f2fb65/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f74696e796d76632f6f726269743f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tinymvc/orbit) [![PHP 8.2+](https://camo.githubusercontent.com/2055c5aba3a3e30464082c61e6d106705b5a533ae2094a2f45775db3eb3c210b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e322d3838393242463f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/2055c5aba3a3e30464082c61e6d106705b5a533ae2094a2f45775db3eb3c210b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e322d3838393242463f7374796c653d666c61742d737175617265) [![React 19](https://camo.githubusercontent.com/ccdb8238c0bc6ad0286344ba22673ceb01155d2948d0e1c4fccce538dd970c7b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656163742d31392d3631444146423f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/ccdb8238c0bc6ad0286344ba22673ceb01155d2948d0e1c4fccce538dd970c7b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656163742d31392d3631444146423f7374796c653d666c61742d737175617265) [![Inertia.js 2](https://camo.githubusercontent.com/3553812fb0a406b401085920a5cab634d155bcfb28eed80080899ac7d54accb0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f696e65727469612e6a732d322e782d3643363346463f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/3553812fb0a406b401085920a5cab634d155bcfb28eed80080899ac7d54accb0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f696e65727469612e6a732d322e782d3643363346463f7374796c653d666c61742d737175617265) [![Tailwind CSS 4](https://camo.githubusercontent.com/f0c82b071e95aa4d26438f3770877695e2fe85e135b6d908c001c72b1f364879/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7461696c77696e646373732d342e782d3338424446383f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/f0c82b071e95aa4d26438f3770877695e2fe85e135b6d908c001c72b1f364879/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7461696c77696e646373732d342e782d3338424446383f7374796c653d666c61742d737175617265)

---

Table of Contents
-----------------

[](#table-of-contents)

- [Overview](#overview)
- [Tech Stack](#tech-stack)
- [Installation](#installation)
    - [Via Composer (Recommended)](#via-composer-recommended)
    - [Via Git Clone](#via-git-clone)
- [Configuration](#configuration)
- [Running the Application](#running-the-application)
- [Default Login Credentials](#default-login-credentials)
- [Project Structure](#project-structure)
- [BREAD Module (Browse, Read, Edit, Add, Delete)](#bread-module)
    - [Creating a BREAD Resource](#creating-a-bread-resource)
    - [Resource Configuration](#resource-configuration)
    - [Form Fields](#form-fields)
    - [Table Columns](#table-columns)
    - [Filters](#filters)
    - [Bulk Actions](#bulk-actions)
    - [Permissions](#permissions)
    - [Dynamic Props](#dynamic-props)
    - [Lifecycle Hooks](#lifecycle-hooks)
    - [File Uploads](#file-uploads)
    - [Relationships](#relationships)
    - [Registering Routes](#registering-routes)
    - [Complete Resource Example](#complete-resource-example)
- [Dashboard Module](#dashboard-module)
    - [Stats Cards](#stats-cards)
    - [Charts](#charts)
    - [Date Range Picker](#date-range-picker)
    - [Dashboard Controller Example](#dashboard-controller-example)
- [Sidebar Menu Configuration](#sidebar-menu-configuration)
- [Permissions &amp; Privileges](#permissions--privileges)
- [Available Spark Commands](#available-spark-commands)
- [License](#license)

---

Overview
--------

[](#overview)

**Orbit** is a production-ready admin dashboard starter kit built on top of the [TinyMVC](https://github.com/tinymvc/tinycore) framework. It provides a robust foundation for building modern web applications with a clean, modular architecture.

Key highlights:

- **BREAD Module** — A powerful, zero-boilerplate CRUD system. Define one PHP resource class per entity and get a full admin interface (table, forms, filters, bulk actions) automatically — no per-model controllers or React pages needed.
- **Dashboard Module** — A fluent PHP API for building stat cards and charts (Bar, Line, Area, Pie, Radar, Radial) with date range filtering — all rendered via Recharts on the frontend.
- **Inertia.js** — Server-side routing + React SPA experience. No REST API layer needed.
- **Tailwind CSS 4 + shadcn/ui** — Beautiful, accessible UI components out of the box.
- **Authentication** — Login, forgot/reset password, email verification, user/role management with granular permissions.

---

Tech Stack
----------

[](#tech-stack)

LayerTechnology**Backend Framework**[TinyMVC / Spark](https://github.com/tinymvc/tinycore) (PHP 8.2+)**Server ↔ Client Bridge**[Inertia.js 2](https://inertiajs.com/)**Frontend**[React 19](https://react.dev/) + TypeScript**Styling**[Tailwind CSS 4](https://tailwindcss.com/)**UI Components**[shadcn/ui](https://ui.shadcn.com/) (Radix UI primitives)**Charts**[Recharts](https://recharts.org/)**Rich Text Editor**[Tiptap](https://tiptap.dev/)**Data Tables**[TanStack Table](https://tanstack.com/table)**Build Tool**[Vite](https://vitejs.dev/)---

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

[](#installation)

### Prerequisites

[](#prerequisites)

- **PHP** &gt;= 8.2
- **Composer**
- **Node.js** &gt;= 18 &amp; **npm**
- **SQLite** (default) or MySQL / PostgreSQL

### Via Composer (Recommended)

[](#via-composer-recommended)

The fastest way to get started. Composer will automatically copy the env file, generate the app key, run migrations with seeds, and create the storage symlink:

```
composer create-project tinymvc/orbit my-project
cd my-project
```

Then install frontend dependencies and build:

```
npm install
npm run dev      # Start Vite dev server
```

### Via Git Clone

[](#via-git-clone)

```
git clone https://github.com/tinymvc/orbit.git my-project
cd my-project
```

Install PHP dependencies:

```
composer install
```

Set up the environment:

```
cp .env.example .env
```

Generate application key, create storage symlink, and run migrations with seed data:

```
php spark key:generate
php spark storage:link
php spark migrate --seed
```

Install frontend dependencies:

```
npm install
npm run dev      # Start Vite dev server (development)
```

---

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

[](#configuration)

The main configuration file is `.env` in the project root. Key settings:

```
APP_NAME=Spark
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8080

APP_LOCALE=en
APP_TIMEZONE=UTC

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=spark
# DB_USERNAME=root
# DB_PASSWORD=

MAIL_SMTP=false
# MAIL_HOST=127.0.0.1
# MAIL_PORT=2525
# MAIL_USERNAME=null
# MAIL_PASSWORD=null
# MAIL_ENCRYPTION=tls

MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

MAIL_REPLY_ADDRESS="reply@example.com"
MAIL_REPLY_NAME="${APP_NAME}"
```

---

Running the Application
-----------------------

[](#running-the-application)

### Development

[](#development)

Start the PHP development server and Vite dev server in two terminals:

```
# Terminal 1 — PHP server
php spark serve

# Terminal 2 — Vite dev server (hot reload)
npm run dev
```

The application will be available at `http://localhost:8080`.

### Production

[](#production)

Build the frontend assets:

```
npm run build
```

Set `debug` to `false` in `.env`, configure your `root_url`, and point your web server (Apache/Nginx) to the `public/` directory.

---

Default Login Credentials
-------------------------

[](#default-login-credentials)

Navigate to `/admin` and log in with:

FieldValue**Username**`admin`**Password**`password`---

Project Structure
-----------------

[](#project-structure)

```
orbit/
├── app/
│   ├── Http/
│   │   ├── Controllers/          # Application controllers
│   │   ├── Middlewares/          # HTTP middleware (auth, CSRF, CORS, etc.)
│   │   └── Resources/            # BREAD resource definitions ← your CRUD lives here
│   ├── Models/                   # Eloquent-style models
│   ├── Modules/
│   │   ├── Bread/                # BREAD engine (Resource, ResourceController, Form fields, Table columns)
│   │   └── Dashboard/            # Dashboard engine (Stats, Charts)
│   └── Providers/                # Service providers
├── bootstrap/                    # App bootstrapping & helpers
├── config/                       # App, database, mail, privileges config
├── database/
│   └── migrations/               # Database migrations & seeds
├── public/                       # Web root (index.php, compiled assets)
├── resources/
│   └── app/                      # React frontend application
│       ├── components/           # Reusable React components
│       ├── config/               # Menu & sidebar configuration
│       ├── layouts/              # Page layouts
│       ├── pages/                # Inertia page components
│       └── types/                # TypeScript type definitions
├── routes/
│   └── web.php                   # All route definitions
├── storage/                      # Logs, cache, uploads
├── .env                          # Environment configuration
├── vite.config.ts                # Vite build configuration
└── spark                         # CLI tool (like artisan)

```

---

BREAD Module
------------

[](#bread-module)

The BREAD (Browse, Read, Edit, Add, Delete) module is the heart of Orbit's admin interface. It lets you create fully functional CRUD interfaces by defining a **single PHP resource class** — no custom controllers, no custom React pages.

### How It Works

[](#how-it-works)

1. You create a **Resource class** (extends `App\Modules\Bread\Resource`)
2. Define your **form fields**, **table columns**, **filters**, and **bulk actions**
3. Register the route in `routes/web.php` with one line
4. Add a menu entry in the React sidebar config
5. Done — you get a complete CRUD interface with search, pagination, filtering, bulk actions, create/edit drawers, file uploads, relationships, and more.

### Creating a BREAD Resource

[](#creating-a-bread-resource)

Use the built-in Spark command to generate a resource scaffold:

```
php spark make:bread Post
```

This creates `app/Http/Resources/PostsResource.php` with a ready-to-customize template.

You can also create resources in subdirectories:

```
php spark make:bread Blog/Post
```

This creates `app/Http/Resources/Blog/PostsResource.php`.

### Resource Configuration

[](#resource-configuration)

Every resource has a set of static properties that control its behavior:

```
