relaticle/ink
Filament-native content publishing for Laravel: Eloquent models, full admin for posts/categories, SEO + JSON-LD, RSS, search, Blade UI components, and 13 MCP tools for AI agents. Headless by default with optional public blog routes.
The PostResource provides a full CRUD interface for blog posts.
| Field | Type | Notes |
|---|---|---|
| Title | TextInput | Required, max 255 |
| Slug | TextInput | Auto-generated, unique, frozen on rename |
| Content | MarkdownEditor | Required, full toolbar |
| Excerpt | Textarea | 3 rows |
| Status | Toggle | Hydrates to/from the `Draft |
| Published At | DateTimePicker | Future value = scheduled |
| Category | Select | Searchable, create inline |
| Tags | Select | Multi, searchable, create inline — only visible when features.tags is on |
| Author | Select | Defaults to current user |
| Featured Image | FileUpload | Image, public disk — auto-swaps to SpatieMediaLibraryFileUpload when features.media_library is on AND the package is installed |
| SEO | SEO Component | Title + description (collapsible) |
Posts are organized into tabs:
| Tab | Filter |
|---|---|
| Drafts | status = draft |
| Scheduled | status = published AND published_at > now |
| Published | status = published AND published_at <= now |
| Action | Effect |
|---|---|
| Publish | Sets status = Published and published_at to now (or keeps existing if already set) |
| Unpublish | Sets status = Draft and clears published_at |
| Schedule | Modal with DateTimePicker (min: now); sets status = Published + that timestamp |
| Delete / Force Delete / Restore | Standard soft-delete bulk operations |
All bulk actions notify on completion and deselect rows.
Simple CRUD for blog categories: name, slug (auto-generated, unique), posts_count column, soft-delete support, trashed filter.
Appears in the Blog navigation group when features.tags is enabled. Mirrors the Categories resource shape: name, slug (auto-generated, unique, frozen on rename), posts_count column, soft-delete support, trashed filter.
When the flag is off, the resource class still exists but shouldRegisterNavigation() returns false so it doesn't appear in the sidebar.
See the Tags Taxonomy page for full schema and usage.
use Relaticle\Ink\InkPlugin;
$panel->plugins([
InkPlugin::make(),
]);
The plugin auto-discovers PostResource, CategoryResource, and TagResource under the "Blog" navigation group. Resources hidden by feature flags don't appear in the sidebar — they're still resolvable for tests and direct URL access.
How can I help you explore Laravel packages today?