A mastodon and fediverse social wall.
With Glacier you can follow hashtags to see the interaction of participants of an event in realtime.
Glacier ist still BETA. You can use it, but there could be some minor errors. Feel free to open an issue here on GitHub, to report any problems.
- Licences
- Try it
- Build it
- Test it
- Run it
- Use it
- Concepts and wordings
- Thank you
- Known issues or limitations
This project is Open Source under the MIT License except for the following files:
- The font Jugger Rock, which is from Dan Zadorozny and may not be used for commercial purposes without a license.
- The Mastodon Logo, which is from Wikimedia and is under the CC BY 4.0 Deed license.
A complete free usable test installation of glacier is available under glacier.events.
The demo page always contains the last stable version from the main branch.
Glacier is built with maven and based on Java 21 and typescript. To execute the built or run Glacier locally you need a Java 21 JDK. A JRE is not sufficient for build. I recommend Temurin.
To check out the code and do a complete installation including frontend and backend build and tests, run the following commands.
git clone git@github.com:seism0saurus/glacier.git
cd glacier
./mvnw clean package
After the build you can run Glacier locally from the commandline, to test the jar before packaging it into a container image.
ACCESS_KEY=my-secret-mastodon-api-key -e HANDLE=my-mastodon-handle -e INSTANCE=my-mastodon-instance -e MY_DOMAIN=localhost:8080 java -jar target/glacier-0.0.8.jar
When glacier is running you can execute the e2e tests. You should install dependencies by calling npx playwright install --with-deps
in the frontend
folder.
After that run all tests with maven verify.
./mvnw verify
First create the jar. To create a container image for Docker or other engines, copy the created jar into the infrastructure/glacier folder. Then change into the folder and run docker build.
cp target/glacier-0.0.8.jar containerimage/
cd containerimage
To build the image you can use Docker or any compatible build tool that creates standard container images like buildah.
docker build -t glacier --build-arg JAR_FILE=glacier-0.0.8.jar .
buildah build --build-arg JAR_FILE=glacier-0.0.8.jar -f Dockerfile -t glacier .
You can run unit tests by executing the maven goal test
.
For e2e tests see E2E_TESTING.md
A container image with latest stable version is available: ghcr.io/seism0saurus/glacier:main Or you can build your own version with the steps from Build it.
You can run the image locally with docker or other compatible container runtimes. Four environment variables are needed.
The instance is the mastodon instance with your account. You need an account to connect to the fediverse via the mastodon API. For example infosec.exchange or botsin.space.
The handle is the mastodon handle of your account. The handle consists of your account name and the mastodon instance. For example glacier@glacier.events.
The access key for your mastodon account. Go to your mastodon instance into the account settings and select applications. Create a new application with read access.
The domain of your personal Glacier installation. If run locally use your hostname or localhost. For non http ports add the port to the hostname for correct redirects and checks. For example localhost:8080. You can use Docker or any other compatible container runtime like containerd with nerdctl.
The name is used for the Legal Notice and the GDPR. You are the operator of your instance and responsible for logging and using data like IP addresses in your instance. Therefore, in some countries like Germany you have to provide your name in the appropriate entry on a website.
The street and house number is part of your address and is used for the Legal Notice and the GDPR. You are the operator of your instance and responsible for logging and using data like IP addresses in your instance. Therefore, in some countries like Germany you have to provide your address in the appropriate entry on a website.
The zip code is part of your address and is used for the Legal Notice and the GDPR. You are the operator of your instance and responsible for logging and using data like IP addresses in your instance. Therefore, in some countries like Germany you have to provide your address in the appropriate entry on a website.
The city is part of your address and is used for the Legal Notice and the GDPR. You are the operator of your instance and responsible for logging and using data like IP addresses in your instance. Therefore, in some countries like Germany you have to provide your address in the appropriate entry on a website.
The country is part of your address and is used for the Legal Notice and the GDPR. You are the operator of your instance and responsible for logging and using data like IP addresses in your instance. Therefore, in some countries like Germany you have to provide your address in the appropriate entry on a website.
The phone number is used for the Legal Notice and the GDPR. You are the operator of your instance and responsible for logging and using data like IP addresses in your instance. Therefore, in some countries like Germany you have to provide your phone number in the appropriate entry on a website.
The contact email address is used for the Legal Notice and the GDPR. You are the operator of your instance and responsible for logging and using data like IP addresses in your instance. Therefore, in some countries like Germany you have to provide your email address in the appropriate entry on a website.
The website is used for the Legal Notice and the GDPR. Give the users the possibility to learn more about you or your organisation.
docker run -ti -e ACCESS_KEY=my-secret-mastodon-api-key -e HANDLE=my-mastodon-handle -e INSTANCE=my-mastodon-instance -e MY_DOMAIN=localhost:8080 -p 8080:8080 ghcr.io/seism0saurus/glacier:main
nerdctl run -ti -e ACCESS_KEY=my-secret-mastodon-api-key -e HANDLE=my-mastodon-handle -e INSTANCE=my-mastodon-instance -e MY_DOMAIN=localhost:8080 -p 8080:8080 ghcr.io/seism0saurus/glacier:main
To create a new Glacier Wall follow these steps.
-
Go to your Glacier instance. E.g. glacier.events
-
Click into the field Followed hashtags
-
Enter a hashtag you want to follow and press enter. Repeat this for each hashtag you want to follow
-
You can also edit a tag, if you misspelled it. Double klick on the hashtag and you can change it. Press enter after that
-
To delete a hashtag, klick on the small symbol after its text in the chip
On the right is also a button to remove all hashtags and start from the beginning
-
For better usage of space, enable the full screen mode with F11 or the menu of your web browser
To add a toot to your Glacier Wall follow these steps.
- Start a new toot
- Mention the bot of your Glacier instance in your toot. For example @glacier@glacier.events. This is important since not all toots with a hashtag reach the bot, which collects the toots. This is due to the concept of federation in the Fediverse.
- Use one of the hashtags of your Glacier Wall. For example #flowers. This is needed, so that multiple Glacier Walls can be used with the same mastodon bot. Only visible toots with a hashtag are shown on a Glacier Wall.
- Post your toot. The toot appears on the Glacier Wall shortly after you've posted it
Here is an example toot:
@glacier@glacier.events
Hi,
very cool project. Thanks for developing a social wall ;)
#foss #opensource #mastodon
Here is a short video of adding a toot to the wall.
- Glacier: Mastodon is the well known microblogging service for the fediverse. It's name comes from an extinct mammoth, that lived during the ice age. Therefore, the social wall application for Mastodon was named Glacier by its creator.
- Glacier instance: A Glacier instance is one deployment of the Glacier web application. One instance can serve multiple Glacier Walls with different hashtags for different users. For example glacier.events is an instance of Glacier. I deploy the current version from the main branch on that server
- Glacier Wall: A Glacier Wall is a single social wall for a user and is delivered by a Glacier instance. The Glacier Wall is bound to your web browser and a Glacier instance. For example, if you open glacier.events you get your personal Glacier Wall for testing. If you open it in another web browser you get a second Glacier Wall with different hashtags and toots. But both Glacier Walls run on the same Glacier instance from me but are separate Glacier Walls
- Toot: A toot is a post on mastodon. Glacier can show other types of posts from systems connected to the fediverse, too. But for simplicity I speak about toots, since mastodon is the main focus
Many thanks go to Gargron (Eugen Rochko) for maintaining Mastodon and of course all the contributors to Mastodon and the Fediverse. It's great to have a decentralized social media platform.
I want to thank André Gasser for his bigbone Mastodon client for Java. His work and the work from the other contributors made it easy to write a client with streaming capabilities for Mastodon.
- The Glacier Wall needs some seconds after a new toot is added to render everything. That's a problem I have with the Angular change detection. The toots are rendered as iframes, because I don't want to reimplement the styling of the different fediverse servers. But after a toot is moved to another column, the browser reloads it completely. This takes some time to rebuild the page
- If server shows a cookie consent banner or other banners at the bottom of the screen, the banner can block the view to the content
- Content warnings in mastodon can block the content on the Glacier Wall
- Some mastodon instances have corrupt or wrong headers for the content security policy. Therefore, I am not allowed to load the toots from these servers as iframe. If your toots are not shown but publicly visible, mention the bot and have a hashtag, please open an issue. I will try to contact your instance administrator to get an exception
- Toots without mentioning the bot of the Glacier instance are not shown. Following a hashtag is limited in the fediverse. If a toot with a hashtag is never federated to the server with my bot, the bot never sees the toot and can't show it on the Glacier Wall. Therefore, you have to mention the bot to make sure, the message reaches it
- Private or other restricted messages are not shown. Well, this isn't really an issue, since you don't want to make the toot public, it shouldn't be on a Glacier Wall, too