This is a project to create an "easy" way to participate in the ActivityPub "Fediverse" and other indie web protocols like RSS. This was created and is maintained by Ben Brown.
Currently, this means:
Including features:
Not yet supported:
This software should be considered an EXPERIMENTAL PROTOTYPE. Do not use it to store or exchange sensitive information.
Because of the way the Mastodon works, once you start to engage with users on other instances, you will start to receive traffic from a wide array of other instances -- not all of which is necessary or relevant to you. As a result, operating this software on a small basis may result in unexpected amounts of incoming traffic.
My goal with this app is to not use any major external services. As a result, all data is written as PLAIN TEXT FILES to the disk.
Right now, the app builds an IN-MEMORY INDEX of EVERY SINGLE POST. This will work for several thousand posts, but ... maybe not for 10,000s of posts. I'm not sure how far it will go. I have ideas about being able to shard the index into multiple files and page through it, etc. But.
ALSO, there is nothing fancy happening in terms of queuing or rate limiting outgoing posts. When you post, it will send out HTTP requests right away, all at once. This may cause issues.
This project owes a great debt to @dariusk's excellent express-activitypub repo. My work started from his reference implementation, and there are many lines of code cribbed from his work.
Please file bugs on Github: https://github.com/benbrown/shuttlecraft/issues
Please read the contributor's guide before sending pull requests.
Quick start: Remix on Glitch
Clone the repo:
git clone git@github.com:benbrown/shuttlecraft.git
Enter folder:
cd shuttlecraft
Install node dependencies:
npm install
You are ready to run! But first, set your configuration.
When you are ready to start, run:
npm start
Initial configuration of your instance is done by editing the .env file to include your desired USERNAME, PASSWORD, and DOMAIN NAME. These values MUST BE SET before you launch the application, as they are used to generate your account details, including your Fediverse actor ID.
In the .env file, put:
USERNAME=yourusername
PASS=yourpasswordforadmintools
DOMAIN=yourdomainname
PORT=3000
USERNAME and PASS are required to login to the private dashboard tools.
When you launch the app for the first time, these values will be used
to create the .data/account.json
file which is the source of your
public account information, and will be used for many operations.
There is currently no UI built to view or manage your account. If you need to make updates, edit the JSON directly.
HOWEVER PLEASE NOTE that your ID is a real URL, and it must reflect
the real URL served by this app. Also note that it is embedded in
every post you write - so if you change values in the account.json
file,
your previous posts may break.
To login, visit https://yourdomain.com/private
and provide the username and password from your .env file
If you want more logging or want to see what is happening in the background, enable debugging by adding DEBUG=ono:* to the .env file, or starting the app with:
DEBUG=ono:* npm start
All of the data is stored in the .data
folder in JSON files.
Incoming activities will be in .data/activitystream
. Each incoming
post is in a dated folder, for example 2022/12-01/GUID.json
Local posts are in .data/posts
Cached user information is in .data/users
Follower list, following list, like list, boost list, block list,
and notifications can all be found in their own files at the root
of the .data
folder. This is your data! Back it up if you care
about it.
This is a node app that runs by default on port 3000, or the port specified in the .env file.
In order to play nice with the fediverse, it must be hosted on an SSL-enabled endpoint.
Use Glitch to create a new project! Glitch will provide you with hosting for your instance of Shuttlecraft, and you can start for FREE!
It all starts when you click this link -> Remix this project on Glitch <--
WHOA! What happened? Well, a copy of the Shuttlecraft code was sent to a new, unique, owned-by-you web server and it started getting set up. You just need to make it yours by following these steps:
https://yourdomain.glitch.me/private
.A sample Caddyfile
is included in the repo. Install Caddy and run:
caddy run --config Caddyfile
docker build . --tag "${yourRegistryUsername}/shuttlecraft:latest"
docker run -e PORT=3000 -e DOMAIN="your-domain.com" -e USERNAME="yourUsername" -e PASS="yourPassword" -p "3000:3000" "${yourRegistryUsername}/shuttlecraft"
docker push "${yourRegistryUsername}/shuttlecraft:latest"
DOMAIN
, USERNAME
, PASS
). This app uses HandlebarsJS for templating.
Customize the public pages:
design/public/home.handlebars
and design/public/note.handlebars
and design/layouts/public.handlebars
public/css/main.css
Customize your avatar:
public/images/avatar.png
.data/account.json
inside the actor.icon.url fieldCustomize the backend:
design/dashboard.handlebars
and design/notifications.handlebars
and design/layouts/private.handlebars
design/partials
public/css/secret.css
To block users or instances:
.data/blocks