PHPackages                             jasminecms/jasmine - 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. jasminecms/jasmine

ActiveLibrary

jasminecms/jasmine
==================

A Laravel based CMS.

2.17.2(2mo ago)613.6k↓50%2[5 issues](https://github.com/JasmineCMS/jasmine/issues)4MITJavaScriptPHP ^8.2

Since May 17Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/JasmineCMS/jasmine)[ Packagist](https://packagist.org/packages/jasminecms/jasmine)[ RSS](/packages/jasminecms-jasmine/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (22)Versions (204)Used By (4)

Jasmine CMS
===========

[](#jasmine-cms)

A Laravel based CMS inspired by [Voyager](https://voyager.devdojo.com/).

Screenshots
-----------

[](#screenshots)

Login [![Login](https://github.com/JasmineCMS/jasmine/raw/master/screenshots/login.png?raw=true)](https://github.com/JasmineCMS/jasmine/blob/master/screenshots/login.png?raw=true)

Bread index [![Login](https://github.com/JasmineCMS/jasmine/raw/master/screenshots/bread-index.png?raw=true)](https://github.com/JasmineCMS/jasmine/blob/master/screenshots/bread-index.png?raw=true)

Bread Edit [![Login](https://github.com/JasmineCMS/jasmine/raw/master/screenshots/bread-edit.png?raw=true)](https://github.com/JasmineCMS/jasmine/blob/master/screenshots/bread-edit.png?raw=true)

#### Note

[](#note)

Jasmine uses [alexusmai/laravel-file-manager](https://github.com/alexusmai/laravel-file-manager)
If you are using it already or planing to,
you might need to tweak some configurations to prevent conflicts.

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

[](#installation)

Require JasmineCMS in your new or existing laravel app
`composer require jasminecms/jasmine`

Link jasmine public assets to your public folder
`php artisan jasmine:link-public-assets`

Migrate the database (be sure to make any changes to the default laravel migration prior)
`php artisan migrate`

Create a user (1st user is super admin)
`php artisan jasmine:create-user`

Add Jasmine routes to your `routes/web.php` routes file (you may change the prefix to anything you like)

```
Route::prefix('jasmine')->group(fn() => Jasmine::routes());
```

Add Jasmine api routes to your `routes/api.php` routes file (you may change the prefix to anything you like)

```
Route::prefix('jasmine')->group(fn() => Jasmine::apiRoutes());
```

You can now log in to Jasmine,
Navigate to `/jasmine`
And login

You can register Jasmine assets in your `AppServiceProvider`

##### Locales

[](#locales)

Jasmine supports multilingual assets, define your content languages like so

```
Jasmine::registerLocales(['en', 'he']);
```

##### Breadables

[](#breadables)

Breadables can be any model
Run `php artisan make:jasmine-model Post` to create a Jasmine Model

In your model implement
`Jasmine\Jasmine\Bread\BreadableInterface`
use trait `Jasmine\Jasmine\Bread\Breadable`
if the model has multilingual columns, also use trait
`Jasmine\Jasmine\Bread\Translatable;`
implement missing method

then register your model in `AppServiceProvider`

```
Jasmine::registerBreadable(\App\Models\MyModel::class);
```

##### Pages

[](#pages)

Pages are very similar to models, but function as a single entity instead of a table
Run `php artisan make:jasmine-model Post` to create a Jasmine Model

Register your pages in `AppServiceProvider`

```
Jasmine::registerPage(\App\Pages\Home::class);
```

##### Interface locale

[](#interface-locale)

You can translate Jasmine interface to any language like so

```
Jasmine::registerInterfaceLocale('he', 'path/to/locale.json');
```

the send parameter will accept either a path to your json file or an array of translations
you can copy `/resources/front-lang/he.json` to get started quickly.

##### Custom assets

[](#custom-assets)

If for some reason you wish to load custom javascript or css you can do it like so

```
Jasmine::registerCustomStyle('/path/to/style.css');
Jasmine::registerCustomJs('/path/to/app.js');
```

##### Permissions

[](#permissions)

TODO

##### SideBarMenuItems

[](#sidebarmenuitems)

You can add items to the sidebar menu like so

```
// internal
\Jasmine::registerSideBarMenuItem('settings', fn() => [
    'title'    => __('Settings'),
    'icon'   => 'bi-link-45deg text-danger',
    'href'     => route('jasmine.my.route', 'my-param-value'),
    'is-route' => ['r' => 'jasmine.my.route', 'p' => ['my-param' => 'my-param-value']],
], 70);

// external
\Jasmine::registerSideBarMenuItem('site-triple', fn() => [
    'href'   => 'https://triple.co.il',
    'title'  => 'Triple',
    'icon'   => 'bi-link-45deg text-danger',
    'target' => '_blank',
], 100);
```

TODO: `registerSideBarSubMenuItem`

##### Oauth2 SSO

[](#oauth2-sso)

You can register oauth2 providers to enable sso login to jasmine

Facebook example

```
Jasmine::registerOauth2Sso(
    'Facebook', //name
    'https://www.facebook.com/images/fb_icon_325x325.png', //icon
    '{client_id}',
    '{client_secret}',
    'https://www.facebook.com/v3.3/dialog/oauth',
    'https://graph.facebook.com/v3.3/oauth/access_token',
    ['email'],
    false, // accepts boolean or callback
    function ($token) {
        $token = json_decode($token, true);

        $res = Http::asJson()->get('https://graph.facebook.com/v3.3/me', [
            'access_token' => $token['access_token'],
            'fields'       => 'name,email',
        ]);

        return [
            'name'  => $res->json('name'),
            'email' => $res->json('email'),
        ];
    },
);
```

##### Translation services

[](#translation-services)

You can register translation services to automatically translate pages and breadables

Here is an example using the [prism-php/prism](https://prismphp.com) library

```
        Jasmine::registerTranslationService('ai', function (string $source, string $target, array $values) {
            $data = array_combine(array_keys($values), array_column($values, 'value'));

            $lc2Label = function (string $lc) {
                return match ($lc) {
                    'en' => 'English',
                    'he' => 'Hebrew',
                    default => $lc,
                };
            };

            $fromLang = $lc2Label($source);
            $toLang = $lc2Label($target);

            $req = Prism::text()
                ->using(Provider::Gemini, 'gemini-2.0-flash')
                ->withMaxTokens(32768)
                ->withSystemPrompt(implode(' ', [
                    'You are a professional translator,',
                    'you try to use a gender neutral language when possible,',
                    'you have a good understanding of JSON objects',
                    'no notes, comments, explanations or other information, just JSON',
                ]))
                ->withMessages([
                    new UserMessage("Translate my JSON object from $fromLang to $toLang, translate all values only (not keys), leave any urls untouched"),
                    new UserMessage(json_encode($data, JSON_UNESCAPED_UNICODE)),
                ]);

            $res = $req->asText();

            preg_match('#\{(?:[^{}]|(?R))*\}#s', $res->text, $matches);
            $translated = json_decode($matches[0] ?? '{}', true);

            return $translated;
        });
```

###  Health Score

55

—

FairBetter than 98% of packages

Maintenance68

Regular maintenance activity

Popularity32

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity88

Battle-tested with a long release history

 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 ~10 days

Total

202

Last Release

78d ago

Major Versions

0.12.1 → 1.0.02021-10-03

1.4.0 → 2.0.02022-11-21

PHP version history (3 changes)1.0.0PHP ^8.0

2.4.0PHP ^8.1

2.12.0PHP ^8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/f843e1ac6ca3aabf914bae50226984d02b8def3482c8e826a7fcdc023c363fcd?d=identicon)[MordiSacks](/maintainers/MordiSacks)

---

Top Contributors

[![MordiSacks](https://avatars.githubusercontent.com/u/13218192?v=4)](https://github.com/MordiSacks "MordiSacks (127 commits)")

---

Tags

cmsjasminecmslaravelphp

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/jasminecms-jasmine/health.svg)

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

###  Alternatives

[statamic/cms

The Statamic CMS Core Package

4.8k3.2M720](/packages/statamic-cms)[grumpydictator/firefly-iii

Firefly III: a personal finances manager.

22.8k69.3k](/packages/grumpydictator-firefly-iii)[bagisto/bagisto

Bagisto Laravel E-Commerce

26.2k161.6k7](/packages/bagisto-bagisto)[code16/sharp

Laravel Content Management Framework

78959.5k4](/packages/code16-sharp)[orchestra/workbench

Workbench Companion for Laravel Packages Development

8217.0M43](/packages/orchestra-workbench)

PHPackages © 2026

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