Elyra
Elyra The coding agent e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Framework Rust + Svelte 5 framework for desktop apps Elyra Conductor Local project conductor Elyra SQL Server MySQL-compatible SQL server in Rust Elyra SQL Client Native desktop SQL workbench Elyra SQL Anywhere Replication-ready SQL engine Elyra DataGrid Server-driven data grid for Laravel
Elyra
FAQ & troubleshooting

FAQ & troubleshooting

The Vue/Svelte grid renders empty on first load

The grid fetches its data client-side after mount, so it is briefly empty until the XHR resolves — and screenshots/SSR may capture that moment. Pass the first page as initialData (a server-seeded Inertia prop) for an instant first paint. See Inertia integration.

"CSRF token mismatch" on the grid/mutate/export endpoints

laravelFetch posts JSON. Either exempt the endpoints from CSRF in bootstrap/app.php:

$middleware->validateCsrfTokens(except: ['api/*']);

…or keep CSRF and add a <meta name="csrf-token"> tag (the helper sends it as X-CSRF-TOKEN).

"Unknown grid field: 'x'"

The client referenced a column that is not declared on the server GridDefinition. Declare it with ->column('x') (or ->columns([...])). This is the security allow-list working as intended — even filter/sort fields must be declared. For tree grids, declare parent_id/has_children even if not displayed.

Rows have no id (selection / editing / wire:key broken)

The grid always fetches the key column so rows carry an identity, even if the key is not displayed. Make sure key('id') (server) / key: 'id' (client) matches your primary key, and that the key column is declared.

Sorting a large table by a non-key column is slow

Sorting by an arbitrary secondary-indexed column with a LIMIT currently does a full sort in the ElyraSQL engine (forward primary-key order is fast). This is a known engine consideration — see Performance. Paging, filtering, grouping and export remain fast.

Facets are slow / expensive

Facets over high-cardinality or text columns can be costly. They are lazy (loaded only when a dropdown opens) and cached per filter. Cap them with FacetSpec.top, and prefer faceting low-cardinality columns. Avoid faceting the key or numeric columns.

.xlsx export produces a .csv

Real XLSX requires openspout/openspout. Without it, export(..., 'xlsx') falls back to CSV (which Excel opens natively).

composer require openspout/openspout

Editing a value fails validation

mutate() runs the column's Laravel rules before writing and returns { ok: false, errors: {...} }. The clients surface these inline in the editor.

The theme doesn't match my app / colors look wrong

The theme requires Tailwind CSS v4 (it reads --color-* variables). Ensure Tailwind v4 is set up and the grid CSS is imported after your app CSS. Dark mode follows the .dark class.

Deprecation notices leak into responses (dev)

If your app has display_errors on in development, PHP deprecation notices can corrupt JSON/Livewire responses. Set APP_DEBUG/display_errors appropriately, or address the deprecation source.

Can I use it without ElyraSQL?

Yes — set ->driver('mysql') (or rely on the default connection). You lose single-pass facets, WITH ROLLUP, PERCENTILE and HYBRID search, but sorting, filtering, paging, editing and export all work on any MySQL-compatible server.

Which client should I choose?

  • Livewire + Flux — server-driven, least JavaScript, fastest to stand up in a Blade/Livewire app.
  • Vue / Svelte + Inertia — SPA experience, client-side interactivity, virtual scrolling and column virtualization.

All three share the same protocol, server, theme and feature set.