2023-01-10 10:40:43 +00:00
# Semaphore ⛳
2023-01-10 10:35:15 +00:00
2023-01-10 14:23:54 +00:00
> Continuation of the [Pinafore project](https://github.com/nolanlawson/pinafore). To keep from burning out it will have restricted input from wider community, more details will follow.
2023-01-10 10:40:43 +00:00
2023-01-10 10:35:15 +00:00
Credit must go to Nolan and the original contributors for their excellent work.
2018-06-03 21:36:33 +01:00
An alternative web client for [Mastodon ](https://joinmastodon.org ), focused on speed and simplicity.
2018-04-02 07:15:52 +01:00
2023-01-10 14:22:26 +00:00
Semaphore is available at [semaphore.social ](https://semaphore.social ). Beta releases are at [beta.semaphore.social ](https://beta.semaphore.social ).
2018-04-02 07:15:52 +01:00
2023-01-10 14:23:54 +00:00
See the [user guide ](https://github.com/semaphore-social/semaphore/blob/master/docs/User-Guide.md ) for basic usage. See the [admin guide ](https://github.com/semaphore-social/semaphore/blob/master/docs/Admin-Guide.md ) if Semaphore cannot connect to your instance.
2018-04-02 07:15:52 +01:00
2023-01-10 14:21:38 +00:00
For updates and support, follow [@semaphore@fosstodon.org ](https://fosstodon.org/@semaphore ).
2018-04-21 18:59:52 +01:00
2018-04-02 07:15:52 +01:00
## Browser support
2023-01-10 14:21:38 +00:00
Semaphore supports the latest versions of the following browsers:
2018-04-02 07:15:52 +01:00
- Chrome
- Edge
- Firefox
- Safari
Compatible versions of each (Opera, Brave, Samsung, etc.) should be fine.
2018-02-18 22:38:10 +00:00
2018-03-11 19:55:46 +00:00
## Goals and non-goals
### Goals
- Support the most common use cases
2018-12-19 04:50:30 +00:00
- Small page weight
- Fast even on low-end devices
- Accessibility
- Offline support in read-only mode
2018-03-11 19:55:46 +00:00
- Progressive Web App features
- Multi-instance support
- Support latest versions of Chrome, Edge, Firefox, and Safari
2020-11-29 22:13:27 +00:00
- Support non-Mastodon instances (e.g. Pleroma) as well as possible
- Internationalization
2018-03-11 19:55:46 +00:00
2018-12-19 04:50:30 +00:00
### Secondary / possible future goals
2018-03-11 19:55:46 +00:00
2018-12-19 04:50:30 +00:00
- Serve as an alternative frontend tied to a particular instance
2018-03-21 15:39:06 +00:00
- Offline search
2018-03-11 19:55:46 +00:00
### Non-goals
- Supporting old browsers, proxy browsers, or text-based browsers
- React Native / NativeScript / hybrid-native version
2018-12-19 04:50:30 +00:00
- Android/iOS apps (using Cordova or similar)
2018-03-11 19:55:46 +00:00
- Full functionality with JavaScript disabled
- Emoji support beyond the built-in system emoji
- Multi-column support
- Admin/moderation panel
2018-12-19 04:50:30 +00:00
- Offline support in read-write mode (would require sophisticated sync logic)
2018-03-11 19:55:46 +00:00
2018-04-15 17:48:52 +01:00
## Building
2018-02-18 22:38:10 +00:00
2023-01-10 14:21:38 +00:00
Semaphore requires [Node.js ](https://nodejs.org/en/ ) and [Yarn ](https://yarnpkg.com ).
2018-08-25 21:04:41 +01:00
2023-01-10 14:21:38 +00:00
To build Semaphore for production, first install dependencies:
2018-04-15 17:48:52 +01:00
2019-03-02 22:44:19 +00:00
yarn --production --pure-lockfile
2019-02-13 05:49:11 +00:00
Then build:
2019-02-10 19:30:00 +00:00
yarn build
2019-02-13 05:49:11 +00:00
Then run:
2019-02-13 07:12:50 +00:00
PORT=4002 node server.js
2018-04-15 17:48:52 +01:00
2018-05-25 03:59:48 +01:00
### Docker
2018-12-19 04:50:30 +00:00
To build a Docker image for production:
2018-05-25 03:59:48 +01:00
docker build .
docker run -d -p 4002:4002 [your-image]
2023-01-10 14:21:38 +00:00
Now Semaphore is running at `localhost:4002` .
2018-04-15 17:48:52 +01:00
2020-05-08 03:45:52 +01:00
### docker-compose
Alternatively, use docker-compose to build and serve the image for production:
docker-compose up --build -d
The image will build and start, then detach from the terminal running at `localhost:4002` .
2018-08-25 21:04:41 +01:00
### Updating
2023-01-10 14:21:38 +00:00
To keep your version of Semaphore up to date, you can use `git` to check out the latest tag:
2018-08-25 21:04:41 +01:00
git checkout $(git tag -l | sort -Vr | head -n 1)
2018-04-15 17:48:52 +01:00
2018-12-11 15:31:48 +00:00
### Exporting
2023-01-10 14:21:38 +00:00
Semaphore is a static site. When you run `yarn build` , static files will be
2019-06-22 19:32:17 +01:00
written to `__sapper__/export` .
2018-12-11 15:31:48 +00:00
2022-11-12 20:28:19 +00:00
It is _not_ recommended to directly expose these files when self-hosting. Instead, you should use `node server.js` (e.g. with an
nginx or Apache proxy in front). This adds several things you don't get from the raw static files:
2018-12-11 15:31:48 +00:00
2022-11-12 20:28:19 +00:00
- [CSP headers ](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP ) (important for security)
- Certain dynamic routes (less important because of Service Worker managing routing, but certain things could break if Service Workers are disabled in the user's browser)
2023-01-10 14:23:54 +00:00
Having an [nginx config generator ](https://github.com/semaphore-social/semaphore/issues/1878 ) is currently an open issue.
2018-12-11 15:31:48 +00:00
2018-04-15 17:48:52 +01:00
## Developing and testing
2023-01-10 14:23:54 +00:00
See [CONTRIBUTING.md ](https://github.com/semaphore-social/semaphore/blob/master/CONTRIBUTING.md ) for
2023-01-10 14:21:38 +00:00
how to run Semaphore in dev mode and run tests.
2018-05-04 17:19:44 +01:00
## Changelog
2023-01-10 14:23:54 +00:00
For a changelog, see the [GitHub releases ](http://github.com/semaphore-social/semaphore/releases/ ).
2018-12-19 04:50:30 +00:00
2023-01-10 14:23:54 +00:00
For a list of breaking changes, see [BREAKING_CHANGES.md ](https://github.com/semaphore-social/semaphore/blob/master/BREAKING_CHANGES.md ).
2019-02-10 19:30:00 +00:00
2018-12-19 04:50:30 +00:00
2023-01-10 14:21:38 +00:00
## What's with the name?
2023-01-10 10:35:15 +00:00
2023-01-10 14:21:38 +00:00
Semaphore is a fork of Pinafore and apparently they were going to call the boat H.M.S Semaphore but thought Pinafore was more fun.
Bonus - semaphore is an old communication method.