Home

Awesome

<div align="center"> <img src="static/logo.svg?sanitize=true" width="160" height="160" alt="logo"> <h1>Alexandrite</h1> </div>

Alexandrite is a beautiful desktop-first alternative web UI for Lemmy, a social link aggregator and discussion forum for the Fediverse.

Alexandrite comes packed full of features!

Support Development

A lot of time and effort has gone into Alexandrite. If you would like to support development you can Buy Me a Coffee. I really appreciate all the support!

Self Hosting

Alexandrite supports self hosting with a few configuration options. Check out the example environment variable config to see what options can be passed as arguments to docker.

Using Docker

The easiest way to host Alexandrite would be using a prebuilt image, or building from source using the provided Dockerfile.

The app listens inside the container to port 3000 and doesn't provide HTTPs, you'll probably want to configure your own reverse proxy between the internet and Alexandrite to provide HTTPS.

Run using:

docker run -p 3000:3000 ghcr.io/sheodox/alexandrite:latest

Or, with some customized options:

docker run -p 3000:3000 --env 'ALEXANDRITE_DEFAULT_INSTANCE=programming.dev' ghcr.io/sheodox/alexandrite:latest

Or as part of a docker compose setup:

version: '3.7'
services:
  # ...
  alexandrite:
    image: ghcr.io/sheodox/alexandrite:latest
    ports:
      - 3000:3000
    environment:
      # example config only allowing logins to example.com
      # with no links to Lemmy docs, or an instance list
      ALEXANDRITE_DEFAULT_INSTANCE: example.com
      ALEXANDRITE_WELCOME_LEMMY_HELP: false
      ALEXANDRITE_WELCOME_INSTANCE_HELP: false
      ALEXANDRITE_FORCE_INSTANCE: example.com

Serverless

You can alternatively host Alexandrite on the serverless platforms supported by Sveltekit's adapter-auto. It should be pretty low on resource usage, as SSR is disabled.

Contributing

PRs are welcome! The app is written in Svelte using Sveltekit, running with SSR disabled, as all interactions with Lemmy are done client-side using lemmy-js-client.

One small warning, I really enjoy figuring out how things work and doing things myself for the learning experience instead of using third party libraries. The UI is written using my own very sparsely documented UI/component library that is a mix of pre-built components and Bootstrap/Tailwind-like utility classes. The virtualized list renderer is also custom built.