@movq@www.uninformativ.de Ahh, no you can. Much like what weāve built here with Twtxt / Yarn. Iām building a spec, clients can implement the spec, or you can ya know, just curl and git your way through. Iāll link the spec soonā¢, just need to keep refining and testing and make sure this actually works properly š
gitxt is a purely decentralised git forge. There is no federation protocol, no instance-to-instance API, no accounts on other peopleās servers. Each forge instance is fully independent; collaboration is an act of publishing and reading plain text files over HTTP
@movq@www.uninformativ.de In the meantime tell me all your āwishesā and things you wish/want a good decent āpureā decentralised Git forge should do š
I am finally building a Twtxt / Yarn.social inspired Git forge. Iām actually quite confident that yāall will quite like it, but I wonāt post links yet until Iām quietly confident in its design, functionality and behaviour(s).
Stay tuned š¤ Itāll be like no other Git forge youāve ever seen! 𤣠Actually, itās already more like cgit than anything with plain text feeds that power itās āpure decentralizationā as you can no doubt imagine š #twtxt #git #forge
git clone operations in the logs. Most crawlers simply donāt do that and rely on the Git history being available as HTML pages.
@movq@www.uninformativ.de I am seriously rethinking and re-contemplating building a new Git forge of some description that avoids all of these stupid problems that weāre now seeing in the wild
FTR, Iām seeing veeeeeeeeery few actual git clone operations in the logs. Most crawlers simply donāt do that and rely on the Git history being available as HTML pages.
So thatās a win. (For now.)
Real tired of doing these, but hereās another Android developers vs Google update, this time thereās both good and bad news.
The good:
-Users will be able to enable āsideloadingā for all current and future devices, attached to their Google account, rather than having to undergo the tedious 24 hour wait including process, on each device.
-Rather than these changes to āsideloadingā and āadvanced workflowsā being implemented at random different dates, in different countries, weāll all get them come 2027.
The bad:
As GrapheneOS developers recently mentioned āGoogle replaced pushing Git tags for certain source code with obtaining source code via Google Drive after making a request through Google Forms. Itās completely ridiculous and theyāve gradually become very slow at handling requests. Theyāre in clear violation of the GPLv2 now.ā
whole thread: https://grapheneos.social/@GrapheneOS/117057099753905023
@david@daiwei.me Please report any logs from the Javascript console if you can. Itās possible the one commit I made to the Swag framework might be the culprit here. Not sure.
@prologic@twtxt.net Just out of curiosity, have you ever ran this on real hardware? š
Hm, interesting: https://git.mills.io/prologic/muos/src/branch/main/nucleus/nucleus.asm Youāre clearing the VGA buffer in each mode (real mode, protected mode, long mode). Whyās that? Wouldnāt it be good enough to only do that after youāve reached long mode? š¤
So⦠my little experimental Mu (µ) OS is now ~8.7k of Mu and ~2k of Assembly, which makes this about an ~80/20 split. Iāve managed to achieve most of the goals I had set out, by ensuring a tiny Nucleus of only ~2k Assembly and all Policy, Services and Userland written entirely in Mu (a language I also deisnged and created, which still has no support for floats LOL)
Dunno if anyone will find this interesting⦠But some ~6 months or so ago I experimented briefly with creating a whole bootloader + kernel + userland ā Basically an entire OS in the Mu programming language (which as you know I also designed and created) ā 6 months later Iāve worked on it some more after spending the last week working on improvements to Mu itself, which is now able to compile itself with its own Mu implemented compiler and now have an os/arch backend called muos/amd64 that boots into a running shell, with a tiny little vfs, UNIX-like semantics, syscalls, read/write, etc. It works pretty nicely, and aside from a small Assembly ānucleusā, most of the Kernel and Userspace is written in Mu.
@dce@hashnix.club Was it ever really empty on the Codeberg side in the Git repo? š¤
@david@daiwei.me Go down to āReleasesā, thereās a link to the CHANGES: https://movq.de/git/jenny/CHANGES.html
@david@daiwei.me Is this better? š¤ Pretty hard to keep this concise but also not miss anything. š¤ https://movq.de/git/jenny/
Hmm ā¦
My project pages have this āDownloadsā section and I offer tarballs for each release:
https://movq.de/git/jenny/#downloads
I added this many years ago because an OpenBSD dev asked for it (but the project in question didnāt end up in their ports after all).
What are your thoughts on this? Is it necessary to offer tarballs?
I noticed that some distributions have already moved away from using tarballs and instead always clone from Git. š¤
jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
@prologic@twtxt.net Oh, yes, just for clarity: This wasnāt a āpro GitHubā argument. š I wonāt go back there (or to another āforgeā).
I think weāre totally on the same page: Decentralized Git hosting is good, but we havenāt solved the ācollaborationā part yet. Or rather: We have to modernize it. The tools are already there, but (many) people donāt want to use them and think theyāre clunky.
jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
How many tickets and merge requests did you get before moving to your own server?
Hm, these were probably some of the more active projects:
- https://github.com/vain/lariza/issues?q=is%3Aissue%20state%3Aclosed
- https://github.com/vain/pdfPres/issues?q=is%3Aissue%20state%3Aclosed
- https://github.com/vain/xiate/issues?q=is%3Aissue%20state%3Aclosed
So itās not a ton of stuff and there are many āissuesā I opened myself, but itās certainly more than these days.
Havenāt used
git send-emaileven once. I definitely have to look into that soon. Wanted to do that for several years. I typically upload the patch to my server and send a link via IRC.
git send-email is good for sending patches to a mailing list (because then the individual patches can be discussed easily), but since those are dying out as well, it loses its appeal. If you want to send patches to a single person, just sending the link to your repo is far easier. š¤
jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
@movq@www.uninformativ.de Finally, your software is just perfect and finished by now, no need to report non-existing bugs or send in code changes. :-) How many tickets and merge requests did you get before moving to your own server?
I have to admit that I use git format-patch so rarely, I always have to pull it up from my shell history. Havenāt used git send-email even once. I definitely have to look into that soon. Wanted to do that for several years. I typically upload the patch to my server and send a link via IRC.
Maybe I was just very unlucky, but my experience is that you can perfectly ignore people and their work who only do it for the āfameā. Itās almost always been from inferior quality to say the least.
@prologic@twtxt.net Hmmm, I have no idea how to solve that problem. š
Some jenny stuff aside, I received zero bug reports or code contributions since leaving GitHub in 2018.
I thought I had made that super easy, because you can just send me an email ā no sign-up process, nothing. But thatās way too old-school, people donāt know how to use git format-patch (let alone git send-email) and they also donāt understand that they can just send me a link to their forked Git repo (which can be hosted anywhere). Git is super flexible and powerful, but those features are hardly ever used.
Maybe people even need some kind ārewardā, or āfameā. Like those āachievementsā that you can unlock on GitHub. (Something to put in their CV ⦠?)
Oh god 𤣠I mean I had this idea to re-invent āGit hostingā, but failed. Maybe Iāll try it again. I dunno. The thing is I hardly get āIssuesā really, only when I ask nicely, of folks I know every well 𤣠So think at much āsmaller scaleā we need a different solution, and I think @movq@www.uninformativ.de is on to something, but not to the extend implemented, somewhere in the middle I think? š¤
Okay, so this is live now under https://movq.de/git/. (āKurzen Prozess gemacht.ā)
Okay, so, my website also includes my code / git repos, and those are made browsable by stagit. What I donāt like about this (these days) is that this includes all the diffs of my commits. In other words: All my code.
This makes it super easy for malicious crawlers to slurp up valuable data. I donāt like that.
Iām thinking about switching to this instead:
It still shows project infos and there are Atom feeds, but to get the code, you have to actually clone the repos.
š¤
(If you spot any bugs, let me know.)
@dce@hashnix.club You may also be interested in the Twtxt App and the little tiny twtd publishing backend? š¤
So just because I enjoy this kind of thing (looking into laws and trying to understand themā¦):
GDPR is about roles, not ownership
Thereās no property right in personal data under GDPR. The whole regime hangs on three roles:
- Data subject ā the person the data is about.
- Controller (Art. 4(7)) ā āthe natural or legal person ⦠which, alone or jointly with others, determines the purposes and means of the processing of personal data.ā
- The rights in Arts. 16 and 17 are exercised by a data subject against a controller. They compel a third party to rectify or erase. They are not self-executing duties that a piece of software must expose.
Thatās the key. In your architecture, for a userās own posts about themselves sitting in their own feed on their own device:
- the user is the data subject, and
- the user is also the only person ādetermining the purposes and meansā of that data.
There is no third party controller to compel. The āright to erasureā is a right to make someone else delete ā and there is no someone else. It is satisfied the instant the user can change the file. A UI button is a convenience, not a legal requirement. Omitting it removes zero rights, because the data is a plain-text file the user can edit or delete by any means ā editor, sed, git, their file manager. Full practical control is retained; nobody is being denied anything by anyone.
@itsericwoodward@itsericwoodward.com Wrote it up š Single-user twtd API is now documented (plain JSON, one bearer token) ā posting, uploads, profile, followers + WebFinger: https://git.mills.io/yarnsocial/twtd/src/branch/main/API.md š Shout if anythingās unclear for TwtKpr š
twtpub.com is just the default instance tho ā itās a multi-tenant twtd, AGPLv3. Run your own and Iāll list it in the appās picker so folks choose where to land š¤ keeps it decentralised + spreads the load. Docs ā https://git.mills.io/yarnsocial/twtd
š„³ Finally! After nearly 4 years, yarnd v0.16.0 āSilver Sojournerā is out! š Twt Hash v2, SQLite FTS5 search, HTMX-powered UI, first-time setup wizard and literally hundreds of bug fixes š
Release notes: https://git.mills.io/yarnsocial/yarn/releases/tag/0.16.0
Upgrading is fully automatic ā the Twt Hash v2 migration re-fetches all feeds on first start, so expect the first cycle to be a bit heavier. Images on Docker Hub as prologic/yarnd:0.16.0 š
cc @kat@yarn.girlonthemoon.xyz @abucci@anthony.buc.ci @shinyoukai@yume.laidback.moe @eldersnake@we.loveprivacy.club š
So⦠Quick count. Hands up those who are using the Twtxt App? š¤ ā And whoās also pairing this with the twtd publishing backend?
@prologic@twtxt.net done: https://git.mills.io/yarnsocial/feeds/issues/41
@david@daiwei.me as you alter ego, I seriously recommend you stop creating feeds left and right. But whom am I kidding, right?! š
I wonder how long will it take to show a follower on twtd. It only shows the feedās owner, so far.
I wish I could connect this with git.mills.io. I think there is a network issue preventing me from bring able to do it.
Hello everyone ! š Behold I bring you (after many years) the launch of the Twtxt App š ā Ye, this is a Desktop and Mobile app built as a Progressive Web App (PWA) using a little framework (Swag) I put together iafter some experiments @xuu@txt.sour.is and I did in Go and HTMX and Service Workers.
The App is offline-first and supports installing to Desktop and Mobile (add to Home screen) and supports a number of publishing backends, including Yarn.socialās yarnd Pod, Github, Codeberg/Gitea, and a little tiny twtd Twtxt server (See: https://git.mills.io/yarnsocial/twtd).
Please try it out, no need for any account(s) or such, works with your existing feed(s) (as long as the publishing backends work well enough for you!). Please give me feedback! š
Also, did you know the Twtxt Search Engine is back? š
@balloonfu-sen@yarn.girlonthemoon.xyz Do you mind git pull && make build and updating your yarnd instance so itās in-line with the new Hash v2 spec š
@movq@www.uninformativ.de Here you go 𤣠https://git.mills.io/prologic/gonix/src/branch/main/cmd/imgview/main.go
So Iāve been working on GoNIX the last few days⦠Which is derived from µLinux ā At least itās entire build process. GoNIX however has a 100% Go userland, including the init process, package and service management.
Now⦠As an experiment, because I was able to make much process on enhancing the build tools and package management, I decided to see if I could build a āDesktopā Gui of sortsā¦
I still wanted it to be fairly minimal and lightweight. So I went with wayland (of course) and labwc and yambar. So far Iām liking the result š 42 packages in the wayland-desktop meta port. Not too bad. Not sure if I can slim that down anymore⦠But trying to avoid Mesa/GL as that drags in far too much ācruftā.
Whatās your motivation for running this, btw? š¤
Basically, two things a) feeling generous for folks that either canāt afford or find it hard to have a little place to call home (webpage, feed, whatever) and b) a real opportunity to test some of the components that make it possible sshbox, which I know works well as it fronts my Gitea instanceās Git+SSH service and box, a container runtime I wrote a while ago, recently improved, hardened and polished.
Oh come on! Why such a stupid anti-feature!?
WARNING: Your yt-dlp version (2026.03.17) is older than 90 days!
It is strongly recommended to always use the latest version. You cannot update when running from source code; Use git to pull the latest changes. To suppress this warning, add --no-update to your command/config.
@movq@www.uninformativ.de Just working on swag š Andā¦.. Building an Offline-first Yarn/twtxt client that has no server requirements (_other than you need to publish your feed somewhereā¦)
Got absolutely jack and sick of all the fucking useless bots, C&C and shit⢠hitting my Git server tonight 𤬠So I sat down and built a lightweight version of Anubis, called caddy-pow. So now going forward, youāll have to (sorry) have a HS-enabled browser to hit git.mills.io which will hopefully make most (if not all) bots just go the fuck away š¤¦āāļø #Hostile #Web
When my git history is just āfixā, āactually fixā, āthis time for realā and āpleasepleasepleaseā ā Read more
7.1-rc7: mainline
Version:7.1-rc7 (mainline)Released:2026-06-07Source:linux-7.1-rc7.tar.gzPatch:full ( incremental) ā Read more
@lyse@lyse.isobeef.org Oh, no, he was the one providing the feedback. š
mgk appears to be everywhere. His Unicode box drawing demo has been part of my unicode-test script for a long time: https://movq.de/git/bin-pub/file/unicode-test.html#l23
When I run git blame to find whoās responsible and itās me, two years ago ā Read more
7.1-rc6: mainline
Version:7.1-rc6 (mainline)Released:2026-05-31Source:linux-7.1-rc6.tar.gzPatch:full ( incremental) ā Read more
Itās one of the reasons in fact Iāve been working on bob so I have a very concrete and strong foundation for how these things work, how they behave and how bad or good they can be. I am on-purpose building bob to be not only a decent coding tool and general task completion tool, but with serious security boundaries, sanitation, auditing and compliance. If Iām going to succeed at building autoonmous agents that can cope with a wider array of varying inputs (mostly natural language, some structural language) then it needs to be both a) Safe and b) Robust
Incident with Pull Requests, Issues, Git Operations and API Requests
Article URL: https://www.githubstatus.com/incidents/xy1tt3hs572m
Comments URL: https://news.ycombinator.com/item?id=48293080
Points: 18
# Comments: 8 ā Read more
7.1-rc5: mainline
Version:7.1-rc5 (mainline)Released:2026-05-24Source:linux-7.1-rc5.tar.gzPatch:full ( incremental) ā Read more
@tftp@tilde.town mentioning in here requires he whole shebang. With jenny, if using vim, there is a key combination:
Nick name completions: Allows you to use ^X ^U to turn verbatim nick names into full twtxt mentions. For example, typing ācathā and then pressing ^X ^U will turn ācathā into a full mention, like ā@ā. (This function will read the contents of your ā~/.config/jenny/followā file.)
7.1-rc4: mainline
Version:7.1-rc4 (mainline)Released:2026-05-17Source:linux-7.1-rc4.tar.gzPatch:full ( incremental) ā Read more
7.1-rc3: mainline
Version:7.1-rc3 (mainline)Released:2026-05-10Source:linux-7.1-rc3.tar.gzPatch:full ( incremental) ā Read more
7.1-rc2: mainline
Version:7.1-rc2 (mainline)Released:2026-05-03Source:linux-7.1-rc2.tar.gzPatch:full ( incremental) ā Read more
7.1-rc1: mainline
Version:7.1-rc1 (mainline)Released:2026-04-26Source:linux-7.1-rc1.tar.gzPatch:full ā Read more
7.0-rc7: mainline
Version:7.0-rc7 (mainline)Released:2026-04-05Source:linux-7.0-rc7.tar.gzPatch:full ( incremental) ā Read more
@movq@www.uninformativ.de cd ~/jenny && watch -n 25 git pull. :-D
7.0-rc6: mainline
Version:7.0-rc6 (mainline)Released:2026-03-29Source:linux-7.0-rc6.tar.gzPatch:full ( incremental) ā Read more
7.0-rc5: mainline
Version:7.0-rc5 (mainline)Released:2026-03-22Source:linux-7.0-rc5.tar.gzPatch:full ( incremental) ā Read more
@itsericwoodward@itsericwoodward.com hey, link to repository on https://www.npmjs.com/package/express-twtkpr is broken. It points to https://git.itsericwoodward.com/eric/express-twtkp. Looking forward to see more documentation!
7.0-rc4: mainline
Version:7.0-rc4 (mainline)Released:2026-03-15Source:linux-7.0-rc4.tar.gzPatch:full ( incremental) ā Read more
@movq@www.uninformativ.de just use https instead:
git clone https://git.mills.io/yarnsocial/twtxt.dev.git
7.0-rc3: mainline
Version:7.0-rc3 (mainline)Released:2026-03-08Source:linux-7.0-rc3.tar.gzPatch:full ( incremental) ā Read more
7.0-rc2: mainline
Version:7.0-rc2 (mainline)Released:2026-03-01Source:linux-7.0-rc2.tar.gzPatch:full ( incremental) ā Read more
When I hear the lead dev say theyāre going to run a git blame ā Read more
7.0-rc1: mainline
Version:7.0-rc1 (mainline)Released:2026-02-22Source:linux-7.0-rc1.tar.gzPatch:full ā Read more
v2 branch and @doesnm.p.psf.lt has been incredibly helpful so far. Be great ot have a few more folks to join us, some of the v2 highlights include:
@bender@twtxt.net Here is a properly formatted version of your message:
Not yet ā but thatās probably a good idea.
Instructions:
- Clone the repository
git clone https://git.mills.io/saltyim/saltyim.git
cd saltyim
- Check out the
v2branch
git checkout v2
- Build and install the CLI/TUI
make DESTDIR=$HOME/bin install
After installation, run:
salty-chat
Well itās ~2am and I finally defeated the AI player in a game of Frontier Crown š
ā On that note Iām now going to bed, Iāve made so many improvements to the aesthetics (UX) of the game, the mechanics, and itās now quite nicely playable š Gānight! š“
I spent the day today integrating @xuu@txt.sour.isās double ratcheting work and ratchet library back into the reference client/broker implementation saltyim as a v2 branch. I completely redesigned and rewrite the salty-chat TUI client as well, which now includes proper notifications and a background agent that keeps running so you never miss any messages. It all ājust worksā⢠and Iām quite happy with the outcome! 𤩠#saltyim #revamp
When I run a git push āforce on main late on a Friday afternoon ā Read more
@prologic@twtxt.net (While browsing through that, I noticed that https://mu-lang.dev/ itself doesnāt really mention the source code repo, does it? š¤ Like, the quickstart guide begins with āBuild the host: go build ./cmd/muā, but whereās the git clone ⦠command? š
)
Iām not really sure what the goal is. š¤ Do you want to get pull requests for the docs? Or bug reports for mu itself? š¤
6.19-rc8: mainline
Version:6.19-rc8 (mainline)Released:2026-02-01Source:linux-6.19-rc8.tar.gzPatch:full ( incremental) ā Read more
6.19-rc7: mainline
Version:6.19-rc7 (mainline)Released:2026-01-25Source:linux-6.19-rc7.tar.gzPatch:full ( incremental) ā Read more
6.19-rc6: mainline
Version:6.19-rc6 (mainline)Released:2026-01-18Source:linux-6.19-rc6.tar.gzPatch:full ( incremental) ā Read more
6.19-rc5: mainline
Version:6.19-rc5 (mainline)Released:2026-01-12Source:linux-6.19-rc5.tar.gzPatch:full ( incremental) ā Read more
6.19-rc4: mainline
Version:6.19-rc4 (mainline)Released:2026-01-04Source:linux-6.19-rc4.tar.gzPatch:full ( incremental) ā Read more
Hmmm š¤
Excluding merges, 1 author has pushed 171 commits to main and 175 commits to all branches. On main, 294 files have changed and there have been 52880 additions and 18269 deletions.
From the Mu (µ) Gitea Activity Tab
@shinyoukai@neko.laidback.moe We finally abandoned our GitLab. I publicly mirrored my code in the Mills Data Center a few days ago: https://git.mills.io/lyse/tt2
@shinyoukai@neko.laidback.moe Because you might not want to commit all changed files in a single commit. I very often make use of this and create several commits. In fact, I like to git add --patch to interactively select which parts of a file go in the next commit. This happens most likely when refactoring during a feature implementation or bug fix. I couldnāt live without that anymore. :-)
If you have a much more organized way of working where this does not come up, you can just git commit --all to include all changed files in the next commit without git adding them first. But new files still have to be git added manually once.
6.19-rc3: mainline
Version:6.19-rc3 (mainline)Released:2025-12-28Source:linux-6.19-rc3.tar.gzPatch:full ( incremental) ā Read more
I just had a closer look at https://git.mills.io/prologic/mu and it motivated me to do some compiler building myself again. Hopefully, I find some time in the next free days. Iām bad at it, but itās always great fun.
6.19-rc2: mainline
Version:6.19-rc2 (mainline)Released:2025-12-21Source:linux-6.19-rc2.tar.gzPatch:full ( incremental) ā Read more
@movq@www.uninformativ.de @kiwu@twtxt.net it just so happens to be a happy coincidence that Iām extending muās capabilities to now include a native toolchain-free compiler (doesnāt rely on any external gcc/clang or linkers, etc) that lowers the mu source code into an intermediate representation / IR (what @movq@www.uninformativ.de refers to as āthick layers of abstractionsāā¦) and finally to SSA + ARM64 + Mach-O encoder to produce native binary executables (at least for me on my Mac, Linux may some later?) š¤£
I cleaned up all my of AoC (Advent of Code) 2025 solutions, refactored many of the utilities I had to write as reusable libraries, re-tested Day 1 (but nothing else). here it is if youāre curious! This is written in mu, my own language I built as a self-hosted minimal compiler/vm with very few types and builtins.
6.19-rc1: mainline
Version:6.19-rc1 (mainline)Released:2025-12-14Source:linux-6.19-rc1.tar.gzPatch:full ā Read more
Using #Pythonās #pathlib to compare two repos and get back some missing files from a ārecoveredā version of a repo (mostly stuff in .gitignore that is handy not to discard right now).
from pathlib import Path
a = Path('sketch-a-day')
b = Path('sketch-a-day_broken')
files_a = {p.relative_to(a) for p in a.rglob('*')
if '.git' not in str(p)
if 'cache' not in str(p)
if 'checkpoint' not in str(p)
}
files_b = {p.relative_to(b) for p in b.rglob('*')
if '.git' not in str(p)
if 'cache' not in str(p)
if 'checkpoint' not in str(p)
}
missing = files_b - files_a
for p in missing:
(b / p).rename((a / p))
@lyse@lyse.isobeef.org My theory is that these people simply donāt do ācode archeologyā. When something breaks, they donāt reach for git log. They simply donāt experience the pain that comes with bad commits / commit messages.
Or is that different in your company? š
@shinyoukai@neko.laidback.moe @prologic@twtxt.net Maybe that is helpful to you: https://git.mills.io/yarnsocial/twtxt2html/issues/12#issuecomment-20792
Gootosocial to a Pleroma one. While GTS is kinda cute (lightweight and easy to manage) of a software, the inability to fetch/scroll through people's past toots when visiting a profile or having access to a federated timeline and a proper search functionality ...etc felt like handicap for the past N months.
@bender@twtxt.net yeah, Iāve been reading through the documentation last night and it felt overwhelming for a minute⦠+1 point goes to GTSās docs. but hey, Iāll be taking the easy route: podman-compose up -d they provide both a container image and an example compose file in a separate git repo but Iām wondering why that is not mentioned anywhere in the docs, (unless it is and I havenāt seen it yet)
@itsericwoodward@itsericwoodward.com Nice to see someone else also participating! š„³
(Btw, they donāt want us to share our inputs: https://www.reddit.com/r/adventofcode/wiki/faqs/copyright/inputs/ Yeah, itās a bit annoying. I also have to do quite a bit of filtering on my repo ā¦)
@prologic@twtxt.net Your gitea thinks the LICENSE file in the yarn repository is SSPL-1.0 instead of GNU AGPL 3.0,
and I canāt help but giggle at that
Speaking of WAF(s) / Web Applicaiton Firewalls ā I actually had forgotten that not only have I designed a new WAF from scratch, but Iāve actually implemented it already, and done some local testing. I just havenāt put it into production yet⦠What od you think @aelaraji@aelaraji.com ? š¤ https://git.mills.io/prologic/caddy-waf
Tired to re-enable the Ege route to git.mills.io today (after finishing work) and this is what I found 𤯠Tehse asshole/cunts are still at it !!! 𤬠ā So letās instead see if this works:
$ host git.mills.io 1.1.1.1
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:
git.mills.io is an alias for fuckoff.mills.io.
fuckoff.mills.io has address 127.0.0.1


PS: Would anyone be interested if I started a massive global class action suit against companies that do this kind of abusive web crawling behavior, violate/disregards robots.txt and whatever else standards that are set in stone by the W3C? š¤
Oh fuck me! I had basically turned off the route to git.mills.io last night and went ot bed at ~2AM after unsuccessfully trying to control the attacks (bad bots) that were behaving like a DDoS attack. Tried to re-enable the route this monring and *BOOM, theyāre back! As-if they never stopped?! what da actual fuq?!
Anyone have any clever ideas of what I can do here to allows normal users, like you nice folk and block ths obnoxious traffic?!
Fark me again with the bots. This time DDoS-style crawling from hundreds of IPs and dozens of ASN(s) wtf?!
Iāve had to disale the Ingress to my Git instance for the time being,
i need to sleep and I canāt fight this :/
Hm, so regarding the hash change:
https://git.mills.io/yarnsocial/twtxt.dev/pulls/28
How about 2026-03-01 00:00:00 UTC as the cut-off date? š¤
6.18-rc7: mainline
Version:6.18-rc7 (mainline)Released:2025-11-23Source:linux-6.18-rc7.tar.gzPatch:full ( incremental) ā Read more
All my newly added test cases failed, that movq thankfully provided in https://git.mills.io/yarnsocial/twtxt.dev/pulls/28#issuecomment-20801 for the draft of the twt hash v2 extension. The first error was easy to see in the diff. The hashes were way too long. Youāve already guessed it, I had cut the hash from the twelfth character towards the end instead of taking the first twelve characters: hash[12:] instead of hash[:12].
After fixing this rookie mistake, the tests still all failed. Hmmm. Did I still cut the wrong twelve characters? :-? I even checked the Go reference implementation in the document itself. But it read basically the same as mine. Strange, what the heck is going on here?
Turns out that my vim replacements to transform the Python code into Go code butchered all the URLs. ;-) The order of operations matters. I first replaced the equals with colons for the subtest struct fields and then wanted to transform the RFC 3339 timestamp strings to time.Date(ā¦) calls. So, I replaced the colons in the time with commas and spaces. Hence, my URLs then also all read https, //example.com/twtxt.txt.
But that was it. All test green. \o/
And regarding those broken URLs: I once speculated that these bots operate on an old dataset, because I thought that my redirect rules actually were broken once and produced loops. But a) I cannot reproduce this today, and b) I cannot find anything related to that in my Git history, either. But itās hard to tell, because I switched operating systems and webservers since then ā¦
But the thing is that Iām seeing new URLs constructed in this pattern. So this canāt just be an old crawling dataset.
I am now wondering if those broken URLs are bot bugs as well.
They look like this (zalgo is a new project):
https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/
When you request that URL, you get redirected to /git/:
$ curl -sI https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/
HTTP/1.0 301 Moved Permanently
Date: Sat, 22 Nov 2025 06:13:51 GMT
Server: OpenBSD httpd
Connection: close
Content-Type: text/html
Content-Length: 510
Location: /git/
And on /git/, there are links to my repos. So if a broken client requests https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/, then sees a bunch of links and simply appends them, youāll end up with an infinite loop.
Is that whatās going on here or are my redirects actually still broken ⦠?
6.18-rc6: mainline
Version:6.18-rc6 (mainline)Released:2025-11-16Source:linux-6.18-rc6.tar.gzPatch:full ( incremental) ā Read more
@lyse@lyse.isobeef.org Well, they say you have to build up stocks, donāt they? š
The font is fiamf3 (scaled up 2x, it would be too small when printed). Itās the same one that I use in my terminal and the status bars. š
@bender@twtxt.net Hahaha! :-D But I actually do like their approach. I donāt know what staff should do differently when they are not involved in the channel topic. At least in the general case. Maybe in this specific scenario here they could have cross-checked domains, git repos and stuff like that. But I also reckon that itās only fair if they treat everybody the same.
Done ā Will be available on this pod as soon as the publish workflow finished successfully.