snac2
Its footprint is tiny — just a few megabytes, when idle, it uses like 0.3% CPU and 0.5% RAM on this old PowerPC G4 Mac Mini with only a gigabyte of RAM.
And almost no disk IO too! Especially compared to PostgreSQL, which Pleroma uses.
Right now it's running next to Pleroma, but while Pleroma gets overwhelmed and is on the verge of dying all the time — snac2 stands its ground like that Doom Slayer against the armies of Hell 😈
At the time it's an unfair comparison as my old instance is two years old and its discovery is way wider, dozens of instances chime in every minute. I have subscribed to relays with snac2 and so far it fares very well.
#SelfHosting #Mastodon #Snac2
#fediverse #mastodon #activitypub
The time is probably right.
Back in 2022, when I was still using iOS, I wasn’t completely happy with the Fediverse apps that were available. I was mostly using Akkoma, and the interface I liked the most was actually its web UI, even on mobile. So I started playing with Xcode and put together the foundations of an app tailored to my needs.
A lot has changed since then and today we have great alternatives like IceCubes, Mona, Ivory, etc. Each one has strengths and weaknesses though, so I picked up my old project again and kept pushing it forward.
So I’m happy to announce that my app will finally see the light: I’ve been using it for the past few days and, in my spare time, I’m fixing bugs and adding missing features. I’m building it around my own needs, so it doesn’t have to “appeal to everyone”. I wouldn’t call it opinionated, but it’s definitely targeted.
The app will have one key trait: #snac2 support will be a first-class feature, not an incidental one. Many apps, especially on iOS, support snac as a side effect, but the experience is often not optimal. In this case, the choice is deliberate and it strictly follows the Mastodon API support implemented by snac. So snac will work properly (within the limits of the platform, of course).
Among the features already implemented: the app is minimal and lightweight (under 10 MB, including debug code), easy on RAM, and privacy-first (for example it strips EXIF data from media before posting, so the server will never see it). On snac it also cleans up the "Boosted by Aoderelay" messages that appear when using a relay, removes the character limit, and supports posting in Markdown.
I also added support for Apple Intelligence to generate alt text, both for the media I post and for media posted by others that is missing alt text.
Everything is processed locally through Apple APIs and only on supported devices. The results aren't amazing, Apple Intelligence is extremely limited, but in my opinion it's the only privacy-friendly and ethical way to approach it. And of course, you can disable it.
On Mastodon it supports all the main features: lists, quote posts, granular notifications (you can choose what you want for each category), notification grouping, multi-account support, and it works.
It's still missing a few things (block, etc.) and has some bugs, which I’m spotting as I keep using it.
As soon as it's stable enough, I'll invite a few people to test it. I still haven't fully decided how I'll distribute it: an Apple Developer account has a yearly cost, and I hope to reuse it for other projects too. So this app might be paid, with a trial period, but if possible (I still need to check what’s feasible) I'd like it to be free if you connect to one of the BSD Cafe instances, illumos Cafe, or any snac instance, including your own.
I don't know how long it will take before it's ready... but I can already tell you what it will be called.
It already has a name, and it's... MastoBlaster.
This name was chosen for personal reasons, and also because of its similarity to Master Blaster by Stevie Wonder, which even today feels relevant and fitting for the Fediverse.
Stay tuned!
#MastoBlaster #Fediverse #Mastodon #iOS #FediverseApp #Announcement #Apple #snac #snac2
They've read everything I noted, suggested changes, and adapted the code to make it work optimally even on my slow VM. If all open source developers were as kind and helpful as they have been with me, the world would be an idyllic place.
A shoutout to @stefano too - using snac2 was his idea, and he's responsible for the technical implementation of the instance.
And thanks to everyone who makes my timeline interesting and complete - without you, all of this would be utterly pointless.
#Fediverse #Snac2 #ThankYou
Some users gave it a try and decided to self-host. Others have kept it as a secondary account, while some use it regularly.
Happy anniversary, snac.bsd.cafe - and thanks to @grunfink for the ongoing development and improvement, always staying true to the principles of simplicity and integrity.
#BSDCafeServices #BSDCafe #snac #snac2 #Fediverse #SocialNetworks
Die Testinstanz bleibt vorübergehend eine Testinstanz, damit ich mich noch weiter reinfrickeln kann. Und dann wird diese Instanz hier irgendwann in den nächsten Wochen von K&T zu Uberspace umgezogen. Ich hoffe das klappt, ansonsten lernt ihr eben beim Neuverdrahten eine weitere Domain von mir kennen 😉
#snac
Snac2 is an excellent software solution for accessing the Fediverse. It is lightweight, very easy to compile and install, has minimal dependencies, and the development is progressing along a clear, clean, and logical path - thank you, @grunfink
Since last December, BSD Cafe has had, among its services, a snac instance - https://snac.bsd.cafe - which has been used sparingly, mainly by some for testing purposes. I’ve kept it as a 'testing' option.
In light of the interest it is generating (we now have stable users) and given that development is evolving to allow for both inbound and outbound movement, I have decided to designate it as a stable solution for accessing the Fediverse and to consider it a primary service of the BSD Cafe.
It has always received the utmost attention, I have consistently updated it promptly, and it has always been accessible, but I have also modified all the descriptions to clarify that it is a stable and definitive solution.
For more information, there is always a dedicated page on our wiki: https://wiki.bsd.cafe/snac.bsd.cafe
Stay Tuned!
#BSDCafe #BSDCafeServices #BSDCafeAnnouncements #snac #snac2 #Fediverse #Mastodon
I'm not asking about mastodon but (https://codeberg.org/grunfink/snac2)
It seems even consecutive runs take over one hour, I've got duplicates of reply trees in my conversations, while still not seeing all replies there are. Also the "database" increased considerable in size.
I guess it's not fully compatible. But I would like to know what others did with it.
#fedifetcher #snac2 #snac #askfedi #selfhosting #tinyfedi #tinyweb
There we go. #Snac2 up and running with the preferred installation process. Added custom styling to boot. One confusion point with styling is that it does NOT affect the root page (greeting.html) only the profile pages. So I thought I had done something wrong, but finally figured it out.
Possibly dumb #snac #snac2 question, but what is the best way to install the latest version without affecting the existing users and posts, etc.? I thought I needed to use the command line option "snac upgrade" but looking at the manuals again, I don't think that's actually what that option is for? Is there a write up for just updating to the latest version out there anywhere?
#FediMeteo #FediMeteoStatus #FediMeteoAnnouncements #snac #snac2
Just published a guide on setting up Snac on an Ubuntu VM using NGINX Proxy Manager. Snac is an incredibly lightweight #ActivityPub server. A true nom nom among fediverse platforms.
If you're curious about minimal fediverse instances, check it out:
I tried it last evening and it was failing but I think it was just a caching issue.
And now, let's start!
#Fediverse #snac #snac2 #NewWeekNewInstance
This happened because, for every remote instance, Nginx was requesting the multimedia file from snac. However, due to saturated connections, it took several seconds, leading to thread exhaustion in snac.
I resolved this issue by caching the multimedia files myself using Nginx, which significantly improved performance.
This matter will be covered in a subsequent (simple) blog post.
#snac #snac2 #OwnYourData #SelfHosting
job fifo size (cur): 655
job fifo size (peak): 1291
thread #0 state: waiting
thread #1 state: output
thread #2 state: output
thread #3 state: output
I assume it is my instance delivering this to all subscribers, is that correct?
And the last thread will stay idle to maybe wait for incoming requests, so that they can be answered too?
I've never seen another status then waiting or output so far.
I guess if I post a picture that might then happen and all workers will be busy? Maybe even too busy to keep up?
Is that assumption about how the waiting worker and what it is for correct?
If yes I guess I'll increase the threads, if they are intentional low for low ram systems, that's not my issue with snac. (I've not much ram, but I assume snac is by default tuned to be very very very conservative?)
(adding Pic to simultaneously test my theory)
#snac2
I already wrote about caching here.
Now I extended what I cache a bit.
This was because after enabling the option to proxy media, I've seen access to the file paths /x/ and /y/ in addition to the path were snac stores the media that I include in my own posts ( /s/ ).
There are two locations to proxy media, depending if you requests the media via the mastodon api or via the web. (/x/ and /y/), oh and I added the nodeinfo2.0 path too, because I've noticed it was queried all the time by a lot of instances and it gives me pleasure to see something cached handed out in the access logs. 🙂 (I guess it is actually irrelevant for the system resources)
This is the updated setup:
Enable the relevant modules:
a2enmod expires cache cache_disk
Be sure "htcacheclean" is running to clean up the old disk cache. (under debian see /etc/default/apache-htcacheclean or else the relevant systemd service or whatever)
Then add this to the httpd Virtualhost config:
<LocationMatch "^/social/[^/]+/[xys]/|^/social/nodeinfo_2_0">
CacheEnable disk
Header set Cache-Control "max-age=86400, public" "expr=%{REQUEST_STATUS} == 200"
ExpiresActive On
ExpiresDefault "access plus 86400 seconds"
</LocationMatch>
Further reading and all options are explained under https://httpd.apache.org/docs/2.4/caching.html (and ff)
The Header that I set here, on the condition of Status code 200, is needed for the path /y/, because snac set no-cache on that location and mod_expires will honor that if we don't override it. I set it to the same Cache-Control value as mod_expires would. (I use mod_expires because it will additionally calculate the date and put that in the expires header. (hence the name I guess 😀 )
#Fediverse #Hosting #ITNotes #apache2 #httpd #Ownyourdata #Server #Snac #Snac2 #Tipsandtricks #Tutorial #Debian #caching

Now I’m just trying to find a specific post that will do it so maybe I can actually figure out what exactly is going wrong.
Acabo de solicitar a integração de mais uma versão do arquivo com novas sequências de caracteres traduzidas.
Estou escrevendo isto para incentivar você a também contribuir com o que puder para com os projetos de software livre que utiliza. O senso de comunidade nos permite fazer parte da construção de um mundo melhor a cada linha de código.
#snac2 #snac #SoftwareLivre #FreeAsInFreedom