1
0
Fork
You've already forked appy
0
forked from spla/appy
a headless ActivityPub server written with Python and fastAPI.
  • Python 96.1%
  • HTML 3.8%
2025年10月16日 17:55:35 +02:00
app Fixes #85 2025年10月16日 17:55:35 +02:00
apps Added 2025年06月21日 12:00:29 +02:00
dist Added nginx.conf 2024年06月22日 20:11:32 +02:00
static New html page for sign in error, wrong username or password. 2025年10月16日 16:13:19 +02:00
system New feature: Added view custom emojis in posts. 2025年08月20日 14:32:59 +02:00
LICENSE En desenvolupament 2023年11月29日 18:24:09 +01:00
README.md Updated 2025年10月01日 11:08:35 +02:00
requirements.txt Added Misskey support, Added retry sending activities if remote server is down (WIP) 2025年05月03日 16:05:41 +02:00

appy

appy

A lightweight server implementing the ActivityPub protocol in Python over fastAPI.

Key Features

  • Full support for the ActivityPub protocol (actors, activities, inbox, outbox, etc.).
  • Compatible with federated platforms like Akkoma, Mastodon, Misskey and Pleroma
  • Accesible via API only.
  • HTTP Signatures support for secure communication.

Built With

FastAPI Pydantic Uvicorn asyncpg

Requirements

Dependencies

  • Python: Version 3.10 or later.
  • Postgresql: Running Postgresql server with a created role with LOGIN and CREATEDB privileges.
  • Redis: Running Redis server with requirepass enabled.
  • Libraries:
    • FastAPI
    • uvicorn
    • httpx
    • cryptography
    • asyncpg

Getting Started

Follow these steps to run the server locally:

  1. Clone the Repository
    Clone the project repository to your local machine:
git clone https://codeberg.org/spla/appy.git
cd appy
  1. Create Python Virtual Environment Create the Python Virtual Environment::
python3.x -m venv .

Don't forget the . at then end

  1. Activate it
    Enable Python Environment::
source bin/activate
  1. Install Dependencies
    Install the required Python libraries:
pip install -r requirements.txt
  1. Copy dist/nginx.conf to /etc/nginx/sites-available/<your_appy_domain>.conf and edit it to change <example.net> to your domain.

  2. Enable it with:

ln -s /etc/nginx/sites-available/<your_appy_domain>.conf /etc/nginx/sites-enabled/<your_appy_domain>.conf
  1. Check if nginx like it:
nginx -t
  1. Restart nginx.

  2. Run the Server
    Start the server with the following command:

python app/main.py

First time run will ask for needed parameters and will create your user profile. Later on, the server will be running locally at http://127.0.0.1:{configured_port}.

Updating

Update appy by issuing:

git pull origin main && git fetch --tags

Usage Example

Here’s how to interact with the server. Use any of the following apps to sign in:

iOS: Icecubes, Ivory, Mastodon (official), Mona, Tusker
Android: Fedilab, Mastodon (official), Moshidon, Pachli, Tusky

Architecture

The server is built to follow the standard ActivityPub flow: 1. An actor sends an activity via the outbox. 2. The server signs the activity with HTTP Signatures and dispatches it to the inboxes of other actors. 3. Recipient actors process the activity in their inbox.

A simplified diagram of the flow:

[Client] --> [Outbox] --> [HTTP Signatures] --> [Remote Inbox]
↑ ↓
[ActivityPub Actor] <-- [Inbox] <-- [HTTP Signature check] <-- [Remote Outbox]

Contributing

We welcome contributions to the project! To get started:

  1. Fork this repository.
  2. Create a new branch for your feature or fix:
git checkout -b feature/new-feature
  1. Make your changes and commit them with a clear message:
git commit -m "Add new feature"
  1. Push your branch:
git push origin feature/new-feature
  1. Submit a pull request.

Please ensure that your code follows the PEP 8 style guide.

License

This project is licensed under the GNU GENERAL PUBLIC LICENSE. See the LICENSE file for more details.

Additional Resources

Here are some resources to help you understand ActivityPub and related technologies:
Official ActivityPub Documentation
Mastodon's really great API docs
FastAPI Documentation
Understanding ActivityPub

Support

If you encounter any issues, feel free to open an issue or contact the project maintainer.