PHPackages                             zeropingheroes/lanager - 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. zeropingheroes/lanager

ActiveProject[Utility &amp; Helpers](/categories/utility)

zeropingheroes/lanager
======================

A LAN party management web application

v1.4.1(2mo ago)13210832[3 issues](https://github.com/zeropingheroes/lanager/issues)AGPL-3.0-onlyPHPCI passing

Since Nov 3Pushed 3w ago15 watchersCompare

[ Source](https://github.com/zeropingheroes/lanager)[ Packagist](https://packagist.org/packages/zeropingheroes/lanager)[ RSS](/packages/zeropingheroes-lanager/feed)WikiDiscussions stable Synced 2w ago

READMEChangelog (10)Dependencies (42)Versions (34)Used By (0)

LANager
=======

[](#lanager)

Stable BranchDevelop Branch[![Browser Tests](https://github.com/zeropingheroes/lanager/actions/workflows/browser-tests.yml/badge.svg?branch=stable)](https://github.com/zeropingheroes/lanager/actions/workflows/browser-tests.yml)[![Browser Tests](https://github.com/zeropingheroes/lanager/actions/workflows/browser-tests.yml/badge.svg?branch=develop)](https://github.com/zeropingheroes/lanager/actions/workflows/browser-tests.yml)LANager is a web application designed to make [LAN parties](https://en.wikipedia.org/wiki/Lan_party)more enjoyable for attendees and organisers alike.

Features
--------

[](#features)

### Encourage socialising &amp; participation

[](#encourage-socialising--participation)

- **Games being played** - by your LAN's attendees, updated every minute from Steam
- **Events timetable** - so your attendees know what's on at the LAN
- **Achievements** - created by you and awarded to attendees
- **Attendee profiles** - with a link to their Steam profile, and their gameplay history at the LAN
- **Games in common** - when viewing another attendee's profile
- **Games recently played** - showing the top games most recently played by attendees at the LAN

### Broadcast useful information

[](#broadcast-useful-information)

- **Slides** - showing games attendees are currently playing, and current and upcoming events, for TVs or projectors around your venue
- **Guides** - written by you, to help attendees learn about things like venue facilities, rules, or gameplay guides
- **Links** - to other websites, such as your organisation's website, or a game statistics page

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

[](#requirements)

- Internet access
- [Docker Compose](https://docs.docker.com/compose/install/)

Setup
-----

[](#setup)

1. Clone the `lanager-docker-compose` project:

    ```
    git clone https://github.com/zeropingheroes/lanager-docker-compose
    ```
2. Copy `.env.example` to a new file named `.env`:

    ```
    cd lanager-docker-compose
    cp .env.example .env
    ```
3. Generate and copy a new application key:

    ```
    docker run --rm --entrypoint php -w /app zeropingheroes/lanager:stable artisan key:generate --show
    ```
4. Open the environment configuration file in a text editor:

    ```
    nano .env
    ```
5. Set the following configuration items:

    Environment variableSet to`APP_KEY`The application key you generated above`APP_URL`The URL you will access LANager through, without a trailing slash`APP_TIMEZONE`Your location's [timezone](https://wikipedia.org/wiki/List_of_tz_database_time_zones#List)`STEAM_API_KEY`Your [Steam API Key](http://steamcommunity.com/dev/apikey)`DB_PASSWORD`A randomly generated password`DB_ROOT_PASSWORD`A different randomly generated passwordIf you will LANager behind a reverse proxy, set `TRUSTED_PROXIES` to the IP ranges used by Docker, typically: `172.16.0.0/12,192.168.0.0/16`
6. Bring up the application:

    ```
    docker compose up --detach --wait
    ```
7. Initialise the database:

    ```
    ./initialise-database.sh
    ```

LANager should now be accessible at , or at the URL you specified in `APP_URL`, providing you've created a corresponding DNS `A` record for the Docker host's IP address, and allowed ports `80` and `443` through the Docker host's firewall.

Update
------

[](#update)

1. Enter the `lanager-docker-compose` repository:

    ```
    cd lanager-docker-compose
    ```
2. Back up your data:

    ```
    ./backup.sh
    ```
3. Get the latest version of the Docker compose files and scripts:

    ```
    git pull
    ```
4. Run the update script:

    ```
    ./update.sh
    ```

### Update from 1.3.1 to 2.x

[](#update-from-131-to-2x)

1. Follow the steps from the **Update** section above
2. Run `./fix-permissions.sh` to fix permissions on the `storage` directory
3. Run `docker exec -it lanager php artisan lanager:update-steam-apps`
4. Run `docker exec -it lanager php artisan lanager:update-steam-user-apps`
5. Run `docker exec -it lanager php artisan lanager:update-steam-user-app-images`

Getting started
---------------

[](#getting-started)

To set up the LANager for your next LAN party, you need to create a LAN page, then add Events (such as scheduled games or lunch breaks) and Guides (such as game rules) to that LAN page.

### Become a Super Admin

[](#become-a-super-admin)

The LANager assigns the "Super Admin" role to the first account that logs into it, so make sure you log in as soon as you have completed installation.

Super Admins can perform any action on the site, including assigning roles to other users.

### Create your LAN page

[](#create-your-lan-page)

The first thing you need to do is to create a LAN page in the LANager. This process is the same whether your LAN party is one day or multiple days. You need to do this before you can create an event schedule, publish any guides or award achievements.

Log into the LANager, and go to ⚙ &gt; **LANs**, then select the **+** button to go to the LAN page creation form. Enter your LAN's details, and add a description with [Markdown formatting](https://en.wikipedia.org/wiki/Markdown#Example)if you want to.

The LANager automatically adds anyone who logs into the LANager during the LAN party to the LAN's list of attendees. For each attendee it displays the current LAN page, which contains the LAN's timetabled events, guides and attendees list.

### Create Events &amp; Guides

[](#create-events--guides)

Once you have a LAN page for your LAN party, you can create Events and Guides to help attendees enjoy your party.

- **Events** are a useful way to timetable game tournaments, highlight big game sessions, schedule breaks and mealtimes, and let people know when it's time to go home
- **Guides** are a useful way to provide people with the rules and download links to the games you're playing, to let them know where the nearest shops and restaurants are, to provide a code of conduct for your event, and to communicate any other information you think your guests might need.

From the LAN page, select the **+** button next to the **Events** and **Guides** headings to go to their creation forms.

#### Using links

[](#using-links)

You can use markdown-formatted links in LANs, guides and events. For example, you can write a single guide, and insert a link to it on several event pages:

```
If you need any help, please contact one of our [tournament staff](/lans/4/guides/3)

```

Where possible, it's good practice to use relative links as demonstrated above, so that if you change your domain, the links continue to work.

#### Using images

[](#using-images)

You can upload images to LAN pages, Events and Guides. To do this, follow these steps:

1. Below the **Description** text box, select **Upload images**.
2. Upload the image you want to use.
3. Next to the image, select ⚙ &gt; **Copy Markdown**
4. Paste the Markdown into the guide, event or LAN's **description** field, in the location you want it to appear in the text.

### Display slides

[](#display-slides)

The slides feature allows you to display a looping slideshow of live data and useful info for your attendees, such as which event is starting next, which games people are playing, and how to log into the LANager.

To display the slideshow, log in as an admin, and navigate to ⚙ &gt; **LANs** &gt; *(your LAN)* &gt; **Slides**.

Load the slideshow on a big TV or projector so that attendees can see the info easily.

### Create and award Achievements

[](#create-and-award-achievements)

Select ⚙ &gt; **Achievements** and then select the **+** button to create achievements that you can award to users.

To award an Achievement to an attendee, go to the navigation bar and select **Achievements**. This opens the list of Achievements you have awarded to attendees of the current LAN. At the bottom of the page, choose the Achievement and the attendee to award it to, then select **Award**.

### Customise the navigation bar

[](#customise-the-navigation-bar)

Select ⚙ &gt; **Navigation** to customise the links shown on the navigation bar. You can link to pages on the LANager or to third-party sites, organise the links into drop-down menus, and choose the order that the links appear in the navbar or dropdown.

Backup
------

[](#backup)

Run `./backup.sh` to back up LANager's configuration, database data and uploaded images.

### Restore a backup

[](#restore-a-backup)

Run `./backup-restore.sh ` to restore a backup.

Development
-----------

[](#development)

### Development environment setup

[](#development-environment-setup)

1. Follow the steps from the *Setup* section above
2. Stop the running containers

    ```
    docker compose down
    ```
3. Check out the development branch of `lanager-docker-compose`

    ```
    cd lanager-docker-compose
    git checkout develop
    ```
4. Edit `lanager-docker-compose/.env` and add the following lines:

    ```
    APP_ENV=local
    APP_DEBUG=true
    ```
5. In a directory outside of `lanager-docker-compose`, clone the `lanager` repository:

    ```
    git clone --branch develop https://github.com/zeropingheroes/lanager
    ```
6. Install [`composer`](https://getcomposer.org/download/) on your host computer
7. From the `lanager` directory, install composer dependencies:

    ```
    composer install --no-scripts
    ```
8. Set an environment variable with the path to where you cloned the `lanager` repository (without a trailing slash)

    ```
    export PATH_TO_LANAGER=/path/to/lanager
    ```
9. From the `lanager-docker-compose` directory, run `envsubst` to substitute in the path to lanager into the override compose file:

    ```
    envsubst  compose.override.yaml
    ```
10. Set the correct permissions for the `storage` and `bootstrap/cache` directories:

    ```
    chmod -R 777 "$PATH_TO_LANAGER/storage" "$PATH_TO_LANAGER/bootstrap/cache"
    ```
11. Create a symbolic link from the app storage directory into the public directory:

    ```
    ln -s "$PATH_TO_LANAGER/storage/app/public" "$PATH_TO_LANAGER/public/storage"
    ```
12. From the LANager application directory, use `nodejs` to build the static assets:

    ```
    docker run -it --rm --name npm-build -v "$PWD":/usr/src/app -w /usr/src/app node:22 npm clean-install
    docker run -it --rm --name npm-build -v "$PWD":/usr/src/app -w /usr/src/app node:22 npm cache clean --force
    docker run -it --rm --name npm-build -v "$PWD":/usr/src/app -w /usr/src/app node:22 npm run build
    ```
13. Start the containers

    ```
    docker compose up --detach
    ```
14. After a minute or so, visit `http://localhost:8080`

The container will run the code from your host computer, rather than the static copy of the code in the container's image. Any changes you make to the files in the project directory (except for the `storage/` directory) will be seen by the running containers.

### Start and stop the development environment

[](#start-and-stop-the-development-environment)

To stop the development environment run `docker compose stop`.

When you're ready to start developing again run `docker compose start`.

### Destroy the development environment

[](#destroy-the-development-environment)

To destroy the development environment and all volumes that store lanager data, run:

```
docker compose down --volumes
```

Follow the setup steps above to get a fresh development environment.

### Recompiling JavaScript &amp; CSS assets

[](#recompiling-javascript--css-assets)

To recompile JavaScript &amp; CSS assets, from the `lanager` directory, run:

1. `docker run -it --rm -v "$PWD":/var/www/html -w /var/www/html node:14-alpine npm install`
2. `docker run -it --rm -v "$PWD":/var/www/html -w /var/www/html node:14-alpine npm run dev`

To recompile whenever changes to files are detected, run:

1. `docker run -it --rm -v "$PWD":/var/www/html -w /var/www/html node:14-alpine npm run watch-poll`

To recompile minified versions suitable for committing, run:

1. `docker run -it --rm -v "$PWD":/var/www/html -w /var/www/html node:14-alpine npm run prod`

### Running tests

[](#running-tests)

Before submitting pull requests, please run the functional test suite to check your changes don't break existing functionality.

Run `docker exec -it lanager php artisan dusk` to run LANager's browser test suite.

Feedback &amp; Contributions
----------------------------

[](#feedback--contributions)

- Found a bug? Got a great feature idea? Post it to the [issue tracker](https://github.com/zeropingheroes/lanager/issues)!
- Want to contribute?
    - [Fork the project](https://github.com/zeropingheroes/lanager/fork) and add the features you want to see.
    - Work on new features / bug fixes in the [issue tracker](https://github.com/zeropingheroes/lanager/issues).
    - If you're really hardcore, request commit access.

Enjoy using the LANager!

###  Health Score

57

—

FairBetter than 98% of packages

Maintenance91

Actively maintained with recent releases

Popularity27

Limited adoption so far

Community26

Small or concentrated contributor base

Maturity74

Established project with proven stability

 Bus Factor1

Top contributor holds 99% 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 ~168 days

Recently: every ~301 days

Total

28

Last Release

69d ago

Major Versions

v0.5.2 → v1.0.02018-11-19

PHP version history (4 changes)v0.5PHP &gt;=5.5

v1.0.0PHP ^7.1.3

v1.2.1PHP ^8.0.2

v1.3.0PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/509407?v=4)[ilumos](/maintainers/ilumos)[@ilumos](https://github.com/ilumos)

---

Top Contributors

[![ilumos](https://avatars.githubusercontent.com/u/509407?v=4)](https://github.com/ilumos "ilumos (2495 commits)")[![t3rminalV](https://avatars.githubusercontent.com/u/1621438?v=4)](https://github.com/t3rminalV "t3rminalV (7 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")[![PoxyDoxy](https://avatars.githubusercontent.com/u/3684494?v=4)](https://github.com/PoxyDoxy "PoxyDoxy (2 commits)")[![esjex](https://avatars.githubusercontent.com/u/9556446?v=4)](https://github.com/esjex "esjex (2 commits)")[![dryj](https://avatars.githubusercontent.com/u/1579395?v=4)](https://github.com/dryj "dryj (2 commits)")[![vStone](https://avatars.githubusercontent.com/u/356719?v=4)](https://github.com/vStone "vStone (1 commits)")[![agent-squirrel](https://avatars.githubusercontent.com/u/10679391?v=4)](https://github.com/agent-squirrel "agent-squirrel (1 commits)")[![x-zempt](https://avatars.githubusercontent.com/u/4851689?v=4)](https://github.com/x-zempt "x-zempt (1 commits)")[![DinCahill](https://avatars.githubusercontent.com/u/510163?v=4)](https://github.com/DinCahill "DinCahill (1 commits)")[![msmollin](https://avatars.githubusercontent.com/u/1163880?v=4)](https://github.com/msmollin "msmollin (1 commits)")[![mt-inside](https://avatars.githubusercontent.com/u/1371795?v=4)](https://github.com/mt-inside "mt-inside (1 commits)")[![Sawy7](https://avatars.githubusercontent.com/u/4291478?v=4)](https://github.com/Sawy7 "Sawy7 (1 commits)")[![tannerkrewson](https://avatars.githubusercontent.com/u/8444595?v=4)](https://github.com/tannerkrewson "tannerkrewson (1 commits)")

---

Tags

gaminglanpartysteampartylanlanager

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/zeropingheroes-lanager/health.svg)

```
[![Health](https://phpackages.com/badges/zeropingheroes-lanager/health.svg)](https://phpackages.com/packages/zeropingheroes-lanager)
```

###  Alternatives

[unopim/unopim

UnoPim Laravel PIM

10.5k2.2k](/packages/unopim-unopim)[bagisto/bagisto

Bagisto Laravel E-Commerce

27.6k169.0k9](/packages/bagisto-bagisto)[grumpydictator/firefly-iii

Firefly III: a personal finances manager.

23.8k69.4k](/packages/grumpydictator-firefly-iii)[statamic/cms

The Statamic CMS Core Package

4.8k3.5M925](/packages/statamic-cms)[krayin/laravel-crm

Krayin CRM

23.2k33.4k1](/packages/krayin-laravel-crm)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

751284.3k37](/packages/civicrm-civicrm-core)

PHPackages © 2026

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