vskstudio / takt-laravel
Laravel integration for Takt analytics: @takt Blade directive + Takt facade for server-side events.
Requires
- php: >=8.1
- guzzlehttp/guzzle: ^7.8
- illuminate/support: ^10.0 || ^11.0 || ^12.0
- vskstudio/takt-core-php: ^0.5.0
Requires (Dev)
- laravel/pint: ^1.16
- orchestra/testbench: ^8.0 || ^9.0 || ^10.0
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5 || ^11.5 || ^12.0
README
Laravel integration for Takt analytics. Drop a single @takt
Blade directive in your layout for privacy-friendly client-side tracking, and use the Takt
facade to send server-side events straight from your application code.
Requirements
- PHP 8.1+
- Laravel 10, 11, or 12
Installation
composer require vskstudio/takt-laravel
The service provider and the Takt facade are registered automatically through Laravel package
auto-discovery. There is nothing else to wire up.
Configuration
The package ships with sane defaults and reads everything from your environment. To customise the published config file:
php artisan vendor:publish --tag=takt-config
This writes config/takt.php. All values are environment-driven:
| Env variable | Default | Description |
|---|---|---|
TAKT_DOMAIN |
'' |
The site/domain registered in Takt that data is attributed to. |
TAKT_ENDPOINT |
https://taktlytics.com |
Base URL of your Takt ingest endpoint. Defaults to the hosted Takt origin. |
TAKT_SCRIPT_ORIGIN |
null |
First-party origin to serve the tracker + derive the endpoint from ({origin}/api/event) — a custom domain you proxy through to dodge ad-blockers (endpoint wins over it). |
TAKT_API_KEY |
null |
Ingest-scoped API key used for server-side events (see below). |
TAKT_MODE |
inline |
Snippet delivery mode: inline, cdn, asset, or sdk (full ES-module init(), required for TAKT_SCRUB_URL). |
TAKT_OUTBOUND |
false |
Track clicks on outbound links. |
TAKT_FILES |
false |
Track file download clicks. |
TAKT_FILE_EXTENSIONS |
'' |
Comma-separated extensions to count as downloads (e.g. pdf,zip,docx). Empty keeps the tracker's default list. |
TAKT_TAGGED |
false |
Track elements tagged in HTML with data-takt-event. |
TAKT_NOT_FOUND |
false |
Track 404 pageviews. |
TAKT_EXCLUDE_LOCALHOST |
true |
Skip tracking when running on localhost. |
TAKT_NONCE |
null |
CSP nonce for the inline <script> (request-scoped — see config notes). |
TAKT_SAMPLE_RATE |
null |
Sample a fraction of hits, e.g. 0.5 keeps ~50%. Unset tracks everything. |
TAKT_TRACK_QUERY |
null |
Keep the raw query string + hash in tracked URLs (default strips them). |
TAKT_QUERY_PARAMS |
'' |
Comma-separated query params to keep when TAKT_TRACK_QUERY is off (e.g. utm_source,utm_medium). |
TAKT_EXCLUDE |
'' |
Comma-separated path prefixes never tracked (e.g. /app,/account). Requires TAKT_MODE=sdk; segment-bounded. |
TAKT_RESPECT_DNT |
null |
Set to false to stop honoring the browser Do-Not-Track header. |
TAKT_ENABLED |
null |
Kill-switch: set to false to disable tracking entirely. |
TAKT_SCRUB_URL |
null |
Raw JS function to rewrite URLs before sending, e.g. (u) => u.split('#')[0]. Requires TAKT_MODE=sdk and is dev-controlled only — it is injected verbatim into the page; never build it from user input. |
Example .env:
TAKT_DOMAIN=example.com TAKT_ENDPOINT=https://ingest.takt.io TAKT_API_KEY=ingest_xxxxxxxxxxxxxxxx TAKT_MODE=inline
Client-side tracking
Add the @takt directive to the <head> of your layout:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> @takt </head> <body> @yield('content') </body> </html>
Delivery modes
TAKT_MODE controls how the tracking script is delivered:
inline(default) — the script is embedded directly in the rendered HTML. Zero extra network requests, nothing to host.cdn— references the script from the Takt CDN.asset— references a self-hosted copy of the script served from your own application.sdk— loads the full SDK as an ES module and boots it withinit(). Required forTAKT_SCRUB_URL(custom URL rewriting), which cannot be expressed as a data attribute.
Server-side events
Use the Takt facade to record events from controllers, jobs, or anywhere in your application:
use Vskstudio\Takt\Laravel\Facades\Takt; use Vskstudio\Takt\Revenue; // A custom event with properties and revenue Takt::event('Signup', ['plan' => 'pro'], new Revenue('29.00', 'EUR')); // A simple pageview Takt::pageview();
Server-side events automatically attribute to the current request's IP address and User-Agent, so they are correlated with the visitor that triggered them. You can optionally pass an explicit URL as the last argument to either method.
API key scope:
TAKT_API_KEYmust be an ingest-scoped key bound to the configuredTAKT_DOMAIN. Keep it server-side only — it is never exposed to the browser.
License
MIT. See LICENSE.