A from-scratch rewrite of Sable, with Svelte and Rust.
Join the Matrix space at #sable:sable.moe to discuss the project and meowing.
The development web build is deployed to next.sable.moe.
See infra/README.md for the Cloudflare Worker and OpenTofu
setup.
mise manages Node, pnpm, Rust, and other tooling.
mise install
mise run setup # pnpm install + git hooks
mise run dev # SvelteKit on http://localhost:3000mise run dev builds the development WASM bundle first. While editing Rust in
another terminal, run mise run wasm:watch; Vite reloads after each regenerated
bundle. Production builds generate the optimised WASM bundle automatically.
pnpm test:e2e generates its WASM bundle in src/generated/wasm-e2e/, so it
can run while the development server is using src/generated/wasm/.
Run mise tasks for the full list.
Native builds use Tauri. Targets: Windows, macOS, Linux, Android, and iOS.
mise run tauri:setup # Shared Rust/system dependencies, including Linux packages
mise run tauri:icons # Regenerate native icons after changing the logo SVG
mise run tauri dev # Run the app for the current desktop OS
mise run tauri:setup:windows # Windows: Visual Studio Build Tools + WebView2
mise run tauri:setup:macos # macOS: Xcode
mise run tauri:setup:android # Android: SDK packages + NDK
mise run tauri:setup:ios # iOS: Xcode project + CocoaPods (macOS)Every push to main publishes bundles for all five targets as a distinct
nightly prerelease.
Linux x86_64 and Android build here; macOS, Windows, iOS and Linux aarch64
build on the GitHub mirror and attach their bundles, with attestations, to the
same release. Tagged releases are not set up yet.
The web build ships with every release as sable-next-<version>-web.tar.gz.
Extract it into your web root to serve the app yourself; see
Caddyfile for an example configuration.
Start a desktop app with --proxy to send all of its traffic through an HTTP
or SOCKS5 proxy, for example --proxy=socks5://127.0.0.1:9050. On Windows, add
it to the end of the shortcut's Target, after the quoted path.
A SOCKS5 proxy also resolves host names, so lookups do not leave the proxy. An
invalid value shows an error and quits rather than starting without the proxy.
Nightly builds have their own Flatpak remote, rebuilt from main on every push:
flatpak remote-add --if-not-exists sable-next-nightly https://sableclient.github.io/sable-next/sable-next-nightly.flatpakrepo
flatpak install sable-next-nightly moe.sable.next.NightlyBuilt by the build-nightly-flatpak and publish-nightly-flatpak jobs in
tauri-build.yml.
APKs ship with every build, and Obtainium updates them straight from Forgejo. Each build also publishes an obtainium.json app config.
- Install Obtainium.
- Tap Add to Obtainium above. It enables prereleases and selects the nightly build releases.
- Or download
obtainium.jsonand import it with Import/Export → Import from file.
Apps added before the move to per-build prereleases have to be removed and re-added.
iOS builds are unsigned IPAs distributed through AltStore and SideStore. Each nightly publishes its IPA in its own prerelease; altstore-source.json lists them.
- Set up AltStore Classic or SideStore on your device.
- Tap a button above, or add the source manually:
- AltStore:
altstore://source?url=https://git.sable.moe/SableClient/sable-next/releases/download/nightly/altstore-source.json - SideStore:
sidestore://source?url=https://git.sable.moe/SableClient/sable-next/releases/download/nightly/altstore-source.json
- AltStore:
- Install Sable Next from the source. AltStore/SideStore re-sign the unsigned IPA with your personal development certificate at install time, so apps refresh every 7 days on a free account.
Both configs come from the obtainium and altstore jobs in tauri-build.yml.
See CONTRIBUTING.md.
AGPL-3.0-or-later, with an additional permission for App Store executables under MPL 2.0. The Sable name and logo are covered by TRADEMARKS.md.