labrodev/laravel-markdownable
Laravel package to load Markdown pages with YAML front matter by slug, parse metadata, convert to HTML, and return a structured PageData object. Includes contracts for swapping implementations and a Markdownable facade for simple access.
Read Markdown files with YAML front matter, convert to HTML, and expose structured page data.
.md files by slug, list pages, resolve paths.PageData.toArray() for views/SEO.MarkdownPageFileReaderContract, FrontMatterParserContract, MarkdownConverterContract for type-hinting and swapping implementations or mocks.composer require labrodev/laravel-markdownable
The service provider is registered automatically.
The package uses config('site.content.paths.pages') by default for the pages directory. To override, publish the config or set MARKDOWNABLE_PAGES_PATH in your .env.
php artisan vendor:publish --tag=markdownable-config
use Labrodev\Markdownable\Facades\Markdownable;
$page = Markdownable::getPageBySlug('about');
if ($page !== null) {
$page->title; // string
$page->bodyHtml; // string (HTML)
$page->toArray(); // array for Blade/SEO (slug, title, meta_title, meta_description, og_image, sitemap, canonical, body, body_html)
}
Use PageData::toArray() when passing to Blade or SEO so keys match the usual array shape (meta_title, meta_description, og_image, body_html, etc.).
cd package/laravel-markdownable
composer install
composer run test # Pest
composer run pint # Lint (read-only)
composer run pint:fix # Format
composer run stan # PHPStan
composer run analysis # Pint fix + PHPStan
How can I help you explore Laravel packages today?