tomylana93 / jcf
A modern, modular starterkit for building simple, purposeful applications.
Requires
- php: ^8.5
- inertiajs/inertia-laravel: ^3.0
- laravel/chisel: ^0.1.0
- laravel/fortify: ^1.37.2
- laravel/framework: ^13.17
- laravel/reverb: ^1.12
- laravel/sanctum: ^4.3
- laravel/tinker: ^3.0
- laravel/wayfinder: ^0.1.14
- spatie/laravel-backup: ^10.3
- spatie/laravel-medialibrary: ^11.23
- spatie/laravel-permission: ^8.3
- spatie/laravel-query-builder: ^7.3
- spatie/laravel-settings: ^3.9
Requires (Dev)
- driftingly/rector-laravel: ^2.6
- fakerphp/faker: ^1.24
- larastan/larastan: ^3.9
- laravel/boost: ^2.2
- laravel/installer: 5.32.0
- laravel/pail: ^1.2.5
- laravel/pao: ^1.0.6
- laravel/pint: ^1.27
- laravel/sail: ^1.53
- mockery/mockery: ^1.6
- nunomaduro/collision: ^8.9.3
- pestphp/pest: ^5.3
- pestphp/pest-plugin-browser: ^5.1
- pestphp/pest-plugin-laravel: ^5.0
- pestphp/pest-plugin-phpstan: ^5.2
- pestphp/pest-plugin-rector: ^5.0
- pestphp/pest-plugin-type-coverage: ^5.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.1
- v1.0.0
- dev-fix/report-health-check-failures
- dev-ci/cache-playwright-apt
- dev-build/nginx-1.30.6
- dev-feat/production-container-readiness
- dev-ci/isolate-pr-edits
- dev-fix/security-audit-findings
- dev-fix/backup-worker-check
- dev-refactor/i18n-wording-audit
- dev-fix/github-workflow-audit
- dev-chore/trakteer-funding
- dev-chore/github-sponsors
- dev-refactor/b08-props-resources
- dev-feat/b09-deferred-props
This package is auto-updated.
Last update: 2026-11-06 12:31:27 UTC
README
Jalara Core Foundation (JCF)
A modern, modular starterkit for building simple, purposeful applications.
JCF is a source scaffold: once a project is created, the application owns its code, repository, database, secrets, branding, and release cycle. composer update updates dependencies only. It never pulls in JCF application code.
Features
- Core: authentication and accounts, users and permissions, application shell, locale and timezone, settings, audit, and notifications.
- Optional modules: chat, documentation, backup, and the external API. All are off by default; enable them with
FEATURE_CHAT,FEATURE_DOCUMENTATION,FEATURE_BACKUP, andFEATURE_API(which also needsAPI_DOMAIN), then run migrations before sending module traffic. - Stack: Inertia v3 + Vue with SSR, Wayfinder, Fortify, Reverb, and Spatie permission, settings, media library, and backup.
Architecture
JCF is a modular monolith: one Laravel application, one deployment, and one PostgreSQL database, split into modules that each own their code, tables, settings, permissions, and tests. Modules work together through small contracts, not through each other's internals, so turning one off or changing it does not require changes in the rest of the application.
- Module registry:
App\Enums\Moduleis the single definition of each optional module: its settings class, permissions, service provider, and migration paths.config/features.phpholds the environment hard flags. - Two-level activation: the hard flag (
FEATURE_*) decides whether a module's schema, settings, and routes exist at all. A stored toggle under Settings → Modules then switches an available module on or off at runtime. A module that is off never touches its tables. - Contracts: the core consumes modules through interfaces in
App\Support\Contracts. Examples areSearchProvider(global search),ChatSummary(shell badge), andHealthCheck(system page). Each module registers its implementation in its own service provider. - Ownership: code is grouped by domain (
Identity,Account,Operations,Chat,Documentation,Settings, …) acrossapp/Actions,app/Http, andapp/Tables. Menu groupings such as Master Data are navigation only. - Enforced boundaries:
tests/Feature/ModuleBoundariesTest.phpuses Pest architecture tests to fail the build when core code reaches into module models or Actions. A lint rule keeps chat frontend internals inside the chat module. The frontendPermissionNameandModuleNametypes are tested against the backend enums.
Adding a module means adding a Module case, its settings class and migrations, its provider, the frontend type entries, and its boundary rules. The full checklist is in .ai/rules/providers.md.
Requirements
| PHP | Laravel | PostgreSQL | Node | pnpm | Composer |
|---|---|---|---|---|---|
| 8.5 | 13 | one database per app, plus a separate testing database | 26 | 12.16.1 | ≥ 2.10.3 |
PostgreSQL is the only supported database. SQLite and MySQL are not supported.
Quick start
composer create-project tomylana93/jcf app-name
cd app-name
Then:
- Edit
.env: setAPP_URL, a uniqueAPP_INSTANCE, and database credentials. - Create separate development and testing databases (
DB_DATABASE,DB_TEST_DATABASE). IfDB_TEST_DATABASEis blank, it defaults to<DB_DATABASE>_testing. - Set
SUPERADMIN_NAME,SUPERADMIN_EMAIL, andSUPERADMIN_PASSWORD. - Run
composer setup. It installs dependencies, migrates, initializes permissions and the superadmin, and builds assets.
Important
composer setup and init:app work only in local and testing environments. Production provisioning needs its own deployment process.
Note
laravel new --using=tomylana93/jcf is not supported directly. To use Laravel Installer 5.32.0, go through the adapter from a JCF checkout:
php bootstrap/install-project.php ../app-name --using=tomylana93/jcf:1.0.1 --git
Versioning
version.txtholds the repository version. A new application starts at0.1.0and is released by its own Release Please workflow..foundation-version(for examplejcf@1.0.1) records which JCF release the application is based on.- Upgrading: in a JCF checkout, run
git diff vOLD vNEWand apply the relevant changes to your application in one focused PR. Never copyversion.txt,CHANGELOG.md, or the Release Please files, and never import foundation history. Bump.foundation-versiononly after the whole release has been adopted. Back up the database before deploying migrations.
Development
composer test # full gate: audits, builds, lint, types, coverage, browser tests composer test:ci # faster gate used by CI
Derived private repositories on GitHub Free run CI without branch protection or rulesets; check the CI result before merging. JCF's hosted branch protection settings apply only to tomylana93/jcf.
To publish releases from a derived repository, configure a GitHub App (RELEASE_APP_CLIENT_ID, RELEASE_APP_PRIVATE_KEY) and set RELEASE_ENABLED=true.
Support JCF
If JCF helps you build your applications, you can support its maintenance and development through GitHub Sponsors or Trakteer.
Support is voluntary. JCF remains freely available under the MIT license.
License
MIT © 2026 tomylana93