Powerful, configurable and modular federated server using the Versia Protocol
Find a file
Jesse Wierzbinski ff43b19122
fix(api): 🐛 Fix OIDC
2024-05-12 18:01:51 -10:00
.devcontainer chore: 📦 Update Bun to 1.1.8 2024-05-11 15:34:57 -10:00
.github ci(build): 🔒 Add SBOM and provenance data to all automatic Docker builds 2024-05-07 23:49:47 +00:00
.vscode fix(federation): 🐛 Fix wrong URI being generated in federated posts 2024-04-16 11:20:18 -10:00
assets Add screenshots of Lysand's web client for desktop and mobile 2024-03-13 18:04:49 -10:00
cli fix(api): 🐛 Deleting emojis now removes them from object storage 2024-05-12 16:52:19 -10:00
config feat(api): Make Lysand a full OAuth2/OpenID Connect provider as well as still Mastodon compatible 2024-04-17 22:42:12 -10:00
database fix(api): 🔒 Replace bad webfinger regex with good one 2024-05-12 16:27:40 -10:00
docs feat(api): Add user emoji upload capabilities 2024-05-12 16:09:57 -10:00
drizzle feat(api): Add user emoji upload capabilities 2024-05-12 16:09:57 -10:00
middlewares feat(api): Add safeguard when using formdata without a boundary 2024-05-12 13:21:06 -10:00
packages fix(api): 🐛 Deleting emojis now removes them from object storage 2024-05-12 16:52:19 -10:00
server/api fix(api): 🐛 Fix OIDC 2024-05-12 18:01:51 -10:00
tests feat(api): Add user emoji upload capabilities 2024-05-12 16:09:57 -10:00
types refactor: 🔥 Remove dead code 2024-05-07 03:13:37 +00:00
utils fix(api): 🔒 Replace bad webfinger regex with good one 2024-05-12 16:27:40 -10:00
.dockerignore chore: Update Docker build push action version + try to fix build 2023-12-08 15:00:02 -10:00
.envrc feat: flake devshell 2024-05-12 23:58:58 +02:00
.gitignore feat: flake devshell 2024-05-12 23:58:58 +02:00
beemovie.txt Remove old pages/ directory 2024-04-09 01:55:03 -10:00
biome.json refactor(database): 🎨 Refactor note handling into its own class instead of separate functions 2024-04-16 18:09:21 -10:00
build.ts fix(build): 🐛 Fix build error with unzipit by making it external 2024-05-08 16:29:41 -10:00
bun.lockb chore: 📦 Update all packages to latest version 2024-05-11 15:36:47 -10:00
bunfig.toml Fix media code, clean up old types 2024-03-10 13:57:26 -10:00
cli.ts refactor(api): 🎨 Move createLocalUser to a static method of User 2024-04-24 17:48:39 -10:00
CODE_OF_CONDUCT.md [fix] add contributor contact info to COC 2024-04-14 23:29:33 +02:00
CONTRIBUTING.md chore: 📝 Update README and License 2024-05-05 11:35:27 -10:00
docker-compose.yml docs: 📝 Update docker-compose to make Lysand default to the latest tag 2024-05-06 19:23:32 +00:00
Dockerfile chore: 📦 Update Bun to 1.1.8 2024-05-11 15:34:57 -10:00
drizzle.config.ts feat(api): Add user emoji upload capabilities 2024-05-12 16:09:57 -10:00
entrypoint.sh fix(build): 🐛 Modify CLI to properly bundle 2024-05-08 00:24:21 +00:00
flake.lock feat: nix shell 2024-05-13 02:30:52 +02:00
flake.nix feat: nix shell 2024-05-13 02:30:52 +02:00
index.ts feat(api): Add safeguard when using formdata without a boundary 2024-05-12 13:21:06 -10:00
LICENSE Add better README 2023-09-14 15:42:56 -10:00
package.json fix(api): 🐛 Add JSON support to /api/v1/statuses/:id 2024-05-11 15:47:25 -10:00
README.md docs: 📝 Update README to talk about Markdown support in Lysand 2024-05-06 19:20:41 +00:00
routes.ts refactor: 🔥 Remove dead code 2024-05-07 03:13:37 +00:00
SECURITY.md Add security policy 2023-11-19 16:34:59 -10:00
server.ts refactor(api): 🎨 Finish Hono refactor 2024-05-06 08:19:42 +00:00
shell.nix feat: nix shell 2024-05-13 02:30:52 +02:00
tsconfig.json feat(cli): ♻️ Begin new CLI rewrite with oclif 2024-05-07 07:41:02 +00:00
types.d.ts refactor(api): 🎨 Improve Markdown parsing with markdown-it instead of marked 2024-04-22 11:02:09 -10:00

Lysand Logo

Postgres Bun VS Code Insiders TypeScript Linux Docker Contributor Covenant

What is this?

Lysand Server is a federated social network server based on the Lysand protocol. It is currently in beta phase, with basic federation and almost complete Mastodon API support.

Goals

  • Privacy: Lysand is designed to be as private as possible. Unnecessary data is not stored, and data that is stored is done so securely.
  • Configurability: High configurability is a key feature of Lysand. Almost every aspect of the server can be configured to suit your needs. If you feel like something is missing, please open an issue.
  • Security: Lysand is designed with security in mind. It is built with modern security practices and technologies, and is constantly updated to ensure the highest level of security.
  • Performance: Efficiency and speed are a key focus of Lysand. The design is non-monolithic, and is built to be as fast as possible.
  • Mastodon API compatibility: Lysand is designed to be compatible with the Mastodon API, with Glitch-SOC extensions.

Anti-Goals

  • Monolithic design: Modularity and scaling is important to this project. This means that it is not a single, monolithic application, but rather a collection of smaller, more focused applications. (API layer, queue, database, frontend, etc.)
  • Complexity: Both in code and in function, Lysand should be as simple as possible. This does not mean adding no features or functionality, but rather that the features and functionality that are added should be well-written and easy to understand.
  • Bloat: Lysand should not be bloated with unnecessary features, packages, dependencies or code. It should be as lightweight as possible, while still being feature-rich.

Features

  • Federation (partial)
  • Hyper fast (thousands of HTTP requests per second)
  • S3 or local media storage
  • Deduplication of uploaded files
  • Federation limits
  • Configurable defaults
  • Full regex-based filters for posts, users and media
  • Custom emoji support
  • Automatic image conversion to WebP or other formats
  • Scripting-compatible CLI with JSON and CSV outputs
  • Markdown support just about everywhere: posts, profiles, profile fields, etc. Code blocks, tables, and more are supported.
  • Moderation tools
  • Mastodon API support (partial)

Screenshots

You can visit social.lysand.org to see a live instance of Lysand with Lysand-FE.

How do I run it?

Please see the installation guide for more information on how to install Lysand.

Contributing

Contributions are welcome! Please see the CONTRIBUTING.md file for more information.

Federation

The following extensions are currently supported or being worked on:

  • org.lysand:custom_emojis: Custom emojis
  • org.lysand:polls: Polls
  • org.lysand:microblogging: Microblogging

API

Lysand implements the Mastodon API (as well as Glitch-Soc extensions). The API is currently almost fully complete, with some fringe functionality still being worked on.

Working endpoints are:

  • /api/v1/accounts/:id/block
  • /api/v1/accounts/:id/follow
  • /api/v1/accounts/:id/followers
  • /api/v1/accounts/:id/following
  • /api/v1/accounts/:id/lists
  • /api/v1/accounts/:id/mute
  • /api/v1/accounts/:id/note
  • /api/v1/accounts/:id/pin
  • /api/v1/accounts/:id/remove_from_followers
  • /api/v1/accounts/:id/statuses
  • /api/v1/accounts/:id/unblock
  • /api/v1/accounts/:id/unfollow
  • /api/v1/accounts/:id/unmute
  • /api/v1/accounts/:id/unpin
  • /api/v1/accounts/:id
  • /api/v1/accounts/familiar_followers
  • /api/v1/accounts/relationships
  • /api/v1/accounts/update_credentials
  • /api/v1/accounts/verify_credentials
  • /api/v1/accounts
  • /api/v1/announcements/:id/dismiss
  • /api/v1/announcements/:id/reactions/:name (PUT, DELETE)
  • /api/v1/announcements
  • /api/v1/apps/verify_credentials
  • /api/v1/apps
  • /api/v1/blocks
  • /api/v1/conversations/:id/read
  • /api/v1/conversations/:id
  • /api/v1/conversations
  • /api/v1/custom_emojis
  • /api/v1/directory
  • /api/v1/domain_blocks (GET, POST, DELETE)
  • /api/v1/endorsements
  • /api/v1/favourites
  • /api/v1/featured_tags/:id (DELETE)
  • /api/v1/featured_tags/suggestions
  • /api/v1/featured_tags (GET, POST)
  • /api/v1/follow_requests/:account_id/authorize
  • /api/v1/follow_requests/:account_id/reject
  • /api/v1/follow_requests
  • /api/v1/follow_suggestions
  • /api/v1/followed_tags
  • /api/v1/instance/activity
  • /api/v1/instance/domain_blocks
  • /api/v1/instance/extended_description
  • /api/v1/instance/peers
  • /api/v1/instance/rules
  • /api/v1/instance
  • /api/v1/lists/:id/accounts (GET, POST, DELETE)
  • /api/v1/lists/:id (GET, PUT, DELETE)
  • /api/v1/lists (GET, POST)
  • /api/v1/markers (GET, POST)
  • /api/v1/media/:id
  • /api/v1/mutes
  • /api/v1/notifications/:id/dismiss
  • /api/v1/notifications/:id
  • /api/v1/notifications/clear
  • /api/v1/notifications
  • /api/v1/polls/:id/votes
  • /api/v1/polls/:id
  • /api/v1/preferences
  • /api/v1/profile/avatar (DELETE)
  • /api/v1/profile/header (DELETE)
  • /api/v1/reports
  • /api/v1/scheduled_statuses/:id (GET, PUT, DELETE)
  • /api/v1/scheduled_statuses
  • /api/v1/statuses/:id/bookmark
  • /api/v1/statuses/:id/context
  • /api/v1/statuses/:id/favourite
  • /api/v1/statuses/:id/favourited_by
  • /api/v1/statuses/:id/history
  • /api/v1/statuses/:id/mute
  • /api/v1/statuses/:id/pin
  • /api/v1/statuses/:id/reblog
  • /api/v1/statuses/:id/reblogged_by
  • /api/v1/statuses/:id/source
  • /api/v1/statuses/:id/translate
  • /api/v1/statuses/:id/unbookmark
  • /api/v1/statuses/:id/unfavourite
  • /api/v1/statuses/:id/unmute
  • /api/v1/statuses/:id/unpin
  • /api/v1/statuses/:id/unreblog
  • /api/v1/statuses/:id (GET, DELETE)
  • /api/v1/statuses/:id (PUT)
  • /api/v1/statuses
  • /api/v1/suggestions/:account_id (DELETE)
  • /api/v1/tags/:id/follow
  • /api/v1/tags/:id/unfollow
  • /api/v1/tags/:id
  • /api/v1/timelines/home
  • /api/v1/timelines/list/:list_id
  • /api/v1/timelines/public
  • /api/v1/timelines/tag/:hashtag
  • /api/v1/trends/links
  • /api/v1/trends/statuses
  • /api/v1/trends/tags
  • /api/v2/filters/:filter_id/keywords (GET, POST)
  • /api/v2/filters/:filter_id/statuses (GET, POST)
  • /api/v2/filters/:id (GET, PUT, DELETE)
  • /api/v2/filters/keywords/:id (GET, PUT, DELETE)
  • /api/v2/filters/statuses/:id (GET, DELETE)
  • /api/v2/filters (GET, POST)
  • /api/v2/instance
  • /api/v2/media
  • /api/v2/search
  • /api/v2/suggestions
  • /oauth/authorize
  • /oauth/token
  • /oauth/revoke
  • Admin API

Main work to do

  • Announcements
  • Polls
  • Tags
  • Lists
  • Scheduled statuses
  • WebSockets
  • Push notifications
  • Trends
  • Suggestions
  • Bookmarks
  • Translation
  • Reports
  • Admin API

License

This project is licensed under the AGPL-3.0-or-later.