Skip to content

Configuration

Ignite is configured entirely through environment variables, read from a .env file (copied from .env.example, see Installation). This page is a grouped reference of the variables that matter for running the app.

Core

VariableWhat it doesDefault / example
APP_NAMEDisplay name for the app, used in mail, page titles, and vite build.Ignite
APP_ENVRuntime environment (local, production, etc).local
APP_KEYEncryption key used for sessions, cookies, and encrypted data. Generate with php artisan key:generate.empty until generated
APP_URLBase URL the app is served from.http://localhost
APP_LOCALEDefault application locale.en
APP_FALLBACK_LOCALELocale used when a translation is missing for APP_LOCALE.en

Database

VariableWhat it doesDefault / example
DB_CONNECTIONDatabase driver Laravel connects with.pgsql
DB_HOSTDatabase host.127.0.0.1
DB_PORTDatabase port.5432
DB_DATABASEDatabase name.ignite
DB_USERNAMEDatabase user.postgres
DB_PASSWORDDatabase password.secret

PostgreSQL is the app's default database, both locally and in production. SQLite is used only by the automated test suite, not for local development.

Session, cache, and queue

VariableWhat it doesDefault / example
SESSION_DRIVERWhere session data is stored.database
CACHE_STOREWhere cached data is stored.database
QUEUE_CONNECTIONHow queued jobs are dispatched and processed.database

Locally, queued jobs are stored in the jobs database table and processed by a worker, php artisan queue:listen (part of composer dev, see Installation). Production overrides QUEUE_CONNECTION to sync, which runs queued jobs immediately, in-request, so a minimal deployment doesn't need a separate worker process.

Mail

VariableWhat it doesDefault / example
MAIL_MAILERMail transport driver.log
MAIL_HOSTSMTP host (only used by SMTP-based mailers).127.0.0.1
MAIL_PORTSMTP port.2525
MAIL_SCHEMEConnection scheme for the SMTP mailer: smtp for STARTTLS (port 587), smtps for implicit TLS (port 465). Leave unset to let Symfony infer it from the port.null
MAIL_USERNAMESMTP username.null
MAIL_PASSWORDSMTP password.null
MAIL_FROM_ADDRESSFrom address on outgoing mail.hello@example.com
MAIL_FROM_NAMEFrom name on outgoing mail.${APP_NAME}
MAIL_REPLY_TOAddress applied as Reply-To on every outgoing message, so replies reach a monitored inbox instead of the no-reply From address. Leave unset to send no Reply-To header.unset by default
MAIL_TIMEOUTSeconds the SMTP mailer waits on a stalled connection before giving up. Unset means PHP's own default_socket_timeout applies, which is usually 60.null

In development, MAIL_MAILER=log writes outgoing mail to storage/logs/laravel.log instead of sending it, so no SMTP credentials are required to try the app locally.

MAIL_ENCRYPTION does nothing on this version of Laravel. It was replaced by MAIL_SCHEME, and many provider guides still show the old variable. Setting it is silently ignored.

Ignite only sends two emails, both tied to authentication: email verification and password reset. Both are queued notifications, which matters if QUEUE_CONNECTION is not sync. See Self-Hosting for the consequences.

Set MAIL_TIMEOUT to something short, around 10 seconds, whenever QUEUE_CONNECTION=sync. Mail is then sent inside the web request, so an unresponsive SMTP server would otherwise hold a registration or password-reset request open for the full socket timeout.

Sending real email

Ignite uses Laravel's stock mailers and ships no mail-provider package, so any SMTP service works with the standard variables:

ini
MAIL_MAILER=smtp
MAIL_HOST=smtp.your-provider.example
MAIL_PORT=587
MAIL_SCHEME=smtp
MAIL_USERNAME=your-username
MAIL_PASSWORD=your-password
MAIL_FROM_ADDRESS=no-reply@your-domain
MAIL_REPLY_TO=contact@your-domain

Most transactional providers issue an API key that doubles as the SMTP password, and require the MAIL_FROM_ADDRESS domain to be verified in their dashboard before they will accept mail. Check your provider's own SMTP guide for the host, port, and username to use.

When SMTP is blocked

Many hosting platforms block outbound SMTP on their lower tiers to protect their IP reputation from abuse, usually on every port at once (25, 465, 587 and 2525). The symptom is a connection timeout rather than an authentication error, and the same credentials work fine from your laptop.

The fix is to send over an HTTPS API instead of SMTP, since port 443 is never blocked. Laravel ships transports for several providers; resend/resend-php is included as a dependency, so that one needs no extra install:

ini
MAIL_MAILER=resend
RESEND_KEY=your-api-key

MAIL_FROM_ADDRESS, MAIL_FROM_NAME and MAIL_REPLY_TO still apply. The MAIL_HOST, MAIL_PORT, MAIL_SCHEME, MAIL_USERNAME, MAIL_PASSWORD and MAIL_TIMEOUT variables configure the SMTP mailer only and are ignored. An HTTPS call is also a single round trip rather than SMTP's several, which is worth having when mail is sent inside the request on a sync queue.

Logging

VariableWhat it doesDefault / example
LOG_CHANNELChannel used for all application logging.stack
LOG_STACKChannels the stack channel writes to.daily
LOG_LEVELMinimum severity that gets recorded.debug

The default writes rotating files under storage/logs, which suits a VPS or bare-metal install.

On any container platform, set LOG_CHANNEL=stderr instead. Railway, Docker, Fly, Render and Kubernetes all collect logs from the container's standard output and standard error, and none of them read files out of the filesystem. Left on the file default, logs are invisible to the platform's log viewer and are discarded whenever the container is replaced, which happens on every deploy.

This matters more than it looks. When an email fails to send, Ignite deliberately keeps the request working and records the failure in the log instead of surfacing an error, so that log line is the only evidence the failure happened.

Feature gates

VariableWhat it doesDefault / example
VERIFY_EMAILToggles the email-verification wall on registration and login. Production runs with it enabled.false in .env.example for local dev; the app's own config default is true when unset, so production keeps verification enforced unless explicitly disabled. Requires working mail, since it gates every authenticated route. See the authentication feature page.
FORMBRICKS_WORKSPACE_IDWorkspace ID for the Formbricks feedback survey integration.unset by default (feature disabled)
FORMBRICKS_APP_URLBase URL of the Formbricks instance.https://app.formbricks.com
FORMBRICKS_WEBHOOK_SECRETSecret used to verify incoming Formbricks webhooks.unset by default
DISCORD_OPS_ENABLEDToggles sending operational notifications to a Discord webhook.false
DISCORD_OPS_WEBHOOK_URLDiscord webhook URL that receives operational notifications when enabled.unset by default
MCP_LOCAL_USEREmail address of the user the MCP server acts as over the local stdio transport. Leave unset to expose no tools over stdio; the HTTP transport is unaffected either way.unset by default. See the MCP server feature page

Each of these gates a feature that is off by default until its variable is set. See the corresponding feature page for setup details on the Formbricks survey and Discord operational notifications.

Source-available under the FSL-1.1-MIT license. Sponsoring is optional and supports development.