No description
  • Svelte 80.5%
  • TypeScript 18.6%
  • SCSS 0.6%
  • Dockerfile 0.1%
  • JavaScript 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2025-02-14 17:30:09 -06:00
.github/workflows Multi-platform image deployment with GH workflow 2023-09-12 16:42:24 +00:00
docs Add screenshot 2023-06-24 14:20:15 -05:00
src Use a sheodox-ui select for the theme selection 2025-02-14 17:30:09 -06:00
static Theme updates, left aligned card-style vote buttons, refresh button on feeds 2025-01-17 19:07:56 -06:00
.dockerignore Add a Dockerfile and some environment variable configuration options 2023-07-27 23:50:05 -05:00
.env.example Add account creation 2023-08-02 20:16:04 -05:00
.eslintignore Initial commit 2023-06-24 14:16:19 -05:00
.eslintrc.cjs Add "Auto" feed layout, linting 2023-07-12 16:47:10 -05:00
.gitignore Initial commit 2023-06-24 14:16:19 -05:00
.npmrc Initial commit 2023-06-24 14:16:19 -05:00
.prettierignore Add "Auto" feed layout, linting 2023-07-12 16:47:10 -05:00
.prettierrc Instance switcher improvements, siteMeta as a store, routing improvements 2023-07-26 17:15:16 -05:00
Dockerfile Bump image node version 2025-02-04 16:37:41 -06:00
LICENSE Create LICENSE 2023-07-21 14:21:20 -05:00
package-lock.json Use a sheodox-ui select for the theme selection 2025-02-14 17:30:09 -06:00
package.json Use a sheodox-ui select for the theme selection 2025-02-14 17:30:09 -06:00
README.md Link to the Dockerfile 2023-08-02 17:26:35 -05:00
svelte.config.js Add some CSP headers 2024-03-04 16:41:42 -06:00
tsconfig.json Initial commit 2023-06-24 14:16:19 -05:00
vite.config.ts Light theme, more theme customization 2023-08-14 21:44:53 -05:00

logo

Alexandrite

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

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.