2024-08-05 21:47:49 +00:00
# Flotilla
2024-08-01 23:49:32 +00:00
2024-11-14 23:43:55 +00:00
A discord-like nostr client based on the idea of "relays as groups".
2024-09-23 17:28:33 +00:00
2025-05-05 17:11:02 +00:00
If you would like to be interoperable with Flotilla, please check out this guide: https://habla.news/u/hodlbod@coracle.social/1741286140797
2024-11-15 00:02:20 +00:00
2025-05-19 22:17:26 +00:00
## Environment
2026-03-16 20:36:06 +00:00
You can also optionally create an `.env.local` file and populate it with the following environment variables (see `.env.template` for examples):
2025-05-19 22:17:26 +00:00
2026-06-10 00:19:44 +00:00
**Platform branding**
2025-10-28 23:08:48 +00:00
- `VITE_PLATFORM_URL` - The url where the app will be hosted
2025-05-19 22:17:26 +00:00
- `VITE_PLATFORM_NAME` - The name of the app
2026-03-03 19:52:22 +00:00
- `VITE_PLATFORM_LOGO` - A logo url for the app. Can be a local path or https link. Must be a PNG file.
2026-06-30 17:02:02 +00:00
- `VITE_PLATFORM_ACCENT` - A hex color for the app's accent color (used only for generated manifest, for more control create a custom theme file)
2025-05-19 22:17:26 +00:00
- `VITE_PLATFORM_DESCRIPTION` - A description of the app
2026-06-10 00:19:44 +00:00
- `VITE_PLATFORM_TERMS` - URL to your terms of service page
- `VITE_PLATFORM_PRIVACY` - URL to your privacy policy page
2026-08-13 19:57:42 +00:00
- `VITE_PLATFORM_LOGEE` - A hex pubkey which will receive logs users send from their privacy settings
2026-06-10 00:19:44 +00:00
**Platform mode**
- `VITE_PLATFORM_RELAYS` - A comma-separated list of relay urls that will make flotilla operate in "platform mode". Disables all space browse/add/select functionality and makes the first platform relay the home page.
**Defaults**
- `VITE_DEFAULT_PUBKEYS` - A comma-separated list of hex pubkeys for bootstrapping web of trust
2026-06-30 17:49:17 +00:00
- `VITE_DEFAULT_SPACES` - A comma-separated list of relay urls that new users will be automatically joined to on signup. Each one may optionally include an invite code, delimited by `|` , e.g. `my.space.com|CODE` .
2026-06-10 00:19:44 +00:00
- `VITE_DEFAULT_RELAYS` - A comma-separated list of relay urls used as default outbox/inbox relays
- `VITE_DEFAULT_MESSAGING_RELAYS` - A comma-separated list of relay urls used for encrypted direct messages
- `VITE_DEFAULT_BLOSSOM_SERVERS` - A comma-separated list of blossom server urls used for file uploads
**Infrastructure**
- `VITE_INDEXER_RELAYS` - A comma-separated list of relay urls used for user profile/key lookup
- `VITE_SIGNER_RELAYS` - A comma-separated list of relay urls used for NIP-55 remote signers
- `VITE_BLOCKED_RELAYS` - A comma-separated list of relay urls that will be blocked
- `VITE_PUSH_SERVER` - URL of the push notification server
- `VITE_PUSH_BRIDGE` - WebSocket URL of the push notification relay bridge
- `VITE_POMADE_SIGNERS` - A comma-separated list of Pomade signer server URLs (3+ required to enable email signup)
- `VITE_THUMBNAIL_URL` - URL of the image thumbnail service
2025-05-19 22:17:26 +00:00
2026-08-18 22:20:30 +00:00
These values **won't** be used for a built version. Instead, env variables should be provided to `scripts/build.sh` directly or to the built container.
2026-04-02 21:00:07 +00:00
2025-05-19 22:17:26 +00:00
If you're deploying a custom version of flotilla, be sure to remove the `plausible.coracle.social` script from `app.html` . This sends analytics to a server hosted by the developer.
## Development
2026-04-02 20:25:18 +00:00
See [CONTRIBUTING.md ](CONTRIBUTING.md ).
2025-05-19 22:17:26 +00:00
2026-09-07 17:42:52 +00:00
### Desktop development (Linux)
The Electron target is a development baseline. It has no supported installers,
release pipeline, packaging configuration, or auto-update setup.
**Use disposable accounts only.** The current secure-storage plugin falls back to
unencrypted `localStorage` on desktop. This is not secure desktop credential or
private-key storage. OS-protected secret storage is required before distribution.
Install the root dependencies with pnpm and the Electron subproject with npm,
following the platform's documented setup. Installing that subproject separately avoids
downloading Electron for ordinary web/mobile installs:
```sh
pnpm install --frozen-lockfile
npm ci --prefix electron
pnpm run build:desktop
pnpm run dev:desktop
```
`build:desktop` builds the frontend without PWA/service-worker registration,
synchronizes the Electron platform, and compiles its TypeScript entrypoint. It uses
the same branding environment as the web build and does not synchronize Android
or iOS. `dev:desktop` opens those built assets; rerun `build:desktop` after frontend
changes. Live reload is deferred to the desktop configuration work.
Run `pnpm run test:desktop` after building to check the Linux desktop window. On a
2026-09-07 19:42:39 +00:00
headless Linux runner, use `xvfb-run -a pnpm run test:desktop` ; Electron links
against GTK, which Playwright's chromium dependencies do not cover, so such a box
also needs `libgtk-3-0t64` . The test drops Chromium's sandbox when it runs as
root, because Chromium refuses to start that way. The separate smoke
2026-09-07 17:42:52 +00:00
suite does not start a web dev server or test installers. Windows and macOS desktop
behavior is not verified by the Linux test. CI builds and runs this suite under
Xvfb in a separate desktop job.
2025-05-19 22:17:26 +00:00
## Deployment
2024-10-09 16:55:09 +00:00
2025-01-24 17:49:14 +00:00
To run your own Flotilla, it's as simple as:
2025-05-19 17:06:43 +00:00
```sh
pnpm install
pnpm run build
2026-05-04 21:02:56 +00:00
pnpm run start
2025-05-19 17:06:43 +00:00
```
Or, if you prefer to use a container:
```sh
2026-05-12 15:46:50 +00:00
docker run -d -p 3000:3000 gitea.coracle.social/coracle/flotilla:latest
2025-05-19 17:06:43 +00:00
```
Alternatively, you can copy the build files into a directory of your choice and serve it yourself:
```sh
mkdir ./mount
2026-05-12 15:46:50 +00:00
docker run -v ./mount:/app/mount gitea.coracle.social/coracle/flotilla:latest bash -c 'cp -r build/* mount'
2025-05-19 17:06:43 +00:00
```