# Layout System
Estimated time: 6 minutes
Difficulty: Beginner
LaraCoreKit uses a modular layout system where each module can define its own layouts while sharing the core design tokens, navigation, and assets.
Core Layout
The primary app layout lives in the Core module:
modules/Core/views/layouts/app.blade.php
<!DOCTYPE html>
<html
lang="{{ str_replace('_', '-', app()->getLocale()) }}"
dir="{{ in_array(app()->getLocale(), ['ar']) ? 'rtl' : 'ltr' }}"
class="{{ session('theme', 'dark') }}"
>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ $title ?? config('app.name') }}</title>
@vite(['resources/css/app.css', 'resources/js/app.js'])
@livewireStyles
</head>
<body class="min-h-screen bg-gray-50 dark:bg-gray-950">
{{-- Navigation --}}
<x-navbar />
{{-- Locale Switcher --}}
@livewire('locale-switcher')
{{-- Page Content --}}
<main>
{{ $slot }}
</main>
{{-- Footer --}}
<x-footer />
@livewireScripts
</body>
</html>
Extending the Layout
With Livewire full-page components
class BlogList extends Component
{
public function render()
{
return view('blog::livewire.blog-list')
->layout('core::layouts.app', [
'title' => 'Blog — ' . config('app.name'),
]);
}
}
With Blade extends
@extends('core::layouts.app', ['title' => 'My Page'])
@section('content')
<h1>My page content</h1>
@endsection
Module-Specific Layouts
Modules can define their own layouts:
modules/Blog/views/layouts/blog.blade.php
@extends('core::layouts.app')
@section('content')
<div class="max-w-4xl mx-auto px-4 py-12">
<x-breadcrumbs :items="$breadcrumbs ?? []" />
<article class="prose dark:prose-invert max-w-none">
{{ $slot }}
</article>
<x-blog-sidebar />
</div>
@endsection
Guest Layout (Auth Pages)
modules/Auth/views/layouts/guest.blade.php
A centered, minimal layout for login/register pages with no navigation.
Named Slots
{{-- In the layout file --}}
<header>
{{ $header ?? '' }}
</header>
<main>{{ $slot }}</main>
<footer>
{{ $footer ?? '' }}
</footer>
{{-- When using the layout --}}
<x-layouts.app>
<x-slot name="header">
<h1>Page Title</h1>
</x-slot>
<p>Page content here</p>
</x-layouts.app>
Asset Pipeline
Assets are compiled with Vite:
resources/
├── css/
│ └── app.css ← Main CSS (TailwindCSS v4)
└── js/
└── app.js ← Main JS (Alpine.js, Livewire)
Development:
npm run dev # Hot-reload
Production:
npm run build # Minified assets