Installation and Prerequisites
Tagixo is a visual page and form builder for Laravel. The core package (ccast/tagixo) ships the builder engine, rendering pipeline, REST bootstrap/save endpoints, and a pre-built Vue 3 + PrimeVue frontend bundle. This page covers everything you need before writing a single line of integration code.
If you are using an admin panel SDK, refer to the Filament or Primix SDK documentation sections.
System requirements
| Dependency | Minimum | Notes |
|---|---|---|
| PHP | 8.2 | PHP 8.3 recommended |
| Laravel | 10 | Tested on 10, 11, 12, 13 |
| MySQL | 8.0+ | — |
| MariaDB | 10.4+ | — |
| PostgreSQL | 14+ | Recommended for production |
| SQLite | 3.35+ | Fine for local dev and CI |
| Redis | optional | Required only if you use the redis cache or session driver |
| Node / npm | not required | The builder bundle is pre-compiled and published as static files |
No npm step in your app. The Vue 3 + PrimeVue + Tiptap bundle is compiled inside the package and delivered as static files under
public/vendor/tagixo/. You publish those files once withvendor:publishand re-publish after every upgrade. Your own Vite pipeline is unaffected.
Required PHP extensions
All of these are enabled by default in official PHP Docker images, Laravel Herd, and Valet:
ext-jsonext-fileinfo— media upload MIME detectionext-gdorext-imagick— thumbnail generationext-mbstringext-pdo
Octane / Swoole compatibility
Tagixo is compatible with Laravel Octane (Swoole and FrankenPHP). The package holds no static state that leaks between requests. Keep two points in mind:
- After editing
config/tagixo.php, runphp artisan octane:reload(oroptimize:clearand restart the worker). Octane holds the bootstrapped app in memory and does not re-read config files automatically. - Preview signed URLs are stateless — no server-side session is required. The signed URL carries the full payload.
If you are running PHP-FPM or the built-in development server, none of this applies.
Composer setup for the private VCS package
ccast/tagixo is hosted on a private GitHub repository. You need a GitHub Personal Access Token (PAT) with Contents: Read permission on the c-cast/tagixo repository before Composer can clone it.
Declare the VCS source
Add the repository entry to your project's composer.json before installing:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/c-cast/tagixo.git"
}
]
}
Without this entry Composer has no way to locate ccast/tagixo and the install fails with a package not found error.
Authenticate with your PAT
Local development — global auth.json:
composer config --global --auth github-oauth.github.com <YOUR_PAT>
Writes to ~/.composer/auth.json. Available to every project on the machine.
CI / Docker — environment variable:
export COMPOSER_AUTH='{"github-oauth":{"github.com":"<YOUR_PAT>"}}'
composer install
Pass it as a BuildKit secret in Docker to keep the token out of the image layers:
RUN --mount=type=secret,id=composer_auth \
COMPOSER_AUTH=$(cat /run/secrets/composer_auth) \
composer install --no-dev --optimize-autoloader
Team project — project-level auth.json:
Create auth.json at the project root and add it to .gitignore immediately. Never commit it.
{
"github-oauth": {
"github.com": "<YOUR_PAT>"
}
}
Install the core package
composer require ccast/tagixo:"^1.0"
Pin a version range in production projects. Omitting a constraint installs the latest release, which may include breaking changes on the next composer update.
Service provider auto-discovery
The package registers Ccast\Tagixo\TagixoServiceProvider via Laravel's package discovery mechanism — declared in composer.json's extra.laravel.providers array. You do not need to touch config/app.php.
Confirm discovery ran cleanly after install:
php artisan package:discover --ansi
# Expected output includes:
# Discovered Package: ccast/tagixo
Publish and run migrations
php artisan vendor:publish --tag=tagixo-migrations
php artisan migrate
The following tables are created:
| Table | Purpose |
|---|---|
tgx_pages |
Page records — slug, title, published state, builder payload |
tgx_layouts |
Layout templates wrapping page content |
tgx_menus |
Named navigation menus |
tgx_menu_items |
Flat/nested menu entries with link targets |
tgx_forms |
Form schema definitions |
tgx_global_variables |
Site-wide design tokens (colors, fonts, spacing) |
tgx_media |
Media library entries |
tgx_mail_templates |
Transactional email templates |
tgx_pdf_templates |
PDF generation templates |
Existing migrations. The published migration files land in
database/migrations/. Inspect them before runningmigrateon an existing database — column definitions are additive and do not touch unrelated tables, but reviewing them before deploying to production is good practice.
Publish the configuration file
php artisan vendor:publish --tag=tagixo-config
This writes config/tagixo.php. The file is self-documented with inline comments. The most relevant top-level keys for initial setup:
| Key | Default | Description |
|---|---|---|
enable_default_types |
false |
Auto-registers DefaultPageType/MailType/PdfType; set to true by tagixo:install |
route_middleware |
['web','auth'] |
Middleware for all builder API routes |
public_route_middleware |
['web'] |
Middleware for public-facing routes (form submissions) |
frontend.auto_routes |
false |
Registers catch-all /{slug} route for published pages |
frontend.model |
Page::class |
Page model class resolved by the frontend controller |
media_gallery.disk |
'public' |
Laravel storage disk for media uploads |
preview.url_ttl_seconds |
300 |
Signed preview URL lifetime in seconds |
scaffolding.path |
'app/tagixo' |
Directory where make:tagixo-* generates classes |
scaffolding.namespace |
null (auto-derived) |
PHP namespace; derived from path if not set |
cache.enabled / cache.ttl |
true / 3600 |
Component config caching |
After editing config/tagixo.php, always clear the config cache:
php artisan optimize:clear
# or on Octane:
php artisan octane:reload
Scaffolding path
scaffolding.path and scaffolding.namespace tell the make:tagixo-* generators where to write new classes. If your project follows a non-standard structure, set these before scaffolding:
// config/tagixo.php
'scaffolding' => [
'path' => 'app/Http/Builder',
'namespace' => 'App\\Http\\Builder', // null = auto-derived from path
],
Publish static assets
php artisan vendor:publish --tag=tagixo-assets
Files written to public/vendor/tagixo/:
public/vendor/tagixo/
├── builder.js # Vue 3 builder application (ESM bundle)
├── builder.css # Builder UI styles
├── chunks/ # Code-split chunks loaded by builder.js
└── fonts/ # PrimeVue icon font and subset web fonts
Re-publish after every package upgrade. The JS bundle version must match the PHP package version. Running composer update ccast/tagixo without re-publishing the assets leaves the frontend out of sync with the server API — builder saves will fail silently or produce schema mismatches.
A one-liner to upgrade and re-publish in one step:
composer update ccast/tagixo && php artisan vendor:publish --tag=tagixo-assets --force
Commit the published assets. If your deployment pipeline runs
composer install --no-scripts(e.g., a Dockerfile that bakes the image without running artisan), commitpublic/vendor/tagixo/to version control so the files are present in the built image without requiring a post-deploy publish step.
Common first-boot errors
| Error | Cause | Fix |
|---|---|---|
package not found: ccast/tagixo |
VCS repository entry missing from composer.json |
Add the repositories block shown above |
The "https://github.com/c-cast/tagixo.git" repository could not be cloned |
PAT missing or expired | Set COMPOSER_AUTH or run composer config --global --auth github-oauth.github.com <PAT> |
Class "Ccast\Tagixo\TagixoServiceProvider" not found |
Autoloader not regenerated after install | Run composer dump-autoload then php artisan package:discover |
| Builder UI loads but saving returns 419 | CSRF token not present on builder requests | Ensure the builder route is inside the web middleware group; see Standalone Integration |
Table tgx_pages doesn't exist |
Migrations not published or not run | Run vendor:publish --tag=tagixo-migrations then php artisan migrate |
| Config changes have no effect on Octane | Octane caches the bootstrapped app | Run php artisan octane:reload after every config edit |
| Assets return 404 after upgrade | Assets not re-published after composer update |
Run vendor:publish --tag=tagixo-assets --force |
See also
- Standalone Integration — wiring up the builder and preview endpoints in your own Laravel controllers
- Storage Model and Data Shape — how page and layout payloads are structured in the database
- Data Models and Global Variables — querying
Page,Layout,Menu, andGlobalVariablemodels from your application code - Production Checklist and Troubleshooting — asset delivery, Octane cache hygiene, and Docker deployment notes