queueDelivery() runs synchronously from the v1 follow/unfollow endpoints (via Helpers::sendSignedObject), which commit local state before delivery and have no try/catch. After the Http::send() rewrite, a ConnectionException from a momentarily-unreachable remote was rethrown out of queueDelivery(), turning a best-effort delivery into a 500 for the user after the follow/ unfollow was already persisted. For unfollows, a retry then hit the isFollowing==false branch and never re-sent the Undo, diverging state. Treat transport failures (ConnectionException) as best-effort on this single-delivery path: log, record host health, and return without propagating. Other exception types (invalid sender/destination, signing, serialization) still throw, matching pre-rewrite precondition behavior. Also widen SendUpdateActor's per-user catch from HttpException to Throwable so a single bad host no longer aborts a fleet-wide actor update (the old HttpException catch is dead for ConnectionException/invalid-destination). |
1 week ago | |
|---|---|---|
| .ddev | 1 year ago | |
| .github | 2 weeks ago | |
| .vscode | 3 years ago | |
| app | 1 week ago | |
| bootstrap | 2 weeks ago | |
| config | 1 week ago | |
| database | 2 weeks ago | |
| lang | 3 weeks ago | |
| notes | 4 weeks ago | |
| public | 2 weeks ago | |
| resources | 1 week ago | |
| routes | 1 week ago | |
| storage | 3 years ago | |
| tests | 1 week ago | |
| .dockerignore | 2 weeks ago | |
| .editorconfig | 3 years ago | |
| .env.docker.example | 4 weeks ago | |
| .env.example | 4 weeks ago | |
| .env.testing | 3 weeks ago | |
| .gitattributes | 3 years ago | |
| .gitignore | 4 weeks ago | |
| .markdownlint.json | 3 years ago | |
| .node-version | 4 years ago | |
| .shellcheckrc | 3 years ago | |
| CHANGELOG.md | 2 weeks ago | |
| CODEOWNERS | 3 years ago | |
| CODE_OF_CONDUCT.md | 7 years ago | |
| CONTRIBUTING.md | 2 years ago | |
| DOCKER_COMPOSE_SETUP.md | 4 weeks ago | |
| Dockerfile | 1 month ago | |
| LICENSE | ||
| README.md | 2 weeks ago | |
| SECURITY.md | 5 years ago | |
| artisan | 3 weeks ago | |
| composer.json | 2 weeks ago | |
| composer.lock | 2 weeks ago | |
| crowdin.yml | 3 weeks ago | |
| docker-compose.test.yml | 4 weeks ago | |
| docker-compose.yml | 4 weeks ago | |
| funding.json | 2 years ago | |
| package-lock.json | 3 weeks ago | |
| package.json | 3 weeks ago | |
| phpstan.neon | 3 weeks ago | |
| phpunit.xml | 3 weeks ago | |
| pint.json | 4 weeks ago | |
| psalm-baseline.xml | 4 weeks ago | |
| psalm.xml | 4 weeks ago | |
| server.php | ||
| webpack.mix.js | 1 year ago | |
README.md
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.
Database Support
- MySQL 9+ is officially supported (Strict mode is not default).
- MariaDB 11+ is officially supported (Strict mode is default).
- PostgreSQL 14+ is best effort as of writing. (Please report any regressions).
Notice: We need to improve the ecosystem to test/validate the codebase to be database agnostic, but this will require considerable engineering effort. Thank you for your understanding.
Official Documentation
Documentation for Pixelfed can be found on the Pixelfed documentation website.
Run 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.
- Mastodon: @pixelfed@mastodon.social
- E-mail: hello@pixelfed.org
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
- NLnet Foundation and NGI0 Discovery, part of the Next Generation Internet initiative.
This project is supported by:
