Chronos CMS - A developer friendly headless CMS built by Further Digital Solutions
further/chronos is a Laravel package for chronos cms - a developer friendly headless cms built by further digital solutions.
It currently has 0 GitHub stars and 21 downloads on Packagist (latest version v3.2).
Install it with composer require further/chronos.
Discover more Laravel packages by further
or browse all Laravel packages to compare alternatives.
Last updated
A developer-friendly headless CMS built by Further.
composer require further/chronos
Chronos does not currently use Laravel package auto-discovery. Add its service
provider to bootstrap/providers.php:
<?php
use App\Providers\AppServiceProvider;
use Chronos\ChronosServiceProvider;
return [
AppServiceProvider::class,
ChronosServiceProvider::class,
];
Composer installs and discovers Chronos' third-party dependencies. Do not add legacy Intervention Image or Laravel Collective providers and aliases to the application.
Chronos uses Laravel Sanctum for API access tokens. Install Laravel's API scaffolding:
php artisan install:api
If Artisan offers to run migrations, you may defer them until the migration step below.
Chronos expects App\Models\User to use Sanctum, notifications, and the
ChronosUser trait. A Laravel 13 User model can be configured as follows:
<?php
namespace App\Models;
use Chronos\Traits\ChronosUser;
use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
#[Fillable([
'email',
'password',
'firstname',
'lastname',
'picture',
'role_id',
])]
#[Hidden([
'password',
'remember_token',
])]
class User extends Authenticatable
{
/** @use HasFactory<UserFactory> */
use HasApiTokens;
use HasFactory;
use Notifiable;
use ChronosUser;
protected $appends = [
'endpoints',
'name',
];
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
}
Chronos' migration removes the default users.name column and adds
firstname, lastname, picture, and role_id. Remove name from the
model's fillable attributes before running the migrations. Update any
application factories, seeders, tests, or registration code that still writes
to users.name.
Set the application's public URL and the absolute path to its public directory:
APP_URL=http://127.0.0.1:8000
UPLOAD_URL=/absolute/path/to/application/public
Chronos stores uploaded media below UPLOAD_URL and exposes it below
APP_URL.
Publish the package configuration:
php artisan vendor:publish --provider="Chronos\ChronosServiceProvider" --tag=config
Publish the browser assets:
php artisan vendor:publish --provider="Chronos\ChronosServiceProvider" --tag=public --force
The assets are published to public/chronos.
Views may optionally be published for customization:
php artisan vendor:publish --provider="Chronos\ChronosServiceProvider" --tag=views
After publishing, review config/chronos.php, especially upload_paths.
Chronos automatically loads its package migrations. Ensure the application
already has Laravel's default users table, then run:
php artisan migrate
php artisan db:seed --class="Chronos\Database\Seeders\DatabaseSeeder"
For a disposable test application, starting with a clean database is safer:
php artisan migrate:fresh
php artisan db:seed --class="Chronos\Database\Seeders\DatabaseSeeder"
After installation or after changing the local package:
composer dump-autoload
php artisan optimize:clear
Start the Laravel development server:
php artisan serve
Then open:
http://127.0.0.1:8000/admin/login
Chronos registers a scheduled task that publishes content when its scheduled time is reached.
During local development, run:
php artisan schedule:work
In production, run Laravel's scheduler every minute:
* * * * * cd /path-to-application && php artisan schedule:run >> /dev/null 2>&1
P.S.: You're awesome for being on this page