Skip to content
[01]Compare

Tabletop vs Laravel Nova

Nova is Laravel's own admin, built by the Laravel team and now on its fifth major. Tabletop is an MIT-licensed builder in public beta. In both, you write screens in PHP and a JavaScript client renders them over Inertia. The differences are Vue against React, a paid licence against MIT, and a 1.0 from 2018 against a 0.5.

CriterionTabletopLaravel Nova
RenderingReact 19 over Inertia 3. PHP pages are serialized to JSON props and rendered by a React client. The admin runs on its own Inertia entry, separate from your app's frontend.Vue 3.5 over Inertia 2. Custom component assets are built with Laravel Mix 6.
AuthoringPHP Page classes with view(S $s), built with the fluent S builder. There is no Resource class: a CRUD screen is a family of pages. Validation uses Laravel rules.One PHP resource class per Eloquent model, stored in app/Nova. Fields are declared in fields().
InteractivityForm state lives in React in the browser. hiddenIf and disabledIf are evaluated there with no request, but they are declarative conditions, not arbitrary PHP. UI computed on the server is opt-in: a liveRegion makes one round-trip each time a declared dependency changes. Tables, charts and uploads use JSON endpoints, and saves and navigation go through Inertia. The browser downloads a large bundle.An Inertia SPA: a page change is an XHR visit that returns JSON props. Dependent fields are PHP closures that run on the server; Nova's docs do not describe how or when the closure is re-run. File, Image, Trix and Code fields cannot be depended on. Custom components fetch with Nova.request(), and index pages can poll.
Custom UIReact components. A field is a React component plus a PHP Field class registered with S::register(). Widgets are registered blocks that you place from PHP. Core packages are never edited.Vue components. A custom field is three Vue components, and tools are single-file Vue components. Each extension is scaffolded as a Composer package in nova-components.
Screen composition & shellA page is one tree of layout primitives. It can hold several independent tables and named forms, with no documented limit, and each form has its own submit endpoint. The header, sidebar and footer are written in PHP, where you can add to them or replace them. There are three navigation layouts, a page layout with no chrome, and React slots as a last resort.Resource pages, plus dashboards made of cards and metrics. A detail page shows a table for each to-many relationship (HasMany, BelongsToMany, MorphToMany). Any other page is a custom Vue tool. In the shell you can change the logo and colour, replace the main menu, add items to the user menu (its logout link cannot be removed), set footer text and turn on breadcrumbs. No documented API replaces the layout or the top bar.
MultilingualYesBuilt into core: ->translatable() on a field stores one value per locale. The form gets locale tabs, and rulesForLocale() validates each locale on its own. UI locales are set per panel, with a switcher. The package ships English and Ukrainian. RTL is not documented.PartlyUI strings are localised through Laravel (nova:translate), and RTL is built in. There is no translatable field: storing content per locale needs a third-party package, and the docs name none.
Licence & priceMIT, free, with no per-seat fee.Commercial, one-time purchase. $99 for a single project or $299 for unlimited projects with email support. Each includes a year of updates. Renewal ($79 or $249 a year) is optional, and you keep your version without it. No free trial. The source may not be published.
Laravel & PHPPHP 8.4+. Laravel 11, 12 or 13.PHP 8.1+. Laravel 10, 11, 12 or 13.
Multiple panelsEach panel is a class with its own prefix, guard, middleware, locales and chrome. One page can be listed in several panels.One panel with multiple dashboards. A licence covers one installed instance, which can serve several subdomains. The docs do not describe independently configured panels.
Plugin ecosystemThe same model as Nova: an extension is a Composer package built on registerBlock and S::register(), and there is no directory. So far there is one first-party extension, tbtop/spatie-media-library. It is an MIT image-picker field installed as a Composer package plus an npm client. Tabletop is behind Nova here.Third-party Composer packages, free or paid; the licence lets authors sell them. Each tool, card or field is scaffolded as its own shareable package. The official site does not list or count them.
MaturityPublic beta, v0.5.1. Pre-1.0, and only the latest release is supported.1.0 shipped in August 2018. Nova 5 has been current since December 2024. Built by the Laravel team.
[02]Start

Try it before you choose

Open the live demo first. To install on PHP 8.4+ and Laravel 11–13, run the command here, then npm install @tbtop/inertia-admin and php artisan admin:install. Then add the admin entry to Vite and compile Tailwind v4. The docs walk through each step.

Try the demoRead the docs
composer require tbtop/admin

Built by DiVotek · Ukraine