Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Markdownable Laravel Package

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.

View on GitHub
Deep Wiki
Context7

labrodev/laravel-markdownable

Read Markdown files with YAML front matter, convert to HTML, and expose structured page data.

Features

  • MarkdownPageFileReader — Read .md files by slug, list pages, resolve paths.
  • FrontMatterParser — Parse YAML front matter and body (Spatie YAML Front Matter).
  • MarkdownToHtmlConverter — Convert Markdown to HTML (League CommonMark, GFM).
  • MarkdownPageReader — Orchestrator: read → parse → convert → return PageData.
  • PageData — Readonly value object with slug, title, meta fields, body, bodyHtml; toArray() for views/SEO.
  • ContractsMarkdownPageFileReaderContract, FrontMatterParserContract, MarkdownConverterContract for type-hinting and swapping implementations or mocks.
  • Markdownable facade — Static access to the page reader.

Installation

composer require labrodev/laravel-markdownable

The service provider is registered automatically.

Configuration

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

Usage

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.).

Development

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
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor