@jecxjo Yes please! See: https://git.mills.io/prologic/parley
Problems are Solved by Method\" π¦πΊπ¨βπ»π¨βπ¦―πΉβ πβ― π¨βπ©βπ§βπ§π₯ -- James Mills (operator of twtxt.net / creator of Yarn.social π§Ά)
Also apologies. If you want to chat to me in more ~realtime, I'm more active on something we're calling Parley -- A truly decentralised federated IRC chat system. You have to spin up your own instance (ideally) or join someone else's, but otherwise you use a normal IRCv3 capable client, but the entire "network" (so to speak) automatically forms a decentralized mesh.
π Calling all decentralised enthusiasts that still remembers and use IRC π
Please come join us in a new, truely, decentralised IRC-based chat experience by standing up your own Parley instance on your own domain (bring your own OIDC auth or use the built-in).
Pick your favourite IRCv3-compatible client (there's heaps out there!).
And peer with either me james@mills.io or Admin -> Peers -> Add mills.io or @david via david@ratha.us or simply ratha.us (in Admin -> Peers -> Add).
See you online! π€ #decentralised #irc #chat
@itsericwoodward Then by all means, follow the instructions at https://git.mills.io/prologic/parley and setup your own instance on your own domain. It's partly inspired by Twtxt/Yarn.social and Salty.im -- in at least the way teh DNS discovery and WKID works. Once your instance is up and running and you've gone through the /setup and created yourself an account (or seti it up with an appropraite ODIC IDP) try something like /msg james@mills.io Hey! at which point you should automatically start peering with my instance. You should then be able to /join <a href="?search=lobby1" class="tag">#lobby1</a> (a globally federated channel already across 2 instances so far). π€
Does anyone have time this weekend to manually test and validate and prove out this spec I'm calling Gitxt? A Twtxt-inspired purely decentralised Git federation/forge? π€ Hit me up! You need only git, curl and a web server of some kind.
@movq 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
@fossham I honestly think the most unique and interesting thing about doing this at all is that it is in fact inspired directly by Twtxt / Yarn.social itself -- That is to say, I am confident I can do this in such a way as to be "truly decentralised", no inter-networking like ActivityPub, no centraised forges like Github or Codeberg. You run your instance, I run mine, we just are able to collaborate. Think exchanging patches over Email, just without all the hard-to-learn ways to do that (enough though it's not hard for some of us, but still).
@movq 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
@movq 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
@david 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.
@david Are you able to describe this bug as an Issue in the Gitea Issue Tracker such that it can be reproduced and fixed? π
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)
@david Might not have tested that path very well. Can you make a note of this on Gitea?
Also a "Publish who I follow" toggle: writes # follow = + # following = N into your feed like yarnd does. Off by default (it is your social graph π€), and only on the GitHub/Gitea backends for now where the app owns the feed file. twtd next π€
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 Was it ever really empty on the Codeberg side in the Git repo? π€
And @lyse is right. Not being on Github is a good thing IMO. Even when I was there with all my many projects, I basically got the same amount of "attention" as I do now. The only real way to gain more "attention" is to artificially play the "game". You know. The stupid "Stargazer" one, and whatever you can to get into the "Top 10 X" charts. -- But ultimately that doesn't buy you "quality" contributors or users or whatever. So it's all pointless.
@movq So I see it slightly differently... Over the years I have recieved great contributions from the likes of yourself and @lyse and the many forms of @bender and his friends π Hell even others along the way that have come and gone. Likewise I also think you have recieved many contributions to Jenny over the yeras in much the same way, perhaps not in patches, but user reports, feedback, etc.
So I think what I'm saying here is this... Ever since leaving Github (like you), I find that my desire to continue to build up the community we've built here and to contribute to grow and cultivate it is important to me. My desire to thwart and eliminate useless traffic like bots and ai even strongers.
I want to find a good balance.
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 is on to something, but not to the extend implemented, somewhere in the middle I think? π€
π£ ACTION REQUIRED: Hey folks π For those of you whom are using the Twtxt App either via the Hosted option or on your own twtd instnace or via Github/Gitea or any other publishing backend (doesn't amtter). Please read.
Please open the app and you should be prompted to save your recovery code for your device. This basically is all of your settings, follows, etc in the app itself. This is synced to the Origin everytime you make a change, and also stored on-device. This is what makes it possible to sync your setting across services, move to another device, etc.
Please save a copy of the recovery code somewhere. This is only your only way to recover your settings.
Thank you π
To retest: reload the app, reconnect Codeberg/Gitea with the same token, fill in the new Owner field (dce), repo twtxt, and Feed URL https://hashnix.club/~dce/twtxt.txt. Publish to Codeberg, serve from Hashnix β exactly what you wanted π€ lemme know!
In theory, it's Gitea anyway. So it should work.
also, just to clarify, we built the hosted Service as the last lowest rung ladder for non-technical people. I fully expect most technical people will spin up their own publishing backend or use Github or similar so that long-term the ecosystem still remains very much decentralized.
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 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
Just depends, if I get overwhelmed and can't keep up with demand, I'll insist on a Gitea Issue(s) so I can organise the work.
@GabesArcade Anywhere I can find 'em π€£ Gitea Issues, here, there anywhere you want really π
π₯³ 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 @abucci @shinyoukai @eldersnake π
@balloonfu-sen Unfortunately I tried to support SFTP but ripped this out as Browsers (which the Swag framework uses under the hood as a framework to build PWA(s)) doesn't support raw TCP connections. So FTP / SFTP is not possible without hacks like a proxy. Which I don't really want to support. So only things that have some kind of HTTP API are possible viable publihsing backends right now. That is Github/Gitea, twtd, Yarn, etc.
So... Quick count. Hands up those who are using the Twtxt App? π€ -- And who's also pairing this with the twtd publishing backend?
Fixed the broken hashes in the Twtxt App (https://twtxt.app) π₯³ It was hashing your twts with a client-side timestamp the server never used π€¦ββοΈ Now it keeps the canonical created/hash the pod (or twtd) returns, and the GitHub/Gitea backends write a # url = preamble so every client hashes your feed the same way. Thanks @fastidious for the report π
@itsericwoodward Haha! I'm glad you like it! π€£ I ummed and arrred over the set of publishing backends it should support, and in the end decided to support Yarn, Github/Gitea and twtd. I hope that's enough and flexible enough for most folks π€
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 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 Do you mind git pull && make build and updating your yarnd instance so it's in-line with the new Hash v2 spec π
So I decided to change tact a bit with GoNIX and instead of trying to build apure Go browser from scratch (which I kinda of half succeeded, in at least it was able to render most static ssr sites), I've instead decided to write a new browsered using the Chromium Embedded Framework, otherwise known as CEF. So now I have a fully working browser in GoNIX π -- However since my goal is to keep GoNIX pretty lcean and mostly written in Go, I delegated the cef part(s) to an OCI container image and run that with GoNIX's box (command-line container runtime). It works great π
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".
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
Just cancelled my sponsorship of two developers on Github, sorry π -- I'm not going to sponsor going forward if no-one else can be bothered to. It seems silly to be the sole sponsor of another's work or project π€¦ββοΈ
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's double ratcheting work and [ratchet](Blank front page) 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
Trying an experiment. Created a Github repo for mu over at https://github.com/prologic/mu as a social experiment to see if we can maintain a tailored Github docs-only repo of a project, see if it gets any interest π€
Took me nearly all week (in my spare time), but Mu (Β΅) finally officially support linux/amd64 π₯³ I completely refactored the native code backend and borrowed a lot of the structure from another project called wazero (the zero dependency Go WASM runtime/compiler). This is amazing stuff because now Mu (Β΅) runs in more places natively, as well as running everywhere Go runs via the bytecode VM interpreter π€
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
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.
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 ? π€ https://git.mills.io/prologic/caddy-waf
So blackholing my Gitea instance's DNS for the day seemed to have worked π€£ (if only I had a real target I could have made their fucking crawlers DDoS themselves π) -- Let's also see if enabling DDoS proection on the Edge via Vultr's DDoS capability also helps? π€
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 :/
PR to clean up some unwanted specs and cleanup some invalid/bad references. π
π₯³ Just released Gatherly v0.3.0 π€ -- My instance is available at: https://gatherly.mills.io (free for anyone to use)
I think I'm just about ready to go live with my new blog (migrated from MicroPub). I just finished migrating all of the content over, fixing up metadata, cleaning up, migrating media, optimizing media.
The new blog for prologic.blog soon to be powered by zs using the zs-blog-template is coming along very nicely π It was actually pretty easy to do the migration/conversation in the end. The results are not to shabby either.
Before:
- ~50MB repo
- ~267 files
After:
- ~20MB repo
- ~88 files
Pretty happy with my zs-blog-template starter kit for creating and maintaining your own blog using zs π Demo of what the starter kit looks like here -- Basic features include:
- Clean layout & typography
- Chroma code highlighting (aligned to your site palette)
- Accessible copy-code button
- βOn this pageβ collapsible TOC
- RSS, sitemap, robots
- Archives, tags, tag cloud
- Draft support (hidden from lists/feeds)
- Open Graph (OG) & Twitter card meta (default image + per-post overrides)
- Ready-to-use 404 page
As well as custom routes (redirects, rewrites, etc) to support canonical URLs or redirecting old URLs as well as new zs external command capability itself that now lets you do things like:
$ zs newpost
to help kick-start the creation of a new post with all the right "stuff"β’ ready to go and then pop open your $EEDITOR π€
I just created a zs blogging template which I'm going to use for https://prologic.blog and I might starting writing long-form again soonβ’ π So far the "blogging" template/engine (if you weill) is quite simple. It comprises essentially of an index.md a prehook and a few utilities:
$ git ls-files
.gitignore
.zs/config.yml
.zs/editthispage
.zs/include
.zs/layout.html
.zs/list
.zs/months
.zs/now
.zs/onthispage
.zs/posthook
.zs/postsbymonth
.zs/prehook
.zs/scripts
.zs/styles
.zs/tagcloud
.zs/taglist
.zs/years
archives/.empty
assets/css/site.css
assets/js/main.js
index.md
posts/hello-zs-blog.md
posts/on-tagging.md
posts/second-post.md
tags/.empty Please don't upload my code on Github!
I'm thinking about putting this up on all my projects and even on the front page of my Gitea instance π€
@kat / @xuu Recommend you git checkout main && git pull, rebuild and redeploy: make build, and however you deploy. π Lots of fixes (no more stalling) and optimizations to the feed fetcher, smoother cpu usage, better internal metrics.
Today I added support for Let's Encrypt to eris via DNS-01 challenge. Updated the gcore libdns package I wrote for Caddy, Maddy and now Eris. Add support for yarn's cache to support # type = bot and optionally # retention = N so that feeds like @tiktok work like they did before, and... Updated some internal metrics in yarnd to be IMO "better", with queue depth, queue time and last processing time for feeds.
First draft of yarnd 0.16 release notes. π -- Probably needs some tweaking and fixing, but it's sounding alright so far π #yarnd
Add support for skipping backup if data is unchagned Β· 0cf9514e9e - backup-docker-volumes - Mills π I just discovered today, when running backups, that this commit is why my backups stopped working for the last 4 months. It wasn't that I was forgetting to do them every month, I broke the fucking tool π€£ Fuck π€¦ββοΈ
Timeline Sandbox
