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!
- Infinite scrolling
- View posts in an overlay or side-by-side with the feed in a second column so you don't lose your spot
- Customizable theme hue
- Powerful account switcher, login to different accounts across the same or different instances simultaneously in different browser tabs
- Most mod tools
- Supports most markdown formatting
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!
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
.
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
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.
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.