---
title: "Posts for Laravel — docs | Roundly"
description: "Developer docs for Posts for Laravel: multilingual posts, publishing lifecycle, categories and tags, per-locale slugs, SEO meta, JSON-LD and media."
url: https://roundly-consulting.com/open-source/docs/posts-for-laravel
language: en
---

[All packages](https://roundly-consulting.com/open-source.md)

Open source

# Posts for Laravel

Install

`composer require roundly-consulting/posts-for-laravel`

Requires: PHP ^8.4 · Laravel ^12.0|^13.0

[GitHub](https://github.com/roundly-consulting/posts-for-laravel) [Packagist](https://packagist.org/packages/roundly-consulting/posts-for-laravel) [Donate (opens in a new tab)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Patreon](https://www.patreon.com/cw/roundly)

## Overview

A multilingual, SEO-ready blog engine for Laravel. Posts carry per-locale titles, perexes, bodies and slugs, move through a real draft → scheduled → published → archived lifecycle driven by one Posts facade, and are organised in nested categories and tags. Every post renders its own meta tags and schema.org JSON-LD, owns a featured image, a gallery and inline media, and can be liked and reported out of the box. MIT-licensed, with no third-party runtime dependencies — native Laravel plus our own packages.

### What you get

#### Multilingual content

Per-locale titles, perexes, bodies, SEO meta and slugs in JSON columns, with a deterministic fallback chain.

#### Lifecycle through one facade

Draft, schedule, publish and archive with Posts::…, the injected manager or an action — an event on every transition and a recording Posts::fake().

#### Categories & tags

Nested categories with ancestors and descendants, find-or-create tags, and filters by model or translated slug.

#### URLs that stay put

Unique per-locale slugs backed by database indexes, locale-aware route binding, optional 301 slug history and a publish lock.

#### SEO & JSON-LD

Meta, Open Graph and Twitter tags plus schema.org BlogPosting data, filled from the post itself when you leave fields empty.

#### Featured, gallery & inline media

Three media buckets per post and \[media:UUID\] tokens in the body, resolved in one query against the post’s own files.

#### Likes & moderation

Likes and trending feeds, report-a-post with multi-moderator sign-off, and auto-unpublish when a report is upheld.

### Documentation

#### [Installation](https://roundly-consulting.com/open-source/docs/posts-for-laravel/installation.md)

Install via Composer, publish the posts migrations and those of the packages it builds on, then optionally the config and views.

#### [Configuration](https://roundly-consulting.com/open-source/docs/posts-for-laravel/configuration.md)

Every config key and its default — key types, tables, author, locales, slugs, SEO, JSON-LD, media and moderation.

#### [Key types](https://roundly-consulting.com/open-source/docs/posts-for-laravel/key-types.md)

Two independent key settings — your author model’s key and the posts tables’ own ids — both fixed at migrate time.

#### [Authors](https://roundly-consulting.com/open-source/docs/posts-for-laravel/authors.md)

Polymorphic authorship — add HasPosts to any bigint-, UUID- or ULID-keyed model and attach it to a post.

#### [The Posts facade](https://roundly-consulting.com/open-source/docs/posts-for-laravel/facade.md)

One facade for every write and read — the draft() builder, lifecycle verbs, SEO, tags, publishDue() and slug lookups on the configured model.

#### [DI, actions & DTOs](https://roundly-consulting.com/open-source/docs/posts-for-laravel/actions.md)

Inject PostsManager instead of calling the facade, or run one action class per write — with typed DTOs for controllers, jobs and imports.

#### [Translations](https://roundly-consulting.com/open-source/docs/posts-for-laravel/translations.md)

Per-locale titles, perexes, bodies and SEO meta stored as JSON — write, read and the exact fallback order.

#### [Publishing lifecycle](https://roundly-consulting.com/open-source/docs/posts-for-laravel/publishing-lifecycle.md)

Draft, scheduled, published and archived — transition methods, query scopes, rules, scheduled publishing and status helpers.

#### [Categories & tags](https://roundly-consulting.com/open-source/docs/posts-for-laravel/categories-tags.md)

Nested, translatable categories and tags — assign, sync by name, filter posts by model or slug, and walk the category tree.

#### [Slugs](https://roundly-consulting.com/open-source/docs/posts-for-laravel/slugs.md)

Per-locale slugs generated from the title, unique per locale with database indexes, normalised manual input and backfill commands.

#### [Routing & URL safety](https://roundly-consulting.com/open-source/docs/posts-for-laravel/routing.md)

Bind {post} by the current locale’s slug, keep old URLs alive with 301 slug history, lock published URLs and validate slug input.

#### [SEO meta tags](https://roundly-consulting.com/open-source/docs/posts-for-laravel/seo.md)

Per-post meta, canonical, Open Graph and Twitter tags via SeoData, with config defaults and fallbacks from the post itself.

#### [Structured data (JSON-LD)](https://roundly-consulting.com/open-source/docs/posts-for-laravel/structured-data.md)

schema.org BlogPosting or Article JSON-LD built from the post — headline, dates, author, publisher, image, tags and categories.

#### [Featured image & gallery](https://roundly-consulting.com/open-source/docs/posts-for-laravel/media.md)

Featured image, gallery and content buckets on every post via media-library, with og:image fallback and variant warming.

#### [Inline media in content](https://roundly-consulting.com/open-source/docs/posts-for-laravel/inline-media.md)

Embed \[media:UUID\] tokens in the post body and render them as responsive images or links in one batched query.

#### [Likes & reactions](https://roundly-consulting.com/open-source/docs/posts-for-laravel/likes.md)

Like, unlike and toggle posts, rank popular and trending feeds, and hydrate each viewer’s state in a single query.

#### [Reports & moderation](https://roundly-consulting.com/open-source/docs/posts-for-laravel/reports-moderation.md)

Report-a-post with dedup and guest reports, a moderation queue, multi-moderator sign-off and auto-unpublish on upheld reports.

#### [Events](https://roundly-consulting.com/open-source/docs/posts-for-laravel/events.md)

PostPublished, PostScheduled, PostArchived and PostDrafted — one per lifecycle transition, each carrying the post id.

#### [Custom post model](https://roundly-consulting.com/open-source/docs/posts-for-laravel/custom-model.md)

Extend Post with your own subclass — the package creates, queries and binds it everywhere, and Posts::query() returns it.

#### [Testing](https://roundly-consulting.com/open-source/docs/posts-for-laravel/testing.md)

Posts::fake() records every write instead of running it, with an assertion per verb — plus factories and real-run examples.

#### [Requirements](https://roundly-consulting.com/open-source/docs/posts-for-laravel/requirements.md)

PHP 8.4+ and Laravel 12 or 13; our own dependency packages install automatically, with no third-party runtime dependencies.

## Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

[More ways to support, including crypto](https://roundly-consulting.com/support-us.md)

By donating, you agree to our [donation terms](https://roundly-consulting.com/donation-terms.md).

[Support our open source work (opens in a new tab)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Join us on Patreon (opens in a new tab)](https://www.patreon.com/cw/roundly)

## Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.

[Get a quote in 48 hours](https://roundly-consulting.com/contact.md) [Browse all packages](https://roundly-consulting.com/open-source.md)
