OpenSparrow v3.3 is a stabilityâfocused and deploymentâfocused release that brings realâworld operational visibility, a productionâreadiness checklist, and a full hardening pass across environment variables and configuration defaults.
This update introduces an optional Click Statistics module, expands the Admin Health Check into a proper productionâreadiness validator, and tightens deployment settings for anyone running OpenSparrow outside a local dev box. Below is a detailed breakdown of what changed, why it matters, and how it improves dayâtoâday operations.
Click Statistics
A new optional module â off by default, and off genuinely means off.
When the module disabled, no collector script is emitted, nothing is downloaded, and the endpoint returns 204 without writing even if a page stays open across a toggleâoff.
- Records who clicked what, when, on which page, and optionally the table/record in context (âRecord Table And Recordâ can be turned off to keep entries to just user/time/element)
- Log tab: recent clicks newestâfirst, filterable by element and user, with a Top Elements rollup of the 20 mostâclicked elements
- Retention: âDelete Automatically After N daysâ (default 90,
0 = keep forever) enforced by the notifications cron so the table doesnât grow unbounded
Admin Health Check: Production Readiness tab
Health Check now includes a dedicated tab answering is this deployment actually productionâready? instead of just âis the database reachable.
It validates:
APP_ENV- demo mode being off
- secure cookies
- HTTPS (including behind reverse proxies via
X-Forwarded-Proto/CF-Visitor) -
display_errorsoff - Argon2id availability
- minimum password length of 12
- API rate limiting configuration
SESSION_SAMESITE- trustedâproxyâheader configuration
Existing checks were refreshed as well â minimum supported PHP version now correctly requires 8.4, matching the rest of the codebase.
Deployment hardening
A broad pass through .env.example and includes/config.php:
- every environment variable is now documented
- numeric config values are clamped to sane ranges
-
APP_TIMEZONEandSESSION_SAMESITEare validated instead of trusted blindly - new settings cover:
APP_URL,STORAGE_PATH,SESSION_COOKIE_NAME,DB_SSLMODE, API rate limiting, statement/SMTP/HTTP client timeouts, session idle timeout, Argon2 tuning, and a trustedâproxy IP list
Additional hardening:
- API throttle now fails open (instead of blocking all requests) if its state store becomes unwritable
- libpq connectionâinfo values are quoted
- CSP report URI restricted to sameâorigin
Also in this release
- Optional first name, last name, email, and phone fields on admin user accounts (informational only â not used for login, ownership, or notifications)
- Logo and favicon refreshed; login/admin brand text sized down to match
- Large internal cleanup:
PHP/JS variable names expanded from abbreviations to full words,
public API endpoints moved behind typed controllers (
App\Controller), anddie()/exit()replaced with a typed exception hierarchy â no behavior change, but relevant if you track the codebase



Top comments (0)