PHPackages                             solution-forest/filament-goaccess - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. solution-forest/filament-goaccess

ActiveLibrary[Admin Panels](/categories/admin)

solution-forest/filament-goaccess
=================================

A Filament plugin that renders GoAccess web-log analytics as a native, live dashboard inside the Filament admin panel.

v1.0.0(today)10MITPHPPHP ^8.2CI passing

Since Jul 23Pushed todayCompare

[ Source](https://github.com/solutionforest/filament-goaccess)[ Packagist](https://packagist.org/packages/solution-forest/filament-goaccess)[ Docs](https://github.com/solutionforest/filament-goaccess)[ RSS](/packages/solution-forest-filament-goaccess/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

Filament GoAccess
=================

[](#filament-goaccess)

[![Latest Version on Packagist](https://camo.githubusercontent.com/76d401d952950fc7176393c61478ea834f6a2f588cb1ffe23a593ea94218f500/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f736f6c7574696f6e2d666f726573742f66696c616d656e742d676f6163636573732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/solution-forest/filament-goaccess)[![Tests](https://camo.githubusercontent.com/78020297074d245a8ccb75f08d653744b252dde581b1e37dee82ccc830b41f60/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f736f6c7574696f6e666f726573742f66696c616d656e742d676f6163636573732f74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/solutionforest/filament-goaccess/actions/workflows/tests.yml)[![Total Downloads](https://camo.githubusercontent.com/9997d43c6589bffe982e10d878af5ea40c8c2e317ba411f6b47a33ad5198917e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f736f6c7574696f6e2d666f726573742f66696c616d656e742d676f6163636573732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/solution-forest/filament-goaccess)

A standalone [Filament](https://filamentphp.com) plugin that turns [GoAccess](https://goaccess.io) web-log analytics into a **native, live dashboard** inside your admin panel — stat tiles, a traffic chart, a status-code breakdown, and ranked tables for requests, 404s, hosts, referrers, browsers and operating systems.

Instead of embedding GoAccess's own HTML report in an iframe, the plugin **parses GoAccess JSON and renders native Filament widgets**, so the dashboard matches your panel's theme and dark mode, and stays "live" through Livewire polling — no WebSocket server or reverse-proxy plumbing required.

- ✅ Native Filament widgets (Filament **v4 &amp; v5**)
- ✅ **Managed** mode (the plugin runs `goaccess` for you) or **external** mode (read a JSON file produced by any pipeline)
- ✅ **No application database** — GoAccess JSON is the source of truth (optional GoAccess incremental on-disk DB for persistence)
- ✅ **Date-range filter** (Today / 7d / 30d / All / custom) and **multi-site** switcher
- ✅ Live via Livewire polling — configurable interval

Screenshots
-----------

[](#screenshots)

LightDark[![GoAccess dashboard — light](art/dashboard-light.png)](art/dashboard-light.png)[![GoAccess dashboard — dark](art/dashboard-dark.png)](art/dashboard-dark.png)Stat tiles, a traffic-over-time chart, a status-code doughnut, and ranked tables — all native Filament components that follow your panel's theme. Rendered from the demo app in [`playground/`](playground/).

---

Requirements
------------

[](#requirements)

PHP`^8.2`Laravel`^11.0` or `^12.0`Filament`^4.0` or `^5.0`GoAccess binaryOnly for **managed** mode ([install docs](https://goaccess.io/download))---

Installing GoAccess
-------------------

[](#installing-goaccess)

Only needed for **managed** mode (skip it for external mode). GoAccess is a single native binary — install it from your OS package manager or [goaccess.io/download](https://goaccess.io/download).

OS / distroCommandUbuntu / Debian`sudo apt install goaccess`Fedora / RHEL / CentOS`sudo dnf install goaccess`Alpine`apk add goaccess`Arch`sudo pacman -S goaccess`macOS ([Homebrew](https://brew.sh))`brew install goaccess`Windowsvia [WSL](https://learn.microsoft.com/windows/wsl/install) + one of the above, or [Chocolatey](https://community.chocolatey.org/packages/goaccess): `choco install goaccess`Docker`docker run --rm allinurl/goaccess` ([image](https://hub.docker.com/r/allinurl/goaccess))> The distro packages are often older. For the **latest** release use the official APT repo or build from source — see [goaccess.io/download](https://goaccess.io/download) and the [get-started guide](https://goaccess.io/get-started).

Verify the install and note the path:

```
goaccess --version     # e.g. "GoAccess - 1.11."
command -v goaccess    # absolute path — set as GOACCESS_BINARY if not on PATH
```

- Docs: [goaccess.io](https://goaccess.io) · Man page: [goaccess.io/man](https://goaccess.io/man) · Source: [github.com/allinurl/goaccess](https://github.com/allinurl/goaccess)

---

Installation
------------

[](#installation)

```
composer require solution-forest/filament-goaccess
```

Publish the config file:

```
php artisan vendor:publish --tag="filament-goaccess-config"
```

Register the plugin on your panel (e.g. `app/Providers/Filament/AdminPanelProvider.php`):

```
use SolutionForest\FilamentGoAccess\GoAccessPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugin(GoAccessPlugin::make());
}
```

A **GoAccess** page now appears in the navigation (under the *Analytics* group by default).

---

Configuration
-------------

[](#configuration)

Everything lives in `config/filament-goaccess.php`. The most important choice is the **mode**.

### Mode 1 — Managed (recommended)

[](#mode-1--managed-recommended)

The plugin runs the `goaccess` binary for you and writes the JSON that the dashboard reads.

1. Install GoAccess on the server (`apt install goaccess`, `brew install goaccess`, …).
2. Point a site at your access log(s):

    ```
    'mode' => 'managed',

    'sites' => [
        'default' => [
            'label'     => 'My site',
            'log_paths' => ['/var/log/nginx/access.log'],
            'json_path' => storage_path('app/goaccess/default.json'),
            'db_path'   => storage_path('app/goaccess/default-db'),
            'log_format'=> 'COMBINED', // or null to inherit the global log_format
        ],
    ],
    ```
3. Generate the report — run it once to verify:

    ```
    php artisan goaccess:generate
    ```
4. Keep it fresh on a schedule (`routes/console.php` on Laravel 11/12):

    ```
    use Illuminate\Support\Facades\Schedule;

    Schedule::command('goaccess:generate')->everyMinute()->withoutOverlapping();
    ```

    With `'persist' => true` (default), GoAccess keeps a cumulative **on-disk database** (`--persist`/`--restore`), so totals survive log rotation without re-parsing the whole log every run.

### Mode 2 — External

[](#mode-2--external)

Some other pipeline (a cron job, a container sidecar, a CI step) produces the JSON; the plugin only reads it.

```
'mode' => 'external',

'sites' => [
    'default' => [
        'label'     => 'My site',
        'json_path' => storage_path('app/goaccess/default.json'),
    ],
],
```

Example external cron that writes the JSON the dashboard reads:

```
* * * * * goaccess /var/log/nginx/access.log \
    --log-format=COMBINED -o /path/to/storage/app/goaccess/default.json \
    --json-pretty-print --no-global-config
```

### Multiple sites

[](#multiple-sites)

Add more entries under `sites` — a **Site** dropdown appears automatically in the dashboard toolbar when more than one is configured. Picking a site live-swaps every widget (tiles, charts, tables) to that site's data; the date-range filter applies on top. With a single site the dropdown is hidden.

[![Multiple sites switcher](art/multisite.png)](art/multisite.png)

```
'sites' => [
    'marketing' => ['label' => 'Marketing', 'log_paths' => ['/var/log/nginx/marketing.log'], 'json_path' => storage_path('app/goaccess/marketing.json')],
    'app'       => ['label' => 'App',       'log_paths' => ['/var/log/nginx/app.log'],       'json_path' => storage_path('app/goaccess/app.json')],
],
```

Generate one site or all:

```
php artisan goaccess:generate app     # just the "app" site
php artisan goaccess:generate         # every site
```

### Other options

[](#other-options)

KeyDefaultPurpose`log_format``COMBINED`Any GoAccess predefined format (`VCOMBINED`, `COMMON`, `W3C`, `CLOUDFRONT`, `CADDY`, …) or a custom format string.`polling_interval``10s`How often widgets re-read the JSON. `null` disables polling.`default_range``7d`Initial dashboard window: `today` | `7d` | `30d` | `all`.`extra_args``['--no-global-config', '--ignore-crawlers']`Extra `goaccess` args applied to every site (managed mode).`persist``true`Use GoAccess's cumulative on-disk DB across runs.`navigation``group: Analytics`Navigation group / sort / icon. Overridable via the plugin (below).Override navigation per panel:

```
GoAccessPlugin::make()
    ->navigationGroup('Reports')
    ->navigationSort(20)
    ->navigationIcon('heroicon-o-globe-alt');
```

### GeoIP (optional)

[](#geoip-optional)

Add a MaxMind database via `extra_args` to enable GoAccess geolocation:

```
'extra_args' => ['--no-global-config', '--geoip-database=/usr/share/GeoIP/GeoLite2-City.mmdb'],
```

---

How the date filter works
-------------------------

[](#how-the-date-filter-works)

GoAccess JSON is a pre-aggregated snapshot, so the filter behaves in two layers:

- **Time-series &amp; summary tiles** are re-sliced instantly from the parsed JSON for the selected window (works in both modes).
- For **exact windowed tables** in managed mode you can regenerate a scoped report:

    ```
    php artisan goaccess:generate default --from=2024-01-01 --to=2024-01-31
    ```

---

Troubleshooting
---------------

[](#troubleshooting)

SymptomFixWidgets say *"No data — run `goaccess:generate`"*The `json_path` file doesn't exist yet. Run the command (managed) or check your pipeline (external).`goaccess: command not found`Install the GoAccess binary, or set `GOACCESS_BINARY` / `binary` to its absolute path.Empty / wrong numbersYour `log_format` doesn't match the log. Try the matching preset (`VCOMBINED`, `CLOUDFRONT`, …) or a custom format.404 tile shows 0GoAccess 1.11 omits `not_found` from the general panel; the plugin derives it from the *Not Found* panel automatically — make sure your log actually has 404s.---

Testing / Contributing
----------------------

[](#testing--contributing)

The suite is Pest + Orchestra Testbench. Logic, parsing, the filter, and empty-state handling run without any binary; one integration test exercises the **real** `goaccess` binary (skipped automatically when it isn't installed).

```
composer install
composer test
```

### Docker (real goaccess, no host install)

[](#docker-real-goaccess-no-host-install)

A ready-made image bundles PHP 8.3 + the `goaccess` binary, so the managed-mode integration test runs against a real binary without installing anything on your host:

```
docker compose build
docker compose run --rm tests            # composer install + full Pest suite (incl. real goaccess)
docker compose run --rm tests bash       # shell in to poke around
```

This runs the **package test suite**, not a full Laravel app. To see the dashboard in a browser, use the demo app in [`playground/`](playground/).

---

Credits
-------

[](#credits)

- [Solution Forest](https://github.com/solutionforest)
- Built on the excellent [GoAccess](https://goaccess.io) by Gerardo Orellana.

License
-------

[](#license)

The MIT License (MIT). See [LICENSE.md](LICENSE.md).

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/68211796?v=4)[Solution Forest](/maintainers/solutionforest)[@solutionforest](https://github.com/solutionforest)

---

Top Contributors

[![solutionforestteam](https://avatars.githubusercontent.com/u/53035878?v=4)](https://github.com/solutionforestteam "solutionforestteam (4 commits)")

---

Tags

laraveldashboardanalyticsfilamentSolution Forestgoaccessweb-log

###  Code Quality

TestsPest

Static AnalysisPHPStan

### Embed Badge

![Health badge](/badges/solution-forest-filament-goaccess/health.svg)

```
[![Health](https://phpackages.com/badges/solution-forest-filament-goaccess/health.svg)](https://phpackages.com/packages/solution-forest-filament-goaccess)
```

###  Alternatives

[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.8k](/packages/rawilk-profile-filament-plugin)[stephenjude/filament-jetstream

A Laravel starter kit built with Filament inspired by Jetstream.

17760.2k3](/packages/stephenjude-filament-jetstream)[croustibat/filament-jobs-monitor

Background Jobs monitoring like Horizon for all drivers for FilamentPHP

274333.4k9](/packages/croustibat-filament-jobs-monitor)[stephenjude/filament-debugger

About

104162.2k2](/packages/stephenjude-filament-debugger)[mradder/filament-logger

Audit logging, activity tracking, exports, alerts, and dashboards for Filament admin panels.

2318.8k](/packages/mradder-filament-logger)[finity-labs/fin-mail

A powerful email template manager and composer for Filament with dynamic token replacement, template versioning, and inline email sending.

284.8k2](/packages/finity-labs-fin-mail)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
