# laravelio/laravel.io: running the Laravel community forum on your own machine

> The repository behind Laravel.io is a full Laravel forum application, not a starter kit. Here is what the install actually asks of you, where the optional services plug in, and when a plain forum package is the better call.

**laravelio/laravel.io** — The Laravel.io Community Portal.

- Repository: https://github.com/laravelio/laravel.io
- Website: https://laravel.io
- Stars: 2,502 · Forks: 661
- Language: PHP
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/laravelio-laravel-io

## What laravelio/laravel.io actually is

This is the source of the Laravel.io community portal, published under the MIT license. It is not a package you pull into an existing application and it is not a skeleton you strip down. It is the application: routes, models, migrations, Blade views, Tailwind assets and a test suite, all in one repository with `app/`, `database/`, `resources/` and `tests/` at the top level.

The audience is narrow and specific. You are a PHP developer who wants a forum, article publishing and member profiles running on Laravel without assembling those pieces from separate packages. Or you maintain a community site and want to see how one is put together by people who have run it for years. The README states plainly that contributions are welcome and points to a contributing guide before you open an issue or send a pull request, which tells you the project expects patches rather than configuration requests.

## The pieces the README asks you to bring

Four requirements are listed: PHP 8.4, Composer, NPM and Valet. The PHP version is the one that will bite first. 8.4 is recent enough that a shared host or a container image pinned to 8.2 will not run this without an upgrade, and the `composer.json` constraints will enforce that before you get anywhere near the browser.

Valet is the assumed local environment. The install instructions clone into `~/Sites/laravel.io` and then run `valet link`, which produces the hostname `http://laravel.io.test`. Nothing in the README describes a Docker or Sail path, so if your team standardises on containers you are translating the steps yourself rather than following a documented one. The default branch is `main`; the release list on the repository stops at v2.1.3 from 2015, so the tagged versions are historical and do not describe what you get from a clone today.

Database setup is manual and split in two. Step 3 asks for a local database called `laravel`, and step 7 asks for a second database called `testing` so the suite can run. Two databases, not one. `.env.example` ships with `DB_DATABASE=laravel`, `DB_USERNAME=root` and `DB_PASSWORD=password`, which matches a default local MySQL install and nothing else.

## Installing it and reaching a logged-in session

The sequence below follows the README's numbered steps. The clone target is the path Valet expects; if you choose a different directory, the README notes that you should run `valet link` inside that directory instead.

```bash
git clone git@github.com:laravelio/laravel.io.git ~/Sites/laravel.io
cd ~/Sites/laravel.io
composer install
composer setup
valet link
```

`composer install` pulls the PHP dependencies. `composer setup` is the project's own setup script and is what the README lists as step 4, after you have created the `laravel` database. `valet link` registers the directory with Valet so the site answers on a `.test` hostname.

Before any of that runs, copy the example environment file and generate a key. The example sets the host and URL from a single variable, so changing `APP_HOST` moves both.

```bash
cp .env.example .env
php artisan key:generate
```

Mail is step 5 and is not optional in practice. `.env.example` points at `MAIL_HOST=127.0.0.1` on `MAIL_PORT=2525`, the port a local catcher such as Mailtrap listens on. Registration, password reset and notification mail all route through it, so without a working driver you will not complete a signup flow.

The README states that if you seeded the database you can log in with the test account `testing` and the password `password`. That account is the fastest way to see the forum, article and profile screens without registering a new user. Create the second `testing` database before running the suite, then run it with parallel execution as the command table describes.

```bash
vendor/bin/pest -p
```

## Optional services and what each one costs you

GitHub authentication needs an OAuth application registered on GitHub, with `http://laravel.io.test` as the homepage and `http://laravel.io.test/auth/github` as the callback. The ID and secret go into `GITHUB_ID` and `GITHUB_SECRET`. Skip it and local email and password login still works.

Search is the heavier dependency. The README directs you to create an Algolia index called `threads`, set `SCOUT_DRIVER=algolia` and `SCOUT_QUEUE=true`, and fill in `ALGOLIA_APP_ID` plus `ALGOLIA_SECRET`. Note the split: the server writes with the Write API Key, while `VITE_ALGOLIA_SECRET` is the Search API Key shipped to the browser along with the app ID and three index names. That is a deliberate separation of write and read credentials, and it means your search index is a second source of truth that has to be populated. The README gives the import and flush commands for exactly that reason.

```bash
php artisan scout:import App\\Models\\Thread
php artisan scout:flush App\\Models\\Thread
```

Two more integrations are documented as optional. Telegram notifications for newly submitted articles need `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHANNEL`. Fathom Analytics supplies article view counts through `FATHOM_SITE_ID` and `FATHOM_TOKEN`; without it, the view counter on articles has no data behind it. Unsplash image syncing requires an access key and, per the README, production access on the Unsplash application, which is a stricter bar than a typical development key. Once a photo ID is in the `hero_image_id` column, the sync command fetches the URL and author data.

```bash
php artisan lio:sync-article-images
```

Social sharing has its own behaviour worth reading closely. Approved articles are shared in submission order, twice a day at 14:00 and 18:00 UTC, and an article is never shared twice. X needs four variables (`TWITTER_CONSUMER_KEY`, `TWITTER_CONSUMER_SECRET`, `TWITTER_ACCESS_TOKEN`, `TWITTER_ACCESS_SECRET`); Bluesky needs only `BLUESKY_USERNAME` and `BLUESKY_PASSWORD`.

## Where this is the wrong tool

If you want a forum inside an application you already have, this is the wrong shape. There is no documented path to mount it as a package or a module. You are adopting the whole application, its routes and its front-end build, and merging your existing code into it or running it beside you.

The environment assumptions are the second constraint. Valet is the only local setup the README describes, PHP 8.4 is mandatory, and the database defaults assume a root MySQL user with the password `password`. Teams on Docker, on PostgreSQL, or on a managed MySQL with restricted credentials will spend their first day translating instructions that were written for one specific local setup.

The optional features are not really optional if you want the full product. Search without Algolia means no Algolia-backed search. Article view counts without Fathom are empty. Header images without Unsplash stay unsynced. Each one is a third-party account, a key, and a service that can change its terms independently of this repository.

Finally, treat the release list with care. The most recent release shown is v2.1.3, published in February 2015. Anyone who pins to a tag is pinning to something more than a decade old. The last push to the repository was on 2026-09-18, so work continues on `main`, but the tags do not reflect it.

## How it compares to a forum package

The obvious alternative is a forum package you install into an existing Laravel application, such as the ones distributed through Composer, where you keep your own routes, your own user model and your own deployment. The difference is direction of control. With a package, the forum is a component inside your application and you decide what surrounds it. With laravel.io, the forum is the application and everything else is a feature of it: articles, moderation, social sharing, search indexing, analytics.

That difference shows up in the upgrade story. A forum package moves when you run `composer update` against your own constraints. Here, you track a repository. The README's command table includes `php artisan migrate:fresh`, which drops and rebuilds the schema, so you should read the migrations before pulling changes rather than assuming they are additive.

If your goal is a support forum bolted onto a product site, a package is less work. If your goal is a community destination with published articles and a moderation queue, this repository already contains that combination, and rebuilding it from separate packages is the larger project.

## Conclusion

Adopt it if you want a working Laravel forum with articles, threads and moderation already wired together, or if you are studying how a long-running Laravel application is assembled. Do not adopt it as a drop-in forum for a non-Laravel stack, and do not expect a tagged release to track the main branch, since the newest release listed is v2.1.3 from 2015. Before committing, verify that PHP 8.4 is available on your target host, that `composer setup` completes against your database, and that you have decided whether Algolia is in scope, because the README treats search as an optional service with its own account and index.

## FAQ

### What is laravelio/laravel.io?

It is the open source repository for the Laravel.io community portal, licensed under MIT. It contains the full Laravel application behind the site, including threads, articles, user profiles and the tests that cover them.

### What do I need installed before setting up laravel.io locally?

The README lists PHP 8.4, Composer, NPM and Valet as requirements. You also need a local database named `laravel` and a second one named `testing` for the test suite.

### Which PHP version does laravel.io require?

PHP 8.4. That is the version stated in the requirements section, so hosts or container images pinned to an older PHP release will not run it without an upgrade.

### How do I get search working in a local laravel.io install?

The README treats Algolia as an optional integration: create an index called `threads`, set `SCOUT_DRIVER=algolia` and `SCOUT_QUEUE=true`, and fill in the Algolia app ID and keys. Existing threads are indexed with `php artisan scout:import App\\Models\\Thread`.

### Is there a test account I can log in with after seeding?

Yes. The README states that if you seeded the database you can log in with the username `testing` and the password `password`.

## Sources

- [laravelio/laravel.io on GitHub](https://github.com/laravelio/laravel.io)
- [License: MIT](https://github.com/laravelio/laravel.io/blob/main/LICENSE)
- [Project website](https://laravel.io)
- [README](https://github.com/laravelio/laravel.io/blob/main/README.md)
- [Releases](https://github.com/laravelio/laravel.io/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/laravelio-laravel-io
