2023-11-20 03:05:07 +01:00
< p align = "center" >
< a href = "https://lysand.org" > < img src = "https://cdn-web.cpluspatch.com/lysand.webp" alt = "Lysand Logo" height = 130 > < / a >
< / p >
2023-09-11 05:31:08 +02:00
2024-04-15 01:33:02 +02:00
      [](code_of_conduct.md)
2023-10-23 02:23:15 +02:00
2023-09-15 03:42:56 +02:00
## What is this?
2024-04-15 01:33:02 +02:00
This is a project to create a federated social network based on the [Lysand ](https://lysand.org ) protocol. It is currently in beta phase, with basic federation and almost complete Mastodon API support.
2023-09-15 03:42:56 +02:00
2024-03-11 06:30:26 +01:00
This project aims to be a fully featured social network, with a focus on privacy, security, and performance. It implements the Mastodon API for support with clients that already support Mastodon or Pleroma.
2023-09-15 03:42:56 +02:00
2024-02-22 08:03:18 +01:00
> [!NOTE]
> This project is not affiliated with Mastodon or Pleroma, and is not a fork of either project. It is a new project built from the ground up.
2023-09-15 03:42:56 +02:00
2023-11-20 03:05:07 +01:00
## Features
2024-04-15 01:33:02 +02:00
- [x] Federation (partial)
2023-12-02 00:00:00 +01:00
- [x] Hyper fast (thousands of HTTP requests per second)
2023-11-20 03:05:07 +01:00
- [x] S3 or local media storage
- [x] Deduplication of uploaded files
- [x] Federation limits
- [x] Configurable defaults
- [x] Full regex-based filters for posts, users and media
- [x] Custom emoji support
- [x] Automatic image conversion to WebP or other formats
2023-11-30 05:16:58 +01:00
- [x] Scripting-compatible CLI with JSON and CSV outputs
2023-11-20 03:05:07 +01:00
- [ ] Moderation tools
2024-04-15 01:33:02 +02:00
- [x] Mastodon API support (partial)
2023-11-20 03:05:07 +01:00
2024-03-14 05:04:49 +01:00
## Screenshots
2024-04-15 01:33:02 +02:00
Here are some screenshots of Lysand's built-in web client. This client is built with Nuxt, and serves to allow users to log in or register. It is kept to only the actions that cannot be done with a Mastodon client, to simplify development. In the future, there will be a full-featured client.
2024-03-14 05:04:49 +01:00
### On Desktop
#### Welcome Page

#### Logging In

#### OAuth Confirmation

#### Registration Page

#### Home Timeline

### On Mobile
#### Logging In
< center >
< img src = "assets/login_mobile.webp" alt = "Logging In" width = "300" >
< / center >
#### OAuth Confirmation
< center >
< img src = "assets/redirect_mobile.webp" alt = "OAuth Confirmation" width = "300" >
< / center >
#### Registration Page
< center >
< img src = "assets/register_mobile.webp" alt = "Registration Page" width = "300" >
< / center >
2023-11-30 05:16:58 +01:00
## Benchmarks
2024-02-22 08:03:18 +01:00
> [!NOTE]
2024-03-11 06:30:26 +01:00
> These benchmarks are not representative of real-world performance, and are only meant to be used as a rough guide. Load, and therefore performance, will vary depending on the server's hardware and software configuration, as well as user activity.
2023-11-30 05:16:58 +01:00
### Timeline Benchmarks
You may run the following command to benchmark the `/api/v1/timelines/home` endpoint:
```bash
TOKEN=token_here bun benchmark:timeline < request_count >
```
The `request_count` variable is optional and defaults to 100. `TOKEN` is your personal user token, used to login to the API.
2023-12-02 00:00:00 +01:00
On a quad-core laptop:
```
$ bun run benchmarks/timelines.ts 100
✓ All requests succeeded
✓ 100 requests fulfilled in 0.12611s
```
```
$ bun run benchmarks/timelines.ts 1000
✓ All requests succeeded
✓ 1000 requests fulfilled in 0.90925s
```
```
$ bun run benchmarks/timelines.ts 10000
✓ All requests succeeded
✓ 10000 requests fulfilled in 12.44852s
```
2024-03-11 06:30:26 +01:00
Lysand is extremely fast and can handle thousands of HTTP requests per second on a good server.
2023-12-02 00:00:00 +01:00
2023-09-15 03:42:56 +02:00
## How do I run it?
2024-04-15 01:33:02 +02:00
Please see the [installation guide ](docs/installation.md ) for more information on how to install Lysand.
2023-11-27 07:10:57 +01:00
2023-09-15 03:42:56 +02:00
## Contributing
Contributions are welcome! Please see the [CONTRIBUTING.md ](CONTRIBUTING.md ) file for more information.
2023-10-16 05:32:22 +02:00
## Planned Extra Features
- Send notifications to moderators when a report is received
- Email notifications on certain actions
2023-09-15 03:42:56 +02:00
## Federation
2023-11-12 02:37:14 +01:00
The following extensions are currently supported or being worked on:
- `org.lysand:custom_emojis` : Custom emojis
2023-09-15 03:42:56 +02:00
## API
2023-09-15 07:08:59 +02:00
Lysand implements the Mastodon API, with some extensions. The API is currently in early alpha, and is not recommended for use in production.
2023-09-15 03:42:56 +02:00
Working endpoints are:
2023-10-28 22:24:07 +02:00
- `/api/v1/accounts`
2023-09-22 03:15:18 +02:00
- `/api/v1/accounts/:id`
- `/api/v1/accounts/:id/statuses`
2023-09-22 05:18:05 +02:00
- `/api/v1/accounts/:id/follow`
2023-09-22 09:07:39 +02:00
- `/api/v1/accounts/:id/unfollow`
- `/api/v1/accounts/:id/block`
- `/api/v1/accounts/:id/unblock`
2023-09-22 23:41:05 +02:00
- `/api/v1/accounts/:id/mute`
- `/api/v1/accounts/:id/unmute`
2023-09-23 00:25:10 +02:00
- `/api/v1/accounts/:id/pin`
- `/api/v1/accounts/:id/unpin`
2023-09-23 03:31:41 +02:00
- `/api/v1/accounts/:id/note`
2023-10-28 22:24:07 +02:00
- `/api/v1/accounts/:id/remove_from_followers`
2023-09-23 04:28:00 +02:00
- `/api/v1/accounts/relationships`
2023-09-22 03:15:18 +02:00
- `/api/v1/accounts/update_credentials`
2023-09-22 04:15:40 +02:00
- `/api/v1/accounts/verify_credentials`
2023-09-23 05:16:24 +02:00
- `/api/v1/accounts/familiar_followers`
2023-11-12 09:28:06 +01:00
- `/api/v1/profile/avatar` (`DELETE`)
- `/api/v1/profile/header` (`DELETE`)
2023-09-27 20:45:07 +02:00
- `/api/v1/statuses/:id` (`GET`, `DELETE` )
2023-10-23 03:47:04 +02:00
- `/api/v1/statuses/:id/context`
2023-10-28 22:24:07 +02:00
- `/api/v1/statuses/:id/favourite`
- `/api/v1/statuses/:id/unfavourite`
- `/api/v1/statuses/:id/favourited_by`
- `/api/v1/statuses/:id/reblogged_by`
2023-11-12 09:28:06 +01:00
- `/api/v1/statuses/:id/reblog`
- `/api/v1/statuses/:id/unreblog`
2023-11-27 01:56:16 +01:00
- `/api/v1/statuses/:id/pin`
- `/api/v1/statuses/:id/unpin`
2023-09-22 03:15:18 +02:00
- `/api/v1/statuses`
2023-10-02 02:07:29 +02:00
- `/api/v1/timelines/public`
2023-10-28 22:24:07 +02:00
- `/api/v1/timelines/home`
2023-09-22 03:15:18 +02:00
- `/api/v1/apps`
2023-10-01 05:24:58 +02:00
- `/api/v1/instance`
2023-10-28 22:24:07 +02:00
- `/api/v1/custom_emojis`
2023-09-22 03:41:46 +02:00
- `/api/v1/apps/verify_credentials`
2023-09-15 03:42:56 +02:00
- `/oauth/authorize`
- `/oauth/token`
2023-11-27 01:56:16 +01:00
- `/api/v1/blocks`
- `/api/v1/mutes`
- `/api/v2/media`
2024-03-11 06:30:26 +01:00
- `/api/v1/notifications`
2023-11-12 09:04:26 +01:00
- `/api/v1/media/:id`
2024-03-11 06:30:26 +01:00
- `/api/v2/media`
2023-11-27 02:01:07 +01:00
- `/api/v1/favourites`
2023-12-02 00:44:48 +01:00
- `/api/v1/accounts/:id/followers`
- `/api/v1/accounts/:id/following`
2023-12-03 05:58:17 +01:00
- `/api/v2/search`
2024-04-15 01:33:02 +02:00
- `/api/v1/follow_requests`
- `/api/v1/follow_requests/:account_id/authorize`
- `/api/v1/follow_requests/:account_id/reject`
- `/api/v1/statuses/:id/mute`
- `/api/v1/statuses/:id/unmute`
- `/api/v1/statuses/:id` (`PUT`)
- `/api/v1/statuses/:id/source`
2023-11-23 05:10:37 +01:00
Endpoints left:
2023-11-12 09:04:26 +01:00
- `/api/v1/reports`
- `/api/v1/accounts/:id/lists`
- `/api/v1/follow_suggestions`
- `/api/v1/domain_blocks` (`GET`, `POST` , `DELETE` )
- `/api/v2/filters` (`GET`, `POST` )
- `/api/v2/filters/:id` (`GET`, `PUT` , `DELETE` )
- `/api/v2/filters/:filter_id/keywords` (`GET`, `POST` )
- `/api/v2/filters/keywords/:id` (`GET`, `PUT` , `DELETE` )
- `/api/v2/filters/:filter_id/statuses` (`GET`, `POST` )
- `/api/v2/filters/statuses/:id` (`GET`, `DELETE` )
- `/api/v1/endorsements`
- `/api/v1/featured_tags` (`GET`, `POST` )
- `/api/v1/featured_tags/:id` (`DELETE`)
- `/api/v1/featured_tags/suggestions`
- `/api/v1/preferences`
- `/api/v1/followed_tags`
- `/api/v2/suggestions`
- `/api/v1/suggestions/:account_id` (`DELETE`)
- `/api/v1/tags/:id`
- `/api/v1/tags/:id/follow`
- `/api/v1/tags/:id/unfollow`
- `/api/v1/statuses/:id/translate`
- `/api/v1/statuses/:id/bookmark`
- `/api/v1/statuses/:id/unbookmark`
- `/api/v1/statuses/:id/history`
- `/api/v1/polls/:id`
- `/api/v1/polls/:id/votes`
- `/api/v1/scheduled_statuses`
- `/api/v1/scheduled_statuses/:id` (`GET`, `PUT` , `DELETE` )
- `/api/v1/timelines/tag/:hashtag`
- `/api/v1/timelines/list/:list_id`
- `/api/v1/conversations`
- `/api/v1/conversations/:id`
- `/api/v1/conversations/:id/read`
- `/api/v1/lists` (`GET`, `POST` )
- `/api/v1/lists/:id` (`GET`, `PUT` , `DELETE` )
- `/api/v1/markers` (`GET`, `POST` )
- `/api/v1/lists/:id/accounts` (`GET`, `POST` , `DELETE` )
- `/api/v1/notifications/:id`
- `/api/v1/notifications/clear`
- `/api/v1/notifications/:id/dismiss`
- `/api/v2/instance`
- `/api/v1/instance/peers`
- `/api/v1/instance/activity`
- `/api/v1/instance/rules`
- `/api/v1/instance/domain_blocks`
- `/api/v1/instance/extended_description`
- `/api/v1/directory`
- `/api/v1/trends/tags`
- `/api/v1/trends/statuses`
- `/api/v1/trends/links`
- `/api/v1/announcements`
- `/api/v1/announcements/:id/dismiss`
- `/api/v1/announcements/:id/reactions/:name` (`PUT`, `DELETE` )
- Admin API
2024-04-15 01:33:02 +02:00
WebSocket Streaming API also needs to be added (and push notifications)
2023-11-12 09:04:26 +01:00
2023-09-15 03:42:56 +02:00
## License
2024-02-22 08:03:18 +01:00
This project is licensed under the [AGPL-3.0 ](LICENSE ).