PHPackages                             brynforum/top-posters - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. brynforum/top-posters

ActiveFlarum-extension[Utility &amp; Helpers](/categories/utility)

brynforum/top-posters
=====================

Top posters widget for Flarum: shows the most active members of the past month and all time, on the forum index. Mobile-responsive (collapsed accordion on small screens, expanded on desktop). Configurable list lengths and headings.

v0.1.3(1w ago)014↑150%MITJavaScriptCI passing

Since May 16Pushed 1w agoCompare

[ Source](https://github.com/BrynForum/flarum-ext-top-posters)[ Packagist](https://packagist.org/packages/brynforum/top-posters)[ RSS](/packages/brynforum-top-posters/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (2)Versions (6)Used By (0)

brynforum/top-posters
=====================

[](#brynforumtop-posters)

[![Latest Version on Packagist](https://camo.githubusercontent.com/f663bee59e34febdddef010322dc3955fce8240fc6e5e5a7d2143d34a23350da/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6272796e666f72756d2f746f702d706f73746572732e7376673f63616368655365636f6e64733d33363030)](https://packagist.org/packages/brynforum/top-posters)[![Total Downloads](https://camo.githubusercontent.com/714eeb75bb023bccc98365b02542cf349aa738a6446d2e6403afbff92594bafe/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6272796e666f72756d2f746f702d706f73746572732e7376673f63616368655365636f6e64733d33363030)](https://packagist.org/packages/brynforum/top-posters)[![License](https://camo.githubusercontent.com/a36931a6c86421a1915e0b8486b77842aeed00f1999ca5f30aaf239d67d1c00c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6272796e666f72756d2f746f702d706f73746572732e7376673f63616368655365636f6e64733d33363030)](LICENSE)

A [Flarum](https://flarum.org) extension that adds **top-posters leaderboards** to the forum index. Shows the most active members of the past month and all time, side-by-side on desktop, stacked-and-collapsible on mobile.

Built and used in production by [BrynForum](https://brynforum.com).

Features
--------

[](#features)

- **Two leaderboards**: "This Month" (last 30 days) and "All Time". Each can be hidden independently.
- **Configurable list length** per leaderboard (1 – 50).
- **Editable headings** — translate or rebrand without touching code.
- **Exclude staff** — checkbox to drop administrators and/or moderators from the rankings.
- **Mobile-first**: collapses to a tap-to-expand summary on phones, fully visible on tablets/desktops. Pure CSS — no `window.resize` listener needed.
- **Cache-friendly**: public, `GET`-only endpoint with no per-user data. Pair with [brynforum/api-cache](https://github.com/brynforum/flarum-ext-api-cache) for one DB query per TTL window instead of per page-load.

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

[](#installation)

```
composer require brynforum/top-posters
```

Enable **Top Posters** under Admin → Extensions.

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

[](#configuration)

Admin → Top Posters:

SettingDefaultNotesShow "This Month" boardonHide the monthly leaderboard.Show "All Time" boardonHide the all-time leaderboard."This Month" list length101 – 50."All Time" list length101 – 50."This Month" heading`Top Posters This Month`"All Time" heading`Top Posters of All Time`Exclude administratorsoffHides users in the built-in Administrators group.Exclude moderatorsoffHides users in any group that holds the `discussion.hidePosts` permission.The "Exclude moderators" check uses a permission, not a group name — so it works the same regardless of whether a forum's mod group is called Mods, Staff, Editors, etc.

API
---

[](#api)

`GET /api/brynforum/top-posters?period=month&limit=10``GET /api/brynforum/top-posters?period=all&limit=10`

Public, no auth. Returns:

```
{
  "period": "month",
  "data": [
    {
      "userId": 7,
      "username": "alice",
      "displayName": "Alice",
      "avatarUrl": "https://forum.example.com/assets/avatars/abc.png",
      "postCount": 142
    }
  ]
}
```

The query excludes:

- private posts (`is_private = 1`)
- hidden posts (`hidden_at IS NOT NULL`)
- unapproved posts (`is_approved = 0`)
- spam-flagged posts (`is_spam = 1`)
- post types other than `comment` (so discussion-renames etc. don't inflate)

Ties on `post_count` break by username ascending (case-insensitive), so the order is stable across requests.

Recommended cache rule
----------------------

[](#recommended-cache-rule)

If you also run [brynforum/api-cache](https://github.com/brynforum/flarum-ext-api-cache), add:

FieldValuePath pattern`#^/api/brynforum/top-posters$#`TTL`600` (10 minutes — sensible default)Scope`public`That collapses the leaderboard SQL to once per ten minutes regardless of how many widget renders hit the endpoint.

Mobile responsiveness
---------------------

[](#mobile-responsiveness)

The two cards render in a flex row on desktop (&gt;= 768 px) and stack on mobile. On mobile, the body of each card is hidden behind a tap-to-expand header. The state is purely CSS-driven, so resizing a desktop window down behaves correctly without a JS resize listener.

Replacing afrux/top-posters-widget
----------------------------------

[](#replacing-afruxtop-posters-widget)

This extension is intentionally similar in purpose to [afrux/top-posters-widget](https://github.com/afrux/top-posters-widget). The differences:

afruxbrynforumLayoutRight-side widget area (needs `afrux/forum-widgets-core`)Inline above discussion listMobileHidden inside the widget panelAccordion, always visible above the foldPeriodsThis Month onlyThis Month + All Time (each toggleable)Configurable list lengthNoYes (1 – 50, per board)Staff exclusionYesYesDependencies`afrux/forum-widgets-core`Flarum core onlyIf you switch from afrux, disable the old widget first to avoid duplicate boards.

Contributing
------------

[](#contributing)

Issues and PRs welcome. Keep changes small and focused; file an issue before any large PR.

License
-------

[](#license)

[MIT](LICENSE) © BrynForum

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance98

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity27

Early-stage or recently created project

 Bus Factor1

Top contributor holds 75% 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

Every ~5 days

Total

4

Last Release

8d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7a2a5ea12a797d7e1b0f38c0eb603b6f50c22564951bf9172baa0afcbdc05615?d=identicon)[wimdows-nl](/maintainers/wimdows-nl)

---

Top Contributors

[![wimdows-nl](https://avatars.githubusercontent.com/u/24444562?v=4)](https://github.com/wimdows-nl "wimdows-nl (9 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (3 commits)")

### Embed Badge

![Health badge](/badges/brynforum-top-posters/health.svg)

```
[![Health](https://phpackages.com/badges/brynforum-top-posters/health.svg)](https://phpackages.com/packages/brynforum-top-posters)
```

###  Alternatives

[flarum-lang/russian

Russian language pack for Flarum.

12127.5k](/packages/flarum-lang-russian)[fof/byobu

Well integrated, advanced private discussions.

61112.4k10](/packages/fof-byobu)[flarum/tags

Organize discussions into a hierarchy of tags and categories.

38744.9k133](/packages/flarum-tags)[fof/gamification

Upvotes and downvotes for your Flarum community

4162.0k6](/packages/fof-gamification)[fof/polls

 A Flarum extension that adds polls to your discussions

25130.2k9](/packages/fof-polls)[michaelbelgium/flarum-discussion-views

Add views to flarum discussions

3155.4k6](/packages/michaelbelgium-flarum-discussion-views)

PHPackages © 2026

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