- TypeScript 98.1%
- CSS 1%
- JavaScript 0.7%
- HTML 0.1%
### Description This pull request addresses issues with ID handling and generation for Personas by standardizing the way short IDs are generated and used throughout the codebase. It replaces the use of `crypto.randomUUID()` with a new utility function, `generateShortId`, ensuring IDs are shorter and more consistent. Additionally, it improves command parsing for Persona-related commands. #### ID Generation Improvements - Introduced a new utility function `generateShortId` in `src/app/utils/shortIdGen.ts` to generate short, consistent IDs by truncating UUIDs. - Replaced all instances of `crypto.randomUUID()` with `generateShortId(5)` when creating new Persona or member IDs in `PerMessageProfileOverview.tsx` and `PKitCommandMessageHandler.ts`, ensuring all IDs are now short and uniform. #### Command Parsing Enhancements - Updated regular expressions in `useCommands.ts` to use `\S+` instead of `\w+` for Persona IDs, allowing IDs with a broader set of characters and improving robustness of command parsing. Fixes #582 #### 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: - [x] My code follows the style guidelines of this project - [x] 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 - [x] 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. --> No AI was used for this PR |
||
|---|---|---|
| .changeset | ||
| .github | ||
| .vscode | ||
| contrib | ||
| docs | ||
| infra | ||
| public | ||
| scripts | ||
| src | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .node-version | ||
| .nvmrc | ||
| .prettierignore | ||
| .prettierrc.json | ||
| build.config.ts | ||
| Caddyfile | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| config.json | ||
| CONTRIBUTING.md | ||
| Dockerfile | ||
| eslint.config.js | ||
| index.html | ||
| knip.json | ||
| knope.toml | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| tsconfig.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
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:
- Run the prebuilt docker container.
- Deploy on a site like GitLab Pages. Jae has a guide here.
- Build it yourself.
Docker
Prebuilt images are published to ghcr.io/sableclient/sable.
latesttracks the currentdevbranch image.X.Y.Ztags are versioned releases.X.Ytags float within a release line.- Pushes to
devalso 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. -
To deploy on subdirectory, you need to rebuild the app youself after updating the
basepath inbuild.config.ts.- For example, if you want to deploy on
https://sable.moe/app, then setbase: '/app'.
- For example, if you want to deploy on
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.