Console Output Baseline
When you load a WireKit-using Laravel page in a browser, the developer console should be quiet. Any message that DOES appear should be attributable to a documented source — your own code, a dependency's init log, or a known dev-mode warning.
This page catalogs what to expect on a clean install. Use it as a
reference when triaging unexpected console output or when writing
browser tests that gate on console.error.
A bare console. assertion is stricter than this
baseline. WireKit reserves error for a page that is broken or a
component that cannot do its job — and a missing optional dependency is
one of those, so an editor, map or chart page can be a correct page that
still logs one. The table under Messages WireKit Logs at error
Level is the full set; filter
against it rather than against a single remembered string.
First-Paint — Production Build
| Severity | Expected messages |
|---|---|
error |
None — once the install is complete. Two of the messages below fire at first paint on an incomplete one: a missing package stylesheet, and a bundle that registered after Alpine started. |
warn |
None — once the install is complete. The duplicate-bundle and second-Alpine warnings below are also first-paint. |
info |
None. WireKit doesn't emit info logs by default. |
log |
None. Same. |
If you're seeing anything in any of these channels on first paint of a production build, that's actionable feedback. Look the message up in the two tables below first — if it is one of ours, it names the install step that resolves it. If it is not, investigate it as a bug.
First-Paint — Development Build
Vite's dev server adds a small number of informational messages:
| Severity | Source | Message |
|---|---|---|
info |
Vite HMR | [vite] connected. |
info |
Livewire | Livewire: Connected to WebSocket. (only when broadcasting is enabled) |
log |
Alpine | None — Alpine v3 is silent on init. |
These are dev-mode-only. A production build (npm run build) does not
emit them.
During Page Interaction
WireKit's interactive components log nothing during normal interaction. You should never see a console message when:
- Clicking a button
- Opening a modal, drawer, dropdown, or popover
- Sorting a table
- Submitting a form
- Triggering a toast
- Scrolling a page with reading-progress / reading-spine
If you DO see a message during any of these interactions on a clean install, that's a bug — capture the message and the user action that triggered it.
Messages WireKit Logs at error Level
WireKit reserves console.error for a page that is broken or a component that cannot do its
job. It is never used for style advice, and it is never used for something the page recovers
from invisibly. This is the whole set:
| Emitted by | Fires when | Message begins |
|---|---|---|
| Overlay root | The package stylesheet is not loaded, so dialogs, drawers and the palette render in normal page flow instead of over the page | [WireKit] Overlay styles are missing |
| Bundle registration | A WireKit bundle finished loading after Alpine had already started, so components that rendered first never got their data | loaded after Alpine started |
<x-wirekit::chart> |
chart.js is still not on the page a few seconds after it loaded |
WireKit: Chart.js is not loaded |
<x-wirekit::chart> (ApexCharts adapter) |
apexcharts is still not on the page a few seconds after it loaded |
WireKit: ApexCharts is not loaded |
<x-wirekit::editor> |
No editor factory is exposed, so the field degrades to a plain textarea | [wirekit] editor: no editor factory defined |
<x-wirekit::editor> |
A toolbar command ran whose editor extension is not registered | [wirekit] editor: command |
<x-wirekit::editor> |
A link was given a javascript: / data: / vbscript: URL, which is refused |
[wirekit] editor: refused a link with an unsafe URL scheme |
<x-wirekit::map> |
No map engine was registered or put on window, a grace period after the page loaded |
[wirekit::map] No supported map library found |
<x-wirekit::map> (MapLibre) |
MapLibre raised an error: a style or tile request that failed, or a style that does not validate. The original error follows the prefix, every time, as MapLibre logs it on a map nobody listens to; a failed request adds the line below once | [wirekit::map] MapLibre reported an error: |
<x-wirekit::map> |
The map library loaded but its style or tiles did not — a strict Content-Security-Policy is the usual cause | [wirekit::map] The map library loaded but its style/tiles failed to load |
Any component with optimistic set |
The server refused an optimistic action, so the anticipated value was rolled back | [wirekit] optimistic: the server refused this action |
ApexCharts ships under its own license terms rather than MIT, and a commercial project needs one — see apexcharts.com/license. WireKit bundles no chart library; the adapter only talks to the one you install, and the Chart.js adapter is there when MIT matters to you.
Missing-dependency lines are error, not warn, on purpose. A chart with no charting
library, an editor with no editor and a map with no map engine all render a container the
reader can see and cannot use. The component degrades rather than throwing — the rest of the
page keeps working — but nothing on the page says so, and a warning is too quiet for a feature
that is simply absent. Each of those is emitted once per page however many instances are on
it, so a dashboard of twelve charts logs one line, not twelve. The interaction-time diagnostics
behave the other way and should: an editor command that failed, a refused link and a
rolled-back optimistic action each report every time they happen, because each one is a
separate thing the user just did.
The overlay-styles line deserves its own note for the same reason. A dialog that renders inside the page instead of over it looks finished and cannot be used, and on a long page it can sit below the fold where nobody finds it:
[WireKit] Overlay styles are missing, so dialogs, drawers and the command palette will
render in normal page flow instead of over the page. They will look correct and be
unusable — on a long page the panel can sit below the fold entirely.
It has a consequence for your test setup, and it is worth knowing before you meet it. A
browser or console check that fails the run on any error will go red in this situation
rather than amber — and the cause is an install step, not a defect in your page. If one of your
lanes gates on error, expect that shape: a red run whose message names a missing stylesheet.
The fix is the install step the message itself names:
{{-- 1. The directive that loads the package stylesheet. --}}
@wirekitStyles
# 2. Or check the whole install at once, which reports this and everything adjacent.
php artisan wirekit:verify
Messages WireKit Logs at warn Level
A warn is a page that works and a decision that is probably not the one you wanted. These are
the recurring families:
| Emitted by | Fires when | Message begins |
|---|---|---|
wirekit-alpine.js |
An Alpine is already on the page (Livewire ships one), so WireKit registered its components on that instance instead of starting a second one | [wirekit-alpine] An Alpine is already on this page |
wirekit-apex.js |
The ApexCharts bundle is on the page more than once — usually the config emits it while your own build imports it too | [WireKit] wirekit-apex.js is on this page |
<x-wirekit::chart> |
A chart supplies annotations but chartjs-plugin-annotation is not registered |
WireKit: chart annotations supplied but chartjs-plugin-annotation is not registered |
<x-wirekit::reading-progress>, <x-wirekit::reading-spine>, <x-wirekit::reading-toc>, <x-wirekit::reading-minimap> |
A target or boundary selector you passed matched no element, so the component renders empty or falls back to the viewport |
matched no element |
<x-wirekit::inline-edit> |
The editor slot carries no element with x-ref="control", so focus cannot be placed and the value cannot be read |
[WireKit] inline-edit: the editor slot has no element with x-ref="control" |
<x-wirekit::card>, <x-wirekit::table>, <x-wirekit::tabs> |
A composition that renders and is subtly wrong — content placed straight into a card with no card.body, a bare <tr> dropped into a table slot, a wire:model on tabs. Debug builds only |
— |
These are deliberate and actionable: each one names the prop, the selector or the install step that produced it. Install the dependency, correct the selector, or stop using the component on that page, and the line goes away.
Filtering Known-Noisy Messages in Browser Tests
If your lane gates on console.error, filter out the messages your own setup produces on
purpose before you assert. The list below is an example, not a baseline to copy verbatim — put
in it only what your pages genuinely expect, and take the WireKit substrings from the error
table above:
const knownNoise = [
// 1. Dev-server chatter, present only under `npm run dev`.
'[vite] connected.',
// 2. Browser-extension chatter, present only in a developer's own browser.
'Download the React DevTools',
// 3. A WireKit diagnostic THIS page expects — here, a chart demo with no
// charting library installed. Take the substring from the error table
// above; a string that never ships filters nothing and reports green.
'WireKit: Chart.js is not loaded',
];
const realErrors = capturedErrors.filter(err =>
! knownNoise.some(noise => err.includes(noise))
);
// realErrors.length should be 0 on a clean install.
Common Mistakes That Cause Console Noise
When you see unexpected output, the most common causes are:
- Forgetting to publish WireKit assets —
php artisan vendor:publish --tag=wirekit-assets. Without this, the runtime can't findwirekit.jsand emits a 404 in the network tab plus a ReferenceError in the console. - Missing
@wirekitStyles/@wirekitScriptsin your layout — WireKit components throwReferenceErrorbecause Alpine isn't loaded. Runphp artisan wirekit:verifyto diagnose. - Stale compiled views —
php artisan view:clearresolves it. Symptom: changes to@propsblocks in templates don't reflect at runtime. - Out-of-order Blade directives —
@vite([...])MUST appear in<head>BEFORE@wirekitStyles. Reversing the order means the Vite-compiled CSS overrides WireKit's CSS variables and styling drifts unpredictably. - Custom Alpine plugin holding an unguarded observer reference —
see Authoring Custom Alpine Plugins.
Symptom:
TypeError: Cannot read properties of null (reading 'disconnect'). Runphp artisan wirekit:doctorto detect.
Cross-References
- Authoring Custom Alpine Plugins
- Pest Browser-Test Setup
- CLI Reference —
wirekit:verify/wirekit:doctordiagnostics. - Integration Guide — common setup pitfalls.