Skip to content

Configuration ​

Introduction ​

kitloom follows the usual Laravel conventions: every package merges its own defaults, so a site has config files only for what it changes. A package's config is config/kitloom-<name>.php; publish it when you need to override it, for example:

bash
php artisan vendor:publish --tag=kitloom-site-config

Or create the file with only the keys you change — the rest keeps the package's defaults.

Site settings that administrators change from the panel — the site title, permalinks, the active theme, the switched-off modules — are not config. They live in the options table, exactly where WordPress keeps them. See Where settings are stored.

Environment ​

Site and core ​

VariableDefaultPurpose
APP_THEME''The theme used while none is chosen on Appearance → Themes, and the one npm run build and npm run dev build. Empty: no theme, pages as JSON, nothing for Vite. kitloom:install writes the theme it activates here.
SITE_CACHE_TTL0Seconds the site keeps whole pages for guests (CachePage). 0 — no page cache. The default of Settings → Cache in the admins, where it is switched on, timed and cleared; a value saved there wins.
SITE_CACHE_STOREdefault storeThe cache store for those pages.
SITE_CACHE_STATICfalseAlso keep those pages as files and send them from public/index.php before Laravel starts — a file read instead of a boot. One server, or several sharing the folder SITE_CACHE_STATIC_PATH (default storage/framework/cache/kitloom-pages). The skeletons' public/index.php names that folder itself, so a different path is changed there too: the two must match. See Benchmarks.
DB_PREFIX''The table prefix — wp_ for a typical WordPress database. Read by the skeletons' config/database.php for MySQL and MariaDB.
HASH_DRIVERwordpressPasswords are checked and written as WordPress hashes them. The default of the skeletons' config/hashing.php; Laravel's own config says bcrypt.
AUTH_MODELApp\Models\UserThe user model of the wordpress user provider.
KITLOOM_MODULES_CACHESautoWhat a module switch does to config and route caches: auto, deploy or manual. See Enabling & Disabling.
KITLOOM_MODULES_MENU_HELPtruefalse leaves How it works out of every module's menu section, in both admins. The pages stay, linked from the Modules screen. See Enabling & Disabling.
KITLOOM_UNDECIDED_ABILITIESdenyThe Gate's answer for an admin section or a WordPress capability nobody decided on. allow only for a site that runs without roles on purpose.
SEED_ADMIN_EMAIL[email protected]Skeletons only: the first administrator the seeder creates.
SEED_ADMIN_PASSWORDpasswordSkeletons only: that administrator's password.

Modules ​

VariablePackagePurpose
KITLOOM_AI_USERkitloom/aiLogin or email of the user the local MCP server (php artisan mcp:start kitloom) acts as.
KITLOOM_BACKUP_NAMEkitloom/backupThe name archives are kept under; two sites sharing a bucket keep apart by it.
KITLOOM_BACKUP_LOCAL_ROOT, KITLOOM_BACKUP_TEMPORARY_DIRECTORYkitloom/backupWhere local archives and the work files go.
KITLOOM_FORMS_MAILERkitloom/formsThe mailer form mail goes through; the default one when empty.
KITLOOM_FORMS_HONEYPOTkitloom/formsThe hidden field that catches bots (on by default).
KITLOOM_FORMS_TURNSTILE_SITE_KEY, KITLOOM_FORMS_TURNSTILE_SECRETkitloom/formsCloudflare Turnstile keys.
HEALTH_EXPECTED_ENVIRONMENTkitloom/healthThe environment Site Health expects (production).
IMPORT_EXPORT_DISKkitloom/import-exportWhere an uploaded WXR file waits for the import (local).
MEDIA_DISKkitloom/mediaThe uploads disk (public).
MEDIA_UPLOADS_URLkitloom/mediaThe public address of the uploads, for a CDN or a bucket.
MEDIA_BIG_IMAGE_THRESHOLDkitloom/mediaBigger photos are shown scaled into it, as WordPress's big_image_size_threshold (2560; 0 — never).
MEDIA_MAX_IMAGE_PIXELS, MEDIA_MAX_SIZEkitloom/mediaLimits for an uploaded image's pixels and any file's bytes.
MEDIA_OPTIMIZE, MEDIA_OPTIMIZE_PATHkitloom/media-optimizerImage compression on or off, and where its tools are.
PAYMENTS_DEFAULT_METHODkitloom/paymentsThe payment method used when none is named.
REDIRECTS_CACHE_TTL, REDIRECTS_CACHE_STOREkitloom/redirectsHow long and where the rule set is cached (86400).
KITLOOM_SEARCH_ENGINE, KITLOOM_SEARCH_INDEXkitloom/searchdatabase (the module's own engine), or a Scout engine such as meilisearch; the index name.
KITLOOM_SENTRY_LOCAL_COPYkitloom/sentryWhere each server keeps its copy of the Sentry settings.
SEO_SITEMAP, SEO_ROBOTS_TXTkitloom/seoServe the sitemaps and robots.txt (on by default).
SEO_SITEMAP_CACHE_TTL, SEO_SITEMAP_CACHE_STOREkitloom/seoHow long and where sitemaps are cached (3600).
SEO_INSTANT_INDEXING, SEO_GOOGLE_INDEXING_QUOTA, SEO_INSTANT_INDEXING_CACHE_STOREkitloom/seoInstant indexing on or off, Google's daily quota (200), the store that counts it.
VISUAL_EDITORkitloom/visual-editor-*Post text in the visual editor (on) or the plain HTML editor (off).
KITLOOM_SANDBOX, KITLOOM_SANDBOX_*kitloom/sandboxDemo sites only: a SQLite copy of the site per visitor, chosen by the host. Off by default.

Each module's README — its How it works page in the admin — lists the rest of its configuration.

Where settings are stored ​

All packages read and write site options through kitloom/settings. It reads the autoloaded options — what WordPress loads with every page — in one query, once per request and only if something asks, and caches the snapshot; any other option (a transient, an inactive theme's mods) is read by name when asked. A declared setting that was never saved answers with its default without a query:

php
use Kitloom\Settings\Facades\Settings;

Settings::get('blogname');
Settings::get('posts_per_page', 10);
Settings::array('sticky_posts');   // JSON, or WordPress's serialized format

Writes go through Kitloom\Settings\SettingWriter, which checks a declared setting's rules and, given a user, their permission — the admins' settings pages save through it. Arrays are written as JSON; WordPress's serialized values are still read, and become JSON on their next save. Every write announces Kitloom\Settings\Events\SettingSaved or SettingDeleted. Modules declare their settings; php artisan settings:list shows them all, by group.

KeyDefaultMeaning
kitloom-settings.tableoptionsThe options table (wp_options with the wp_ prefix).
kitloom-site.theme.optionkitloom_themeThe option that names the active theme. While it is not set, APP_THEME names it; the option's value '' means no theme, and the site answers with JSON.
kitloom-modules.optionkitloom_inactive_modulesThe option that holds the switched-off modules (JSON). It is intentionally not WordPress's active_plugins.
kitloom-modules.changed_optionkitloom_modules_changed_atThe time of the last module switch.

The site ​

config/kitloom-site.php (kitloom/site):

KeyDefaultMeaning
bases.author, bases.search, bases.paginationauthor, search, pageThe fixed words in archive addresses. The category and tag bases are WordPress's options, category_base and tag_base.
theme.optionkitloom_themeThe option that names the active theme.
theme.defaultenv('APP_THEME', '')The theme used while the option is not set or names no installed theme.
theme.pathnullWhere themes that are folders of the application live; null — themes/.
types.post_types, types.taxonomies[]Address settings over whatever a module or theme declares: 'book' => ['rewriteSlug' => 'books'].
content_filters[]The order content filters run in, by name, as the priorities of the_content.
page_widgets[]Widget slots of page types: 'book' => ['similar_books'].
uploads_urlnullWhere the WordPress uploads are seen from outside; null — /wp-content/uploads.
breadcrumbs.homeHomeThe first crumb.
cache.ttl, cache.storeSITE_CACHE_TTL, SITE_CACHE_STOREThe page cache for guests; the TTL is the default of the kitloom_page_cache and kitloom_page_cache_ttl options Settings → Cache writes.
cache.flush_tablesthe content tablesA record of these tables saved or deleted — every cached page is drawn anew.
cache.ignore_queryutm_*, fbclid, gclid…Query parameters that do not make another page: a campaign's tags and click ids share the entry of the plain address. * ends a prefix.
search.per_pagenullResults per page; null — the posts_per_page option.
search.stopwordsnullWords left out of a search; null — WordPress's English list.
auth.routestruePOST /login and POST /logout for the theme's sign-in form.
rest.registertrueThe REST root /wp-json/ and every module's namespace under it.
rest.prefixwp-jsonThe REST root's prefix.
rest.corstrueAdd the prefix to Laravel's cors.paths, so a front end on another origin may call it.

The permalink structure, the front page, the posts page, posts per page and the other reading options are WordPress's own options, set on the admin's settings pages.

Admin switches ​

Every admin package adds its section as soon as it is installed. When a site wants to place items itself, or hide a section, it turns the package off with a config switch instead of uninstalling it. Add the key to the module's config file (create it if the site has none):

php
// config/kitloom-redirects.php
return [
    'filament' => [
        'register' => false,
    ],
];

Switches default to true.

Filament ​

SwitchTurns off
kitloom-wp-schema.filament.registerThe core sections: Posts, Pages, Categories, Tags, Comments, the settings pages and the dashboard widgets
kitloom-wp-schema.filament.settings.registerThe settings pages General, Writing, Permalinks and Widgets
kitloom-wp-schema.filament.comments.registerComments
kitloom-wp-schema.filament.dashboard.registerkitloom's widgets on the dashboard
kitloom-site.filament.registerAppearance → Themes; Settings → Reading, Privacy and Cache
kitloom-modules.filament.registerModules
kitloom-permissions.filament.registerUsers → Roles
kitloom-permissions.filament.user_roleThe Role field on the user form
kitloom-media.filament.registerMedia
kitloom-media.filament.pickerPicking attachments (the featured image, the editor) in the media library
kitloom-navigation.filament.registerAppearance → Menus
kitloom-widgets.filament.registerThe forms of kitloom/widgets' widget types
kitloom-custom-fields.filament.registerCustom Fields → Field Groups
kitloom-custom-fields.filament.form_sectionThe Custom Fields block on forms
kitloom-post-types.filament.registerCustom Fields → Post Types, Taxonomies
kitloom-seo.filament.registerSEO
kitloom-seo.filament.head_metaThe SEO block on post and term forms
kitloom-redirects.filament.registerRedirects
kitloom-internal-links.filament.registerInternal Links
kitloom-forms.filament.registerContact
kitloom-shop.filament.registerProducts, Shop
kitloom-payments.filament.registerPayments
kitloom-slider.filament.registerSliders
kitloom-shortcodes.filament.registerSettings → Shortcodes
kitloom-search.filament.registerSearch
kitloom-search-replace.filament.registerSearch & Replace
kitloom-import-export.filament.registerTools → Import, Export
kitloom-admin-menu.filament.registerAdmin Menu
kitloom-api.filament.registerREST API
kitloom-ai.filament.registerAI agents
kitloom-two-factor.filament.registerTwo-Factor Authentication
kitloom-social-accounts.filament.registerSocial Login
kitloom-activity-log.filament.registerActivity Log
kitloom-backup.filament.registerBackups
kitloom-health.filament.registerSite Health
kitloom-horizon.filament.registerHorizon
kitloom-pulse.filament.registerPulse
kitloom-sentry.filament.registerSentry
kitloom-media-optimizer.filament.registerImage compression
kitloom-cookie-consent.filament.registerCookie Consent
kitloom-analytics.filament.registerAnalytics
kitloom-tag-manager.filament.registerTag Manager
kitloom-ad-pixels.filament.registerAd Pixels
kitloom-header-footer.filament.registerHeader & Footer
kitloom-ai-writer.filament.registerAI Writer
kitloom-admin-bar.filament.registerAdmin Bar, and where the admin bar's New and Edit lead in Filament
kitloom-bookings.filament.registerBookings
kitloom-comments.filament.registerSettings → Discussion, How it works next to Comments, and the links the moderation emails point at
kitloom-courses.filament.registerCourses
kitloom-languages.filament.registerLanguages, the Translations block on post and term forms, and the Translations column, filter and "Translate with AI into…" in their lists
kitloom-link-checks.filament.registerLink Checker
kitloom-listings.filament.registerListings
kitloom-maintenance.filament.registerMaintenance
kitloom-privacy.filament.registerPrivacy
kitloom-webhooks.filament.registerWebhooks

Nova ​

SwitchTurns off
kitloom-wp-schema.nova.content.registerPosts, Pages, Categories, Tags
kitloom-wp-schema.nova.settings.registerThe Settings section
kitloom-wp-schema.nova.options.registerThe Options resource (raw options rows)
kitloom-wp-schema.nova.comments.registerComments
kitloom-site.nova.registerAppearance → Themes; Settings → Reading, Privacy and Cache
kitloom-modules.nova.registerModules
kitloom-permissions.nova.registerUsers → Roles
kitloom-media.nova.registerMedia, and its settings page
kitloom-media.nova.pickerPicking attachments in the media library
kitloom-navigation.nova.registerMenus
kitloom-widgets.nova.registerThe forms of kitloom/widgets' widget types
kitloom-custom-fields.nova.registerCustom Fields → Field Groups
kitloom-custom-fields.nova.form_sectionThe Custom Fields tab on forms
kitloom-post-types.nova.registerPost Types, Taxonomies
kitloom-seo.nova.registerThe SEO section
kitloom-seo.nova.settingsSEO settings pages
kitloom-seo.nova.form_sectionThe SEO tab on forms
kitloom-shortcodes.nova.registerSettings → Shortcodes
kitloom-redirects.nova.registerRedirects
kitloom-redirects.nova.menuOnly the Redirects sidebar section (resources stay)
kitloom-internal-links.nova.registerInternal Links (the link counts stay in the post lists)
kitloom-internal-links.nova.menuOnly the Internal Links sidebar section (resources stay)
kitloom-forms.nova.registerContact forms
kitloom-shop.nova.registerProducts, Shop
kitloom-payments.nova.registerPayments
kitloom-slider.nova.registerSliders
kitloom-search.nova.registerSearch
kitloom-search-replace.nova.registerSearch & Replace
kitloom-search-replace.nova.menuOnly its sidebar entry
kitloom-import-export.nova.registerImport & Export
kitloom-import-export.nova.menuOnly its sidebar entry
kitloom-admin-menu.nova.registerAdmin Menu
kitloom-api.nova.registerREST API
kitloom-ai.nova.registerAI agents
kitloom-two-factor.nova.registerTwo-Factor Authentication
kitloom-social-accounts.nova.registerSocial Login
kitloom-activity-log.nova.registerActivity Log
kitloom-backup.nova.registerBackups
kitloom-health.nova.registerSite Health
kitloom-horizon.nova.registerHorizon
kitloom-pulse.nova.registerPulse
kitloom-sentry.nova.registerSentry
kitloom-media-optimizer.nova.registerImage compression
kitloom-cookie-consent.nova.registerCookie Consent
kitloom-analytics.nova.registerAnalytics
kitloom-tag-manager.nova.registerTag Manager
kitloom-ad-pixels.nova.registerAd Pixels
kitloom-header-footer.nova.registerHeader & Footer
kitloom-ai-writer.nova.registerAI Writer
kitloom-admin-bar.nova.registerAdmin Bar, and where the admin bar's New and Edit lead in Nova
kitloom-bookings.nova.registerBookings
kitloom-comments.nova.registerSettings → Discussion, How it works next to Comments, and the links the moderation emails point at
kitloom-courses.nova.registerCourses
kitloom-languages.nova.registerLanguages, the Translations tab on post and term forms, and the Translations column, filter and "Translate with AI into…" in their lists
kitloom-link-checks.nova.registerLink Checker
kitloom-listings.nova.registerListings
kitloom-maintenance.nova.registerMaintenance
kitloom-privacy.nova.registerPrivacy
kitloom-webhooks.nova.registerWebhooks

Switch or deactivate?

A switch hides the admin of a module for good, in code. Deactivating a module on the Modules screen unloads the whole module — domain and admin — and is undone with one click.

Other switches ​

The same pattern turns off what a module adds outside the admin:

FamilyPackagesTurns off
kitloom-<name>.shortcodes.registercookie-consent, forms, languages, media, seo, shop, slider, social-accounts, widgetsThe module's shortcodes
kitloom-<name>.ai.registeractivity-log, backup, bookings, comments, courses, custom-fields, forms, health, import-export, languages, link-checks, listings, maintenance, media-optimizer, navigation, post-types, redirects, search, seo, shop, slider, webhooks, widgetsThe module's tools for AI agents
kitloom-<name>.routes.registerapi, bookings, comments, courses, forms, listings, payments, privacy, shopThe module's routes — for api, bookings, comments, courses, forms, listings and shop, its REST namespace
kitloom-ai.mcp.registeraiThe MCP server at /mcp
kitloom-site.rest.registersiteThe REST root and every namespace under it
kitloom-site.auth.routessitePOST /login and POST /logout
kitloom-two-factor.site.registertwo-factorThe code step of the site's own sign-in
kitloom-social-accounts.routessocial-accountsThe routes of sign-in with Google or GitHub
kitloom-shortcodes.pipeline.registershortcodesShortcodes on the site's content and the shortcodes page part
kitloom-shortcodes.widgets.registershortcodes[sidebar] and [widget]

kitloom — modules and themes for Laravel.
Pricing · Services · License · Refunds · Privacy · Community · [email protected]