PHPackages                             pictastudio/contento - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. pictastudio/contento

ActiveLibrary[Admin Panels](/categories/admin)

pictastudio/contento
====================

cms library to manage dynamic content

v0.4.1(1mo ago)012↓33.3%[1 PRs](https://github.com/pictastudio/contento/pulls)MITPHPPHP ^8.4CI passing

Since Feb 25Pushed 1mo agoCompare

[ Source](https://github.com/pictastudio/contento)[ Packagist](https://packagist.org/packages/pictastudio/contento)[ Docs](https://github.com/pictastudio/venditio-core)[ GitHub Sponsors](https://github.com/pictastudio)[ RSS](/packages/pictastudio-contento/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (9)Dependencies (31)Versions (11)Used By (0)

cms library to manage dynamic content
=====================================

[](#cms-library-to-manage-dynamic-content)

[![Latest Version on Packagist](https://camo.githubusercontent.com/9401bcae081cceab6c577f7ee320f1b4c3483ed8078a3071196a75f082e2eb43/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f706963746173747564696f2f636f6e74656e746f2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/pictastudio/contento)[![GitHub Tests Action Status](https://camo.githubusercontent.com/e6feab19d6c37baab7ed31fbf2da3f65fda32e37ec58fe9c4c17e4ceb1e2df9b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f706963746173747564696f2f636f6e74656e746f2f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/pictastudio/contento/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/e096ae4b71a8c6d09f60f83e50f41ac1d0a59690d8078bbd9ddcd363be279588/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f706963746173747564696f2f636f6e74656e746f2f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/pictastudio/contento/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/a0f1ad9298ef2bb4ef658b651196d954f352db9c07e86f93d6838a65d4a463df/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f706963746173747564696f2f636f6e74656e746f2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/pictastudio/contento)

This is where your description should go. Limit it to a paragraph or two. Consider adding a small example.

Support us
----------

[](#support-us)

[![](https://camo.githubusercontent.com/3c1842d40418c290096b894bb73474fe88c06f9731f181593b541eae5aeaae27/68747470733a2f2f6769746875622d6164732e73332e65752d63656e7472616c2d312e616d617a6f6e6177732e636f6d2f636f6e74656e746f2e6a70673f743d31)](https://spatie.be/github-ad-click/contento)

We invest a lot of resources into creating [best in class open source packages](https://spatie.be/open-source). You can support us by [buying one of our paid products](https://spatie.be/open-source/support-us).

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on [our contact page](https://spatie.be/about-us). We publish all received postcards on [our virtual postcard wall](https://spatie.be/open-source/postcards).

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require pictastudio/contento
```

You can publish and run the migrations with:

```
php artisan vendor:publish --tag="contento-migrations"
php artisan migrate
```

You can publish the config file with:

```
php artisan vendor:publish --tag="contento-config"
```

This is the contents of the published config file:

```
return [
    'authorize_using_policies' => env('CONTENTO_AUTHORIZE_USING_POLICIES', true),
    'models' => [
        'page' => \PictaStudio\Contento\Models\Page::class,
        'faq_category' => \PictaStudio\Contento\Models\FaqCategory::class,
        'faq' => \PictaStudio\Contento\Models\Faq::class,
        'mail_form' => \PictaStudio\Contento\Models\MailForm::class,
        'modal' => \PictaStudio\Contento\Models\Modal::class,
        'content_tag' => \PictaStudio\Contento\Models\ContentTag::class,
        'setting' => \PictaStudio\Contento\Models\Setting::class,
    ],
    'table_names' => [
        'pages' => 'pages',
        'faq_categories' => 'faq_categories',
        'faqs' => 'faqs',
        'mail_forms' => 'mail_forms',
        'modals' => 'modals',
        'content_tags' => 'content_tags',
        'content_taggables' => 'content_taggables',
        'settings' => 'settings',
    ],
    'routes' => [
        'api' => [
            'v1' => [
                'prefix' => 'api/contento/v1',
                'name' => 'api.contento.v1',
                'middleware' => ['api'],
                'pagination' => [
                    'per_page' => 15,
                    'max_per_page' => 100,
                ],
            ],
            'enable' => true,
            'json_resource_enable_wrapping' => true,
        ],
    ],
];
```

Usage
-----

[](#usage)

This package provides a headless CMS API. Once installed and migrated, you can access the following endpoints:

- `GET /api/contento/v1/pages` - List all pages
- `GET /api/contento/v1/pages/{id_or_slug}` - Get a single page
- `GET /api/contento/v1/menus` - List menus
- `GET /api/contento/v1/menus/{id_or_slug}` - Get a single menu
- `GET /api/contento/v1/menu-items` - List menu items
- `GET /api/contento/v1/menu-items/{id_or_slug}` - Get a single menu item
- `GET /api/contento/v1/faq-categories` - List FAQ categories with questions
- `POST /api/contento/v1/faqs/bulk/upsert` - Create and update FAQs in a single request
- `GET /api/contento/v1/settings` - List all settings

All endpoints return JSON responses using Laravel API Resources.

### Common list query parameters

[](#common-list-query-parameters)

Most index endpoints support:

- `page`
- `per_page`
- `sort_by`
- `sort_dir`
- `exclude_all_scopes`
- `exclude_active_scope`
- `exclude_date_range_scope`

Pages also support `exclude_published_scope`.

### Menu query parameters

[](#menu-query-parameters)

`GET /api/contento/v1/menus` supports:

- `id[]`
- `title`
- `slug`
- `active` or `is_active`
- `visible_date_from`, `visible_date_from_start`, `visible_date_from_end`
- `visible_date_to`, `visible_date_to_start`, `visible_date_to_end`
- `created_at_start`, `created_at_end`
- `updated_at_start`, `updated_at_end`
- `include=items`

### Menu item query parameters

[](#menu-item-query-parameters)

`GET /api/contento/v1/menu-items` supports:

- `id[]`
- `menu_id`
- `parent_id`
- `title`
- `slug`
- `link`
- `active` or `is_active`
- `visible_date_from`, `visible_date_from_start`, `visible_date_from_end`
- `visible_date_to`, `visible_date_to_start`, `visible_date_to_end`
- `created_at_start`, `created_at_end`
- `updated_at_start`, `updated_at_end`
- `as_tree=1`
- `include=menu,parent,children`

### Authorization

[](#authorization)

Policy authorization is optional and follows host app policy registration.

Register policies in your app and keep `contento.authorize_using_policies` enabled:

```
use App\Models\Page;
use App\Policies\PagePolicy;
use Illuminate\Support\Facades\Gate;

public function boot(): void
{
    Gate::policy(Page::class, PagePolicy::class);
}
```

Controllers check authorization only when:

- `contento.authorize_using_policies` is `true`
- there is an authenticated user
- a matching gate/policy definition exists

Testing
-------

[](#testing)

The package uses [Pest](https://pestphp.com/) for testing. You can run the tests using:

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Frameck](https://github.com/Frameck)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

42

—

FairBetter than 89% of packages

Maintenance98

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~3 days

Total

9

Last Release

47d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/871c609368b67370ee8c9a0e1077d94ece3b358ee39703a5bdae118c0159f1b1?d=identicon)[pictastudio](/maintainers/pictastudio)

---

Top Contributors

[![Frameck](https://avatars.githubusercontent.com/u/77396783?v=4)](https://github.com/Frameck "Frameck (38 commits)")

---

Tags

laravelPicta Studiocontento

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/pictastudio-contento/health.svg)

```
[![Health](https://phpackages.com/badges/pictastudio-contento/health.svg)](https://phpackages.com/packages/pictastudio-contento)
```

###  Alternatives

[guava/filament-knowledge-base

A filament plugin that adds a knowledge base and help to your filament panel(s).

206120.5k1](/packages/guava-filament-knowledge-base)[ralphjsmit/laravel-filament-seo

A package to combine the power of Laravel SEO and Filament Admin.

15398.7k10](/packages/ralphjsmit-laravel-filament-seo)[vormkracht10/laravel-mails

Laravel Mails can collect everything you might want to track about the mails that has been sent by your Laravel app.

24149.7k](/packages/vormkracht10-laravel-mails)[geo-sot/filament-env-editor

Access .env file though Filament admin panel

2432.3k1](/packages/geo-sot-filament-env-editor)[caresome/filament-neobrutalism-theme

A neobrutalism theme for FilamentPHP admin panels

303.2k](/packages/caresome-filament-neobrutalism-theme)[andreia/filament-ui-switcher

Add a modal with options to switch between different UI layouts and styles (colors, fonts, font sizes).

233.8k](/packages/andreia-filament-ui-switcher)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
