An almost stable Matrix client. https://app.sable.moe
  • TypeScript 98.9%
  • JavaScript 0.5%
  • CSS 0.2%
  • Nix 0.1%
Find a file
7w1 19e3dbcf3c
Fix math parsing in color (#910)
<!-- Please read
https://github.com/SableClient/Sable/blob/dev/CONTRIBUTING.md before
submitting your pull request -->

### Description

<!-- Please include a summary of the change. Please also include
relevant motivation and context. List any dependencies that are required
for this change. -->

Fixes math parsing inside of color blocks not being parsed as math with
color.

#### Type of change

- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] This change requires a documentation update

### Checklist:

- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings

### AI disclosure:

- [ ] Partially AI assisted (clarify which code was AI assisted and
briefly explain what it does).
- [ ] Fully AI generated (explain what all the generated code does in
moderate detail).
<!-- Write any explanation required here, but do not generate the
explanation using AI!! You must prove you understand what the code in
this PR does. -->
2026-05-31 19:46:56 -05:00
.changeset changeset 2026-05-28 17:41:06 -05:00
.github update latest and dev tags 2026-05-21 19:48:01 -05:00
.vscode enable file nesting in explorer with custom patterns 2026-05-20 17:09:32 +02:00
contrib feat(sentry): initialize SDK, performance instrumentation, developer settings, and error capture 2026-03-15 23:40:58 -04:00
docs feat(sentry): switch crash reporting from opt-out to opt-in 2026-03-17 09:03:12 -04:00
infra chore: migrate package manager from npm to pnpm 2026-03-11 15:19:09 +01:00
public Introduce new Sable logo! 2026-05-13 19:26:40 -05:00
scripts Add script to replace logo 2026-05-13 19:26:20 -05:00
src fix math inside of color blocks 2026-05-28 16:37:02 -05:00
.dockerignore ci(docker): build site once and package per-arch 2026-03-07 00:54:17 +00:00
.gitattributes Create .gitattributes 2026-03-05 22:34:11 -06:00
.gitignore feat: add nix flake 2026-05-08 18:04:24 +02:00
.node-version Merge upstream 2026-03-04 19:21:00 -06:00
.nvmrc fix: badge positioning and alignment across sidebar components 2026-03-12 14:25:32 -04:00
build.config.ts feat: URL navigation in auth (#1603) 2024-01-21 18:20:56 +05:30
Caddyfile minimal fix 2026-05-01 04:59:25 +03:00
CHANGELOG.md chore: prepare release 1.17.0 2026-05-22 01:49:13 +00:00
CODE_OF_CONDUCT.md Update CODE_OF_CONDUCT.md 2026-03-13 21:38:40 -05:00
config.json Remove relic of a bygone era 2026-05-04 21:50:11 -05:00
CONTRIBUTING.md minimal fix 2026-05-01 04:59:25 +03:00
Dockerfile fix: docker images 2026-03-12 00:31:27 +01:00
flake.lock feat: add nix flake 2026-05-08 18:04:24 +02:00
flake.nix chore(nix): auto-fix nix hashes 2026-05-13 01:42:09 +00:00
index.html Make icon filenames generic 2026-05-13 18:28:20 -05:00
knip.json minimal fix 2026-05-01 04:59:25 +03:00
knope.toml minimal fix 2026-05-01 04:59:25 +03:00
LICENSE Change license to AGPLv3 (#1115) 2023-02-24 17:28:04 +05:30
oxfmt.config.ts feat: add nix flake 2026-05-08 18:04:24 +02:00
oxlint.config.ts minimal fix 2026-05-01 04:59:25 +03:00
package.json chore: prepare release 1.17.0 2026-05-22 01:49:13 +00:00
pnpm-lock.yaml chore: bump fast-uri from 3.1.0 to 3.1.2 2026-05-09 14:23:31 +00:00
pnpm-workspace.yaml chore: merge dev into hazre/fix/sidebar-count-badge-positioning 2026-03-25 15:47:50 +01:00
README.md add deploy setting defaults 2026-05-09 17:49:48 -05:00
TRADEMARKS.md formatting 2026-05-13 12:42:00 -05:00
tsconfig.json refactor(unstable prefixes): inital refactor to clean up the codebase 2026-05-05 16:47:02 +02:00
vite.config.ts refactor(unstable prefixes): inital refactor to clean up the codebase 2026-05-05 16:47:02 +02:00
vitest.config.ts refactor: standardize usage of unstable prefixes across components 2026-05-05 18:21:36 +02:00

Sable

A Matrix client built to enhance the user experience with quality-of-life features, cosmetics, utilities, and sheer usability. See the changelog.

Soon to be replaced desktop apps can be downloaded here. They auto-update by pulling the website.

Join our matrix space here to discuss features, issues, or meowing.

Forked from Cinny.

Getting started

The web app is available at app.sable.moe and gets updated on frequently, as soon as a feature is deemed stable.

You can also download our desktop app for windows and linux from releases.

Self-hosting

You have a few options for self hosting, you can:

  1. Run the prebuilt docker container.
  2. Deploy on a site like GitLab Pages. Jae has a guide here.
  3. Build it yourself.

Docker

Prebuilt images are published to ghcr.io/sableclient/sable.

  • latest tracks the current dev branch image.
  • X.Y.Z tags are versioned releases.
  • X.Y tags float within a release line.
  • Pushes to dev also publish a short commit SHA tag.

Run the latest image with:

docker run --rm -p 8080:8080 ghcr.io/sableclient/sable:latest

Then open http://localhost:8080.

If you want to override the bundled config.json, mount your own file at /app/config.json:

services:
  sable:
    image: ghcr.io/sableclient/sable:latest
    ports:
      - '8080:8080'
    volumes:
      - ./config.json:/app/config.json:ro

Build it yourself

To build and serve Sable yourself with nginx, clone this repo and build it:

pnpm i # Installs all dependencies
pnpm run build # Compiles the app into the dist/ directory

After that, you can copy the dist/ directory to your server and serve it.

  • In the config.json, you can modify the default homeservers, feature rooms/spaces, toggle the account switcher, and toggle experimental simplified slilding sync support.

Optional default client settings

While the default settings are recommended for most users, you can optionally add a top-level "settingsDefaults" object whose keys match client settings (only fields you want to override) to override them. The default settings for any new logins will match these. Existing keys in local storage or users who chose to sync settings with their account data will still have their settings set.

For example:

{
  "settingsDefaults": {
    "hour24Clock": true,
    "pageZoom": 110,
    "messageLayout": 2,
    "rightSwipeAction": "members",
    "captionPosition": "below",
    "renderUserCards": "both",
    "jumboEmojiSize": "large"
  }
}

Invalid or unknown keys are ignored.

  • To deploy on subdirectory, you need to rebuild the app youself after updating the base path in build.config.ts.
    • For example, if you want to deploy on https://sable.moe/app, then set base: '/app'.

Local development

Tip

We recommend using a version manager as versions change quickly. fnm is a great cross-platform option (Windows, macOS, and Linux). NVM on Windows and nvm on Linux/macOS are also good choices. Use the version defined in .node-version.

Execute the following commands to start a development server:

fnm use --corepack-enabled # Activates the Node version and enables corepack
# If you not using fnm, install corepack manually: npm install --global corepack@latest
corepack install # Installs the pnpm version specified in package.json
pnpm i # Installs all dependencies
pnpm run dev # Serve a development version

To build the app:

pnpm run build # Compiles the app into the dist/ directory

Deployment and infrastructure

Deployment workflows and infrastructure details live in infra/README.md.