Sigta UI · Kit
Installation
How to install Sigta UI in a production Laravel app. The package
is proprietary and not published to Packagist, so composer require sigta/ui
alone will fail — you must point Composer at a private VCS repository first. This page covers that path end to end.
For the local-dev quickstart, see /docs.
Requirements
PHP ^8.2
Laravel ^12.0 | ^13.0
Livewire ^4.0
Tailwind CSS v4 (your app's build, via @tailwindcss/vite)
01 · Private VCS repository
Add a repositories entry pointing at the private Git remote.
Without this, Composer has no way to find the package and composer require
exits with “could not be found in any version”.
SSH (recommended for dev machines)
{
"repositories": [{
"type": "vcs",
"url": "git@github.com:sigta-hq/ui.git"
}]
}
HTTPS (CI / deploy runners)
{
"repositories": [{
"type": "vcs",
"url": "https://github.com/sigta-hq/ui.git"
}]
}
In context — sits alongside require
{
"require": {
"sigta/ui": "dev-main"
},
"repositories": [{
"type": "vcs",
"url": "git@github.com:sigta-hq/ui.git"
}]
}
02 · Composer authentication
Composer must authenticate to read the private repository. Use a GitHub personal access token
(with repo scope) for both HTTPS and CI; SSH keys work on
machines that already have them.
Via the CLI
# HTTPS + token (CI-friendly, no SSH key needed):
composer config --global github-oauth.github.com ghp_xxxxxxxxxxxxxxxxxxxx
# …or, per-project (writes auth.json next to composer.json — keep it out of git):
composer config github-oauth.github.com ghp_xxxxxxxxxxxxxxxxxxxx
Or commit-free auth.json (gitignored)
{
"github-oauth": {
"github.com": "ghp_xxxxxxxxxxxxxxxxxxxx"
}
}
COMPOSER_AUTH environment
variable — Composer reads it at install time.
# CI / deploy runner — provide the same auth without committing auth.json.
# Composer reads this JSON at install time. URL-encode the JSON value.
export COMPOSER_AUTH='{"github-oauth":{"github.com":"ghp_xxx"}}'
03 · Require & install
Pin to dev-main — the repository has no tagged releases yet, so a
version constraint like ^1.0 resolves to nothing. Once the package
is tagged, switch to a stable constraint.
Install
composer require sigta/ui:dev-main
dev-main requires a permissive stability setting. Run this only if the
install above errors on stability.
# Only if your app's minimum-stability is not already "dev" or lower.
composer config minimum-stability dev
composer config prefer-stable true
The service provider (SigtaServiceProvider) is auto-discovered via
extra.laravel.providers — no manual registration in
bootstrap/providers.php.
04 · CSS entry
Import the Sigta stylesheet into your app's CSS entry, and add @source
so Tailwind v4 scans the package's views for class names to keep.
Drop-in Sigta brand
/* resources/css/app.css */
@import "tailwindcss";
@import "../../vendor/sigta/ui/resources/css/sigta.css"; /* core + Sigta brand */
@source "../../vendor/sigta/ui/resources/views";
Or: core + your own theme
/* Re-brand: import core.css (structure) + your own theme values. */
@import "tailwindcss";
@import "../../vendor/sigta/ui/resources/css/core.css";
@import "./brand.css"; /* your :root{--sigta-*} + @font-face */
@source "../../vendor/sigta/ui/resources/views";
Re-branding guidance and the full token contract live at /docs#theming and the theme-switch kit page.
05 · Layout wiring
Add in <head>
(after Livewire styles). It emits a <script> tag pointing at the
route-served bundle — no publish step. Add too,
only if you use <sigta:editor>.
Your app layout
{{-- resources/views/components/layouts/app.blade.php --}}
<head>
…
@vite(['resources/css/app.css', 'resources/js/app.js'])
@livewireStyles
@sigtaScripts {{-- + @sigtaEditorScripts if you use <x-sigta::editor> --}}
</head>
<body>
…
@livewireScripts
</body>
Components are then available as <sigta:button> or
<x-sigta::button> — both compile identically.
06 · Publish fonts
@font-face URLs must resolve under public/,
so fonts are published rather than route-served. Run this once per deploy.
Publish
php artisan sigta:install --only=fonts
07 · Build assets
Vite compiles your app's CSS (Tailwind scans the package views via
@source). The package's own JavaScript ships pre-built in
dist/ and is served by route — it needs no build step
on your side.
Build
npm run build
dist/sigta.js and dist/sigta-editor.js are
committed to the repository, so the route-served bundle works out of the box. Make sure
dist/ is present after composer install — it
is, because the files ship in the package.
08 · Production deploy sequence
A typical release runbook. The private VCS repo + auth must be reachable from wherever this runs.
Release commands
composer install --no-dev --prefer-dist --optimize-autoloader
php artisan sigta:install
php artisan route:cache
php artisan view:cache
npm ci && npm run build
calls route() to emit the
asset URL. php artisan route:cache is recommended in production — and the
Sigta asset routes are registered by the service provider, so they're included.
composer install on the deploy runner must reach the private VCS
repository. If COMPOSER_AUTH isn't set, the install fails at the
sigta/ui requirement.
For the API surface, every component variant, and the re-branding workflow, continue to /docs or browse the component kit.
09 · LLM agent context
If this app will be built or edited by an LLM coding agent (ZCode, Claude Code, Cursor, etc.), publish the Sigta context files so the agent reads the rules instead of guessing. The same command handles fonts too — run it once and re-run it to update.
sigta:install mirrors fonts, writes
sigta-ui.md + sigta-components.md to the
project root, and adds a reference line to AGENTS.md (creating it if absent,
appending if present). Re-running is always safe — it overwrites the package-owned files and detects the
existing AGENTS.md reference without duplicating it.
Publish & sync
php artisan sigta:install
The agent then reads AGENTS.md → follows the pointer to
sigta-ui.md (the rules) → scans
sigta-components.md (the full API) → writes
<sigta:button> instead of
<button class="bg-blue-600">.
Auto-sync on every composer update
Because sigta:install is idempotent, you can wire it into your
composer.json so every composer install /
update re-syncs the context. Then no one has to remember to run it by hand.
{
"scripts": {
"post-autoload-dump": [
"@php artisan package:discover --ansi",
"@php artisan sigta:install --ansi"
]
}
}