Powerful, configurable and modular federated server using the Versia Protocol
Find a file
Jesse Wierzbinski ffa0c209b6
Some checks failed
CodeQL Scan / Analyze (javascript-typescript) (push) Failing after 0s
Build Docker Images / lint (push) Failing after 6s
Build Docker Images / check (push) Failing after 6s
Build Docker Images / tests (push) Failing after 6s
Deploy Docs to GitHub Pages / build (push) Failing after 0s
Build Docker Images / build (server, Dockerfile, ${{ github.repository_owner }}/server) (push) Has been skipped
Build Docker Images / build (worker, Worker.Dockerfile, ${{ github.repository_owner }}/worker) (push) Has been skipped
Deploy Docs to GitHub Pages / Deploy (push) Has been skipped
Mirror to Codeberg / Mirror (push) Failing after 0s
Nix Build / check (push) Failing after 0s
fix(api): 👽 Use new Scalar API
2025-04-16 16:40:47 +02:00
.devcontainer chore: ⬆️ Upgrade Bun to 1.2.9 2025-04-10 18:53:01 +02:00
.github ci: 👷 Use vanilla PostgreSQL 17 in CI tests 2025-03-30 22:12:40 +02:00
.vscode refactor(media): ♻️ Massively simplify media pipeline with Bun.S3 2025-01-29 17:21:40 +01:00
api fix(api): 🐛 Don't use URL in Versia entity schemas, fixes OpenAPI 2025-04-16 16:35:17 +02:00
assets docs: 💸 Add Fastly sponsorship note 2025-02-15 14:43:17 +01:00
benchmarks chore: ⬆️ Upgrade to Biome 2.0 2025-04-10 19:15:31 +02:00
classes fix(api): 🐛 Don't use URL in Versia entity schemas, fixes OpenAPI 2025-04-16 16:35:17 +02:00
cli fix: 🚨 Enable more Biome 2.0 rules 2025-04-10 19:56:42 +02:00
config feat(media): Add path_style and path configuration to S3 2025-04-15 13:28:12 +02:00
docs fix: 📝 Fix typo in Nix docs 2025-04-15 13:05:00 +02:00
drizzle chore: ⬆️ Upgrade to Biome 2.0 2025-04-10 19:15:31 +02:00
entrypoints fix: 🚨 Enable more Biome 2.0 rules 2025-04-10 19:56:42 +02:00
middlewares fix: 🚨 Enable more Biome 2.0 rules 2025-04-10 19:56:42 +02:00
nix chore: 💚 Update dependency hash 2025-04-15 21:39:16 +02:00
packages fix(api): 🐛 Don't use URL in Versia entity schemas, fixes OpenAPI 2025-04-16 16:35:17 +02:00
plugins/openid chore: ⬆️ Upgrade to Biome 2.0 2025-04-10 19:15:31 +02:00
scripts ci: 👷 Use vanilla PostgreSQL 17 in CI tests 2025-03-30 22:12:40 +02:00
tests build: 🏗️ Package Worker 2025-04-14 17:13:36 +02:00
types docs(federation): 📝 Update SDK documentation 2025-04-08 21:54:55 +02:00
utils test: 🧪 Fix failing tests due to incorrect cwd resolving 2025-04-14 17:30:01 +02:00
.deepsource.toml feat: Add Deepsource config file 2024-10-03 10:24:39 +02:00
.dockerignore chore: Update Docker build push action version + try to fix build 2023-12-08 15:00:02 -10:00
.editorconfig feat: Split off queue workers into a separate worker process 2024-11-25 21:54:31 +01:00
.envrc feat: flake devshell 2024-05-12 23:58:58 +02:00
.gitignore refactor: 📝 Move documentation to a custom VitePress site 2024-11-10 15:24:34 +01:00
.npmrc refactor: ⬆️ Upgrade dependencies, use JSR for Hono 2024-07-11 12:56:28 +02:00
app.ts fix(api): 👽 Use new Scalar API 2025-04-16 16:40:47 +02:00
beemovie.txt Remove old pages/ directory 2024-04-09 01:55:03 -10:00
biome.json refactor(config): 🔥 Remove dependency on c12, use confbox instead 2025-04-15 21:37:36 +02:00
build-worker.ts build: 🏗️ Package Worker 2025-04-14 17:13:36 +02:00
build.ts build: 🚑 Remove old workaround that isn't needed anymore 2025-04-15 21:45:21 +02:00
bun.lock refactor(config): 🔥 Remove dependency on c12, use confbox instead 2025-04-15 21:37:36 +02:00
bunfig.toml refactor: Only delete old test users once at preload 2024-05-28 14:51:55 -10:00
CHANGELOG.md chore: ⬆️ Upgrade Bun to 1.2.9 2025-04-10 18:53:01 +02:00
config.ts refactor(config): 🔥 Remove dependency on c12, use confbox instead 2025-04-15 21:37:36 +02:00
CONTRIBUTING.md refactor: 🚚 Point to new docs site everywhere 2024-11-10 15:33:21 +01:00
docker-compose.yml fix: 🐛 Update example docker-compose.yml 2025-04-01 16:05:51 +02:00
Dockerfile chore: ⬆️ Upgrade Bun to 1.2.9 2025-04-10 18:53:01 +02:00
drizzle.config.ts refactor(config): ♻️ Redo config structure from scratch, simplify validation code, improve checks, add support for loading sensitive data from paths 2025-02-15 02:47:29 +01:00
entrypoint.sh fix(build): 🐛 Modify CLI to properly bundle 2024-05-08 00:24:21 +00:00
flake.lock build: 🏗️ Make Nix build great again 2025-04-14 16:51:00 +02:00
flake.nix docs: 📝 Document Nix installation 2025-04-15 13:03:52 +02:00
index.ts feat: Split off queue workers into a separate worker process 2024-11-25 21:54:31 +01:00
LICENSE Add better README 2023-09-14 15:42:56 -10:00
package.json refactor(config): 🔥 Remove dependency on c12, use confbox instead 2025-04-15 21:37:36 +02:00
pnpm-lock.yaml refactor(config): 🔥 Remove dependency on c12, use confbox instead 2025-04-15 21:37:36 +02:00
pnpm-workspace.yaml refactor(config): 🔥 Remove dependency on c12, use confbox instead 2025-04-15 21:37:36 +02:00
README.md docs: 💸 Add Fastly sponsorship note 2025-02-15 14:43:17 +01:00
routes.ts test: 🧪 Fix failing tests due to incorrect cwd resolving 2025-04-14 17:30:01 +02:00
shell.nix feat: nix shell 2024-05-13 02:30:52 +02:00
tsconfig.json refactor(api): 🚚 Use api/ for API routes instead of server/api/ 2024-08-27 16:37:23 +02:00
types.d.ts refactor(api): 🎨 Improve Markdown parsing with markdown-it instead of marked 2024-04-22 11:02:09 -10:00
Worker.Dockerfile chore: ⬆️ Upgrade Bun to 1.2.9 2025-04-10 18:53:01 +02:00
worker.ts build: 🏗️ Package Worker 2025-04-14 17:13:36 +02:00

Versia Server

TypeScript logo PostgreSQL logo Docker logo Bun logo VSCode logo Sentry logo Linux logo

What is this?

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

Goals

  • Privacy: Versia Server 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 Versia Server. 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: Versia Server 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 Versia Server. The design is non-monolithic, and is built to be as fast as possible.
  • Mastodon API compatibility: Versia Server 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, Versia Server 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: Versia Server should not be bloated with unnecessary features, packages, dependencies or code. It should be as lightweight as possible, while still being feature-rich.

Features

  • Versia Working Draft 4 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
  • Users can upload their own emojis for themselves
  • 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.
  • Advanced moderation tools (work in progress)
  • Fully compliant Mastodon API support (partial)
  • Glitch-SOC extensions
  • Full compatibility with many clients such as Megalodon
  • Ability to use your own frontends
  • Non-monolithic architecture, microservices can be hosted in infinite amounts on infinite servers
  • Ability to use all your threads
  • Support for SSO providers, as well as SSO-only registration.
  • Fully written in TypeScript and thoroughly unit tested
  • Automatic signed container builds for easy deployment
  • Docker and Podman supported
  • Invisible, Proof-of-Work local CAPTCHA for API requests
  • Advanced Roles and Permissions API.
  • HTTP proxy support
  • Tor hidden service support
  • Sentry logging support
  • Ability to change the domain name in a single config change, without any database edits

Screenshots

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

How do I run it?

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

Contributing

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

Federation

The following extensions are currently supported or being worked on:

  • pub.versia:custom_emojis: Custom emojis
  • pub.versia:instance_messaging: Instance Messaging
  • pub.versia:polls: Polls
  • pub.versia:share: Share

API

Versia Server 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 for API

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

Versia Server API

For Versia Server's own custom API, please see the API documentation.

License

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

All Versia assets (icon, logo, banners, etc) are licensed under CC-BY-NC-SA-4.0

Thanks!

Thanks to Fastly for providing us with support and resources to build Versia!


Fastly Logo