2023-09-02 16:17:15 +02:00
<!--
This README is part of Share₂Fedi
https://github.com/kytta/share2fedi
SPDX-FileCopyrightText: © 2023 Nikita Karamov < me @kytta .dev >
SPDX-License-Identifier: CC0-1.0
-->
2022-11-14 13:34:13 +01:00
< h1 align = "center" > < img src = "assets/share2fedi.svg" width = "520" height = "160" alt = "Share2Fedi" > < / h1 >
2020-09-23 16:08:21 +02:00
2022-11-14 13:34:13 +01:00
> Instance-agnostic share page for the Fediverse.
2020-09-23 18:39:38 +02:00
2023-08-28 00:31:43 +02:00
**[Share₂Fedi]** (pronounced ‘ share-to-fedi’ ) allows you to share stuff on
2023-08-28 01:11:45 +02:00
Mastodon, Misskey, Friendica, and other federated social networks,
2023-08-28 00:31:43 +02:00
instance-agnostic. Just type in the post text and the instance URL, and click
2023-08-30 12:24:46 +02:00
‘ Post’ !
2021-01-30 15:12:32 +01:00
2023-03-17 14:06:30 +01:00
Or, open this page with the prefilled `text` URL parameter—it will be
2023-08-29 17:00:53 +02:00
automatically inserted into the text field. The same goes for the `instance` and
`lang` URL parameters. This can be used to build custom share buttons for the
federated social networks:
2020-09-23 18:39:38 +02:00
```html
2023-08-28 00:31:43 +02:00
< a href = "https://s2f.kytta.dev/?text=Hello%20world!&instance=mastodon.xyz" >
2022-11-14 13:39:51 +01:00
Share on mastodon.xyz
2020-09-23 18:39:38 +02:00
< / a >
```
2023-03-17 14:06:30 +01:00
The instance URL can be saved in your `localStorage` to be automatically
appended if used later—handy!
2021-01-30 15:12:32 +01:00
2023-08-28 00:36:01 +02:00
> [!IMPORTANT]
> I know I provide [a Share₂Fedi instance](https://s2f.kytta.dev) for others to
> use, but if you want to use Share₂Fedi for your share buttons, **please
> consider self-hosting it**. Although it's free now, running my instance may
> become too expensive for me in the future.
2021-08-28 16:03:58 +02:00
## Hosting
2023-03-18 03:02:41 +01:00
### Vercel, Netlify, Cloudflare Pages
2021-08-28 16:03:58 +02:00
2023-08-30 12:24:46 +02:00
Share₂Fedi was designed to run on [Vercel ](https://vercel.com/ ), but you can
2023-03-18 03:02:41 +01:00
also run it on [Netlify ](https://www.netlify.com/ ) or
[Cloudflare Pages ](https://pages.cloudflare.com/ ). To deploy it yourself (it's
free!), you can use the following buttons:
2021-08-28 16:03:58 +02:00
2023-03-18 03:02:41 +01:00
[![Deploy to Vercel ](https://vercel.com/button )](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fkytta%2Fshare2fedi)
[![Deploy to Netlify ](https://www.netlify.com/img/deploy/button.svg )](https://app.netlify.com/start/deploy?repository=https://github.com/kytta/share2fedi)
2023-08-30 12:41:06 +02:00
To deploy to Cloudflare Pages, fork the repository and
2023-03-18 03:02:41 +01:00
[follow the instructions ](https://docs.astro.build/en/guides/deploy/cloudflare/#how-to-deploy-a-site-with-git ).
2021-08-28 16:03:58 +02:00
### Host it yourself
2023-08-30 12:24:46 +02:00
Self-hosting Share₂Fedi outside of SSR providers requires some extra setup:
2021-08-28 16:03:58 +02:00
2023-08-30 12:24:46 +02:00
**Prerequisites:** modern Node.js (v18 is recommended), `pnpm` . You can host
with Deno, but Node.js is still required to build Share₂Fedi.
2021-08-28 16:03:58 +02:00
2023-03-18 02:25:06 +01:00
1. Install dependencies.
2021-08-28 16:03:58 +02:00
```sh
2023-03-16 15:21:16 +01:00
pnpm install
```
2023-03-18 02:25:06 +01:00
2. Build.
2023-03-16 15:21:16 +01:00
```sh
pnpm build
2021-08-28 16:03:58 +02:00
```
2023-08-28 00:31:43 +02:00
If you want to use Deno, add the `--s2f-use-deno` flag:
```sh
pnpm build --s2f-use-deno
```
2023-03-18 02:25:06 +01:00
3. Run server.
> By default, this will only listen on localhost port 3000. To enable
2023-08-30 12:41:06 +02:00
> listening on a certain host and/or port, set the `HOST` and `PORT`
2023-03-18 02:25:06 +01:00
> environment variables, respectively.
2021-08-28 16:03:58 +02:00
2022-03-18 12:16:21 +01:00
```sh
2023-03-18 02:25:06 +01:00
node dist/server/entry.mjs
2022-03-18 12:16:21 +01:00
```
2022-03-18 12:39:31 +01:00
2023-03-19 12:39:39 +01:00
In production, you might want to use a process manager, like
[PM2 ](https://pm2.keymetrics.io/docs/usage/quick-start/ ):
2022-03-18 12:16:21 +01:00
2021-08-28 16:03:58 +02:00
```sh
2023-03-19 12:39:39 +01:00
# Start the app, restart on file changes (except node_modules)
pm2 start dist/server/entry.mjs --name "Share2Fedi" --watch --ignore-watch="node_modules"
2021-08-28 16:03:58 +02:00
```
2022-03-17 14:04:44 +01:00
2023-03-18 02:25:06 +01:00
> More information about self-hosting an Astro website with Node:
> https://docs.astro.build/en/guides/integrations-guide/node/#standalone
2023-08-28 00:31:43 +02:00
If you've built Share₂Fedi for Deno:
```sh
deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs
```
> More information about self-hosting an Astro website with Deno:
> https://docs.astro.build/en/guides/integrations-guide/deno/#usage
2023-03-18 02:25:06 +01:00
4. Set up a reverse proxy.
2023-03-16 15:21:16 +01:00
2023-03-18 02:25:06 +01:00
Basically, you need to run a reverse proxy that would redirect all incoming
requests to `localhost:3000` . Here's how to achieve this in various HTTP
servers:
2022-03-17 14:04:44 +01:00
2022-03-17 13:58:41 +01:00
1. Apache
2022-03-17 14:04:44 +01:00
2022-03-18 12:17:16 +01:00
```apacheconf
2023-03-18 02:25:06 +01:00
ProxyPass "/" "http://localhost:3000/"
2022-03-17 14:04:44 +01:00
```
2022-03-17 13:58:41 +01:00
2. Nginx
2022-03-18 12:17:16 +01:00
```nginxconf
2023-03-18 02:25:06 +01:00
location / {
proxy_pass http://localhost:3000/;
2022-03-17 14:04:44 +01:00
}
```
2021-08-28 16:03:58 +02:00
2022-03-18 13:04:56 +01:00
3. Caddy
2022-05-17 15:30:54 +02:00
```caddy
2023-03-18 02:25:06 +01:00
reverse_proxy :3000
2022-03-18 13:04:56 +01:00
```
2023-03-19 12:39:39 +01:00
### Docker
If you _really_ have to use Docker, there is
[a good guide on building Astro apps with Docker ](https://docs.astro.build/en/recipes/docker/ ).
**I will not** provide support for Docker-based deployments in the observable
future.
2024-02-07 13:43:44 +01:00
## Contribute
### Source code
TL;DR: `pnpm install && pnpm dev`
2024-02-07 12:54:28 +00:00
See [contributing guide ](CONTRIBUTING.md#improving-code ) for instructions on how
to contribute source code to the project, including adding new Fediverse
projects.
2024-02-07 13:43:44 +01:00
### Translations
2024-02-07 12:54:28 +00:00
Share₂Fedi uses Hosted Weblate for translations.
[You can edit translations using it's practical interface. ](https://hosted.weblate.org/engage/share2fedi/ ).
You also could do it manually by editing files in `src/i18n/translations` , but
this is NOT recommended.
2024-02-07 13:43:44 +01:00
< a href = "https://hosted.weblate.org/engage/share2fedi/" >
< img src = "https://hosted.weblate.org/widget/share2fedi/site/multi-auto.svg" alt = "Translation status" / >
< / a >
2024-02-07 14:07:26 +01:00
> [!NOTE]
> New languages do not become automatically available. For this, a
2024-02-07 12:54:28 +00:00
> separate change to our ad-hoc i18n engine has to be made. See
> [contributing guide](CONTRIBUTING.md#translating) for instructions
2024-02-07 13:43:44 +01:00
_We thank Weblate for providing Libre hosting!_
2021-01-30 15:12:32 +01:00
## See also
2023-03-17 14:06:30 +01:00
**[📯 Shareon ](https://shareon.js.org )** (lightweight, stylish, and ethical
share buttons) uses **Share₂Fedi** under the hood!
2020-09-23 19:59:55 +02:00
2021-05-13 14:24:32 +02:00
## Licence
2020-09-23 19:59:55 +02:00
2023-03-19 12:39:39 +01:00
© 2020– 2023 [Nikita Karamov]\
2023-09-02 16:17:15 +02:00
Licensed under the [GNU Affero General Public License v3.0 only][AGPL-3.0-only].
2020-09-23 19:59:55 +02:00
2022-03-17 14:04:44 +01:00
---
2021-08-29 14:10:23 +02:00
2023-03-16 10:41:55 +01:00
This project is hosted on GitHub: < https: / / github . com / kytta / share2fedi . git >
2021-08-29 14:10:23 +02:00
2023-09-02 16:17:15 +02:00
[AGPL-3.0-only]: https://spdx.org/licenses/AGPL-3.0-only.html
2022-11-14 13:39:51 +01:00
[Nikita Karamov]: https://www.kytta.dev
[Share₂Fedi]: https://s2f.kytta.dev/