Photo Sharing. For Everyone.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Go to file
Your Name bbe7cfa8e1 Split Horizon into priority-based supervisors, add balanceCooldown
and notification routing

All 15 queues previously ran through one auto-balanced supervisor.
Horizon's `balance: auto` does not honor queue array order for
priority, so despite queue names implying priority ('high' vs 'low'),
a burst on any one queue could starve any other sharing that
supervisor - e.g. a burst of mmo (image/video optimization, 23
dispatch sites, CPU/IO heavy) could delay high-queue DM/follow
delivery just as easily as it could delay low-queue background work.

Split into 4 supervisors grouped by actual job characteristics
(checked via grep across every ->onQueue() call site, not guessed):
- supervisor-priority: high, inbox, pushnotify, follow, default,
  shared - user-facing federation/DM/notification delivery.
- supervisor-fanout: feed, story, groups - bursty timeline/story
  fanout writes triggered by posts, likes, and follows.
- supervisor-media: mmo - image/video optimize/resize/thumbnail.
  Runs a fixed worker pool (balance: false) instead of auto-scaling,
  so it can't claim workers away from the other pools under load.
- supervisor-background: low, delete, adelete, move, intbg - imports,
  crawling, account deletion/migration; not time-sensitive.

Moved the shared supervisor shape into `defaults` (keyed per
supervisor name, per Horizon's own merge behavior) so `environments`
only needs to override what actually differs, instead of each
environment fully redefining supervisor-1 from scratch. Existing env
vars (HORIZON_MAX_PROCESSES, HORIZON_MIN_PROCESSES,
HORIZON_BALANCE_STRATEGY, HORIZON_SUPERVISOR_*) keep governing the
priority supervisor for continuity with existing deployments; the
three new supervisors get their own HORIZON_*_MAX_PROCESSES vars
with conservative defaults.

Also:
- Added balanceCooldown: 3 explicitly (previously relied on
  SupervisorOptions' own constructor default of the same value -
  behavior is unchanged, just no longer implicit).
- Wired LongWaitDetected notification routing
  (Horizon::routeMailNotificationsTo/routeSlackNotificationsTo) to
  new optional config('horizon.notification_routing') keys, sourced
  from env vars. Previously these were hardcoded, commented-out
  examples with nowhere to actually alert on the `waits` thresholds
  already configured below.

Verified by actually starting `php artisan horizon` and inspecting
`horizon:supervisors`: all 4 supervisors registered with exactly the
intended queues, supervisor-media correctly running fixed (non-auto)
balancing. Cross-checked every ->onQueue() call site in app/ against
the new supervisor queue lists - exact match, no queue dropped or
duplicated. Full test suite (715/715) and Larastan clean.
2 weeks ago
.ddev Update DDEV PHP, MariaDB and Redis versions 1 year ago
.github Update docker-push.yml 2 weeks ago
.vscode many small fixes and improvements 3 years ago
app Split Horizon into priority-based supervisors, add balanceCooldown 2 weeks ago
bootstrap Upgrade to Laravel 13 2 weeks ago
config Split Horizon into priority-based supervisors, add balanceCooldown 2 weeks ago
database Fix index migrations to support PostgreSQL and MariaDB 2 weeks ago
lang polish 3 weeks ago
notes Update DeduplicationChanges.md with service reference 4 weeks ago
public Update compiled assets 3 weeks ago
resources Merge remote-tracking branch 'origin/staging' into feature/honeypot-spam-protection 2 weeks ago
routes Update account suggestions 2 weeks ago
storage Add Autospam Advanced Detection 3 years ago
tests Use LazilyRefreshDatabase instead of plain RefreshDatabase in tests 2 weeks ago
.dockerignore Update .dockerignore 2 weeks ago
.editorconfig fix spacing 3 years ago
.env.docker.example fix: remove deprecated Passport::personalAccessClientId() and enableImplicitGrant() 4 weeks ago
.env.example fix: remove deprecated Passport::personalAccessClientId() and enableImplicitGrant() 4 weeks ago
.env.testing Add Sanctum support 4 weeks ago
.gitattributes Update .gitattributes to collapse diffs on generated files 3 years ago
.gitignore chore: resolve psalm issues in admin commands and auth 4 weeks ago
.markdownlint.json migration docs 3 years ago
.node-version chore: adds node version 4 years ago
.shellcheckrc tweaking configs 3 years ago
CHANGELOG.md Update changelog 2 weeks ago
CODEOWNERS add CODEOWNERS 3 years ago
CODE_OF_CONDUCT.md
…
CONTRIBUTING.md Update CONTRIBUTING.md 2 years ago
DOCKER_COMPOSE_SETUP.md Fix duplicate command in Docker Compose setup 4 weeks ago
Dockerfile Update Dockerfile 1 month ago
LICENSE
…
README.md Update README.md 2 weeks ago
SECURITY.md Create SECURITY.md 5 years ago
artisan chore: uplift framework skeleton toward Laravel 12 defaults 4 weeks ago
composer.json Upgrade to Laravel 13 2 weeks ago
composer.lock Upgrade to Laravel 13 2 weeks ago
crowdin.yml chore: move resources/lang to top-level lang/ per Laravel 9+ convention 3 weeks ago
docker-compose.test.yml ci: refactor GitHub Actions with Redis service and best practices 4 weeks ago
docker-compose.yml fix: remove bootstrap/cache bind mount from docker-compose 1 month ago
funding.json Update funding.json 2 years ago
package-lock.json Merge pull request #7046 from pixelfed/dependabot/npm_and_yarn/svgo-2.8.4 3 weeks ago
package.json chore(deps)(deps): bump blurhash from 1.1.5 to 2.0.5 3 weeks ago
phpstan.neon chore: move resources/lang to top-level lang/ per Laravel 9+ convention 3 weeks ago
phpunit.xml Shift `ENV` variables 3 weeks ago
pint.json Create pint.json 1 month ago
psalm-baseline.xml chore: add Psalm static analysis (plugin-laravel, baseline, CI) 4 weeks ago
psalm.xml chore: target PHP 8.4 in psalm config 4 weeks ago
server.php
…
webpack.mix.js translate custom filter 1 year ago

README.md

Pixelfed logo

Latest Stable Version License Total Pixelfed users from FediDB

Introduction

Photo sharing the way it should be. Pixelfed lets your casual shots and creative photography find their audience naturally, without algorithmic barriers. Join millions of people sharing across the fediverse.

Pixelfed web user interface in light mode

Official Documentation

Documentation for Pixelfed can be found on the Pixelfed documentation website.

Run on YunoHost

Install on YunoHost

Pixelfed app for YunoHost. See the package source code

License

Pixelfed is open-sourced software licensed under the AGPL license.

Communication

The ways you can communicate on the project are below. Before interacting, please read through the Code Of Conduct.

Pixelfed Sponsors

We would like to extend our thanks to the following sponsors for funding Pixelfed development. If you are interested in becoming a sponsor, please visit the Pixelfed Patreon Page

This project is supported by: