# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 195745
# self = https://watcher.sour.is?offset=195317
# next = https://watcher.sour.is?offset=195417
# prev = https://watcher.sour.is?offset=195217
@thecanine So cool!

It reminds me of the monsters in Heart of Darkness on PSX (just replayed the other day).

https://www.youtube.com/shorts/ZnGOpT5NKxc
@movq No doubt, some things are just so much better the low-tech way. Waste paper, like an opened envelope, suits a shopping list perfectly fine. You've got a nice handwriting, I like it.
@movq \o/
@thecanine Oh no, the poor crocodile is struck by lightning!
****
Y el buque que había enviado el perro al final de postureo. Puto pesoe siempre y con la fuerza de mil mares. ⌘ Read more****
Nem #disco nem música dos #anos70 costumam estar nas minhas audições, mas visto que esse é o tema desta #musiquinta, fui tirar ao pó a um disco-disquito dessa década: "Baccara - Yes Sir, I Can Boogie"

https://www.youtube.com/watch?v=zL831kQUbEo Foto do single "Yes Sir, I Can Boogie" das Baccara a tocar, com a capa à mostra. Pela capa consegue-se ver que o lado B tem a música "Cara mia". A capa propriamente dita são as duas cantoras vestidas com o que se calhar são camisas de dormir, uma de preto e a outra de branco. Uma delas segura uma rosa. A edição é da RCA Victor.
Nem #disco nem música dos #anos70 costumam estar nas minhas audições, mas visto que esse é o tema desta #musiquinta, fui tirar ao pó a um disco-disquito dessa década: "Baccara - Yes Sir, I Can Boogie"

https://www.youtube.com/watch?v=zL831kQUbEo Foto do single "Yes Sir, I Can Boogie" das Baccara a tocar, com a capa à mostra. Pela capa consegue-se ver que o lado B tem a música "Cara mia". A capa propriamente dita são as duas cantoras vestidas com o que se calhar são camisas de dormir, uma de preto e a outra de branco. Uma delas segura uma rosa. A edição é da RCA Victor.
****
Not all medecos pero siempre un putísimo medeco. ⌘ Read more****
I will soon stop wrinting in my twtxt.txt, so you should unsubscribe (to the Atom feed too). Yes, I have something in mind to replace it...
@pBaesse@pBaesse salve! Faria sentido acrescentar o GeoSampa e o OSM nos #dadoslivres? Tem um critério de inclusão pra avaliar? E bases como o Querido Diário?
🧮 USERS:1 FEEDS:2 TWTS:1481 ARCHIVED:90211 CACHE:2731 FOLLOWERS:22 FOLLOWING:14
Nuevo podcast de Texto-Plano: El shareware https://podcast.texto-plano.xyz/podcast/2025/10/01/el-shareware.html
****
Pues en Italia ya se han planteado una huelga general por lo de la flotilla ⌘ Read more****
Recived a non-twtxt webmention from https://brid.gy/like/mastodon/@sorenpeter@norrebro.space/115298639056870144/108271170472562001

mentioning http://darch.dk/testing-syndication-via-rss-to-social-media-via-bufffer

(IP: 34.96.45.23)

Recived a non-twtxt webmention from https://brid.gy/like/mastodon/@sorenpeter@norrebro.space/115298639056870144/109396780231570936

mentioning http://darch.dk/testing-syndication-via-rss-to-social-media-via-bufffer

(IP: 34.96.45.23)

Hello again everyone! A little update on my twtxt client.

I think it's finally shaping a bit better now, but... ☝️

As I'm trying to put all the parts together, I decided to build multiple parallel UIs, to ensure I don't accidentally create a structure that is more rigid than planned.

I already decided on a UI that I would want to use for myself, it would be inspired by moshidon, misskey and some other "social feeds" mock-ups I found on dribbble.

I also plan on building a raw HTML version (for anyone wanting to do a full DIY client).

I would love to get any suggestions of what you would like to see (and possibly use) as a client, by sharing a link, app/website name or even a sketch made by you on paper.

I think I'll pick a third and maybe a fourth design to build together with the two already mentioned.

For reference, the screens I think of providing are (some might be optional or conditionally/manually hidable):

- Global / personal timeline screen
- Profile screen (with timeline)
- Thread screen
- Notifications screen or popup (both valid)
- DM list & chat screens (still planning, might come later)
- Settings screen (it'll probably be a hard coded form, but better mention it)
- Publish / edit post screen or popup (still analysing some use cases, as some "engines" might not have direct publishing support)

I also plan on adding two optional metadata fields:

- display_name: To show a human readable alternative for a nick, it fallback to nick if not defined
- banner: Using the same format as avatar but the image expected is wider, inspired by other socials around

I also plan on supporting any metadata provided, including a dynamically parsable regex rule format for those extra fields, this should allow anyone to build new clients that don't limit themselves to just the social aspect of twtxt, hoping to see unique ways of using twtxt! 🤞
@bender The first format use the subject extension while the other is a new format that is inspired by mentions format, the first one should be compatible but I'm not sure, if it's used verbatim by the client it would work, but if we consider the new proposal for it to have an optional part it wont work on clients without changes.
@movq While using the a frament is pretty nice, I think we can have a twtxt only format if the formatting seems to be a problem.
@lyse I think will be bad if handled incorrectly.

The client must reference both properly or it would miss posts, including both this way is a bit pointless if you can't use the hash or url separately.

Being a highly likely a breaking change anyway I think @zvava proposal looks much better.
Try gopher://1436.ninja/1/Port70News . It works with http and https, if you have no btowser.
@lyse i would like to ditch hash addressing but as was pointed out it would be a pain in the ass to get clients currently working off of hashv1 to suddenly switch to location-based addressing instead of just hashv2 with the option to eventually phase it out — unless we can rally together all active client developers to decide on a location-based addressing specification (i still think my original suggestion of #<https://example.com/tw.txt#yyyy-mm-ddThh:mm:ssZ> is foolproof)
@bender technically it's still the same, but the brackets are different, and the # symbol is on the outside of the brackets, but it makes more sense with @<...> being mentions
@movq huh, firefox actually does seem to tolerate the dashes in the fragment. also, i did propose simply using an anchor link first, but prologic was not a fan of this :p
There was a monster in the sky: https://lyse.isobeef.org/abendhimmel-2025-10-01/

Lizard or shark or something
@thecanine content warning please! I had to go home and change, if you catch my drift. LOL. Well done!
@movq I wish I could truly say that. :-D
@aelaraji, I mean to follow up here on the brief exchange we had on irc.mills.io, but I forgot. Never too late, so here it goes:


18:16 <aelaraji> quark 🙏 much appreciated but it won't be necessary, since there isn't much to miss out on in most of  where I hang out, so I could just disconnect and spare everyone else the noise 
18:17 *** aelaraji (aelaraji@776014f5a3edd32f1ed19658b7b85c8c655945b0feacaedd92fe60e61a3c0ae2) has quit (/ME goes "yeeeeet..!")
18:18 <quark> No noise for me. 
18:18 <quark> It’s all good. 
18:18 <quark> What would IRC be without on/offs?
18:19 <quark> Preeeety boring!
18:19 <quark> Ah, he was gone. 
18:19 <quark> Well, I will twtxt this to him.  LOL. 
Thanks, @alexonit! Yeah, this classic rivet is a good, yet laborous alternative. I don't mind the work, I just don't have any copper at hand. I might give this some more thought, though.
@alexonit Hahaha, that made me laugh real good. :-D I find it always surprising what collects in a short amount of time.
Lynx is the GOAT, if only it linkified text though
@zvava Mixing both addressing schemes combines the worst of both worlds in my opinion. Please don't do that.
@zvava Yes, the specification defines the first url to be used for hashing. No matter if it points to a different feed or whatever. Just unsubscribe from malicious feeds and you're done.

Since the first url is used for hashing, it must never change. Otherwise, it will break threading, as you already noticed. If your feed moves and you wanna keep the old messages in the same new feed, you still have to point to the old url location and keep that forever. But you can add more urls. As I said several times in the past, in hindsight, using the first url was a big mistake. It would have been much better, if the last encountered url were used for hashing onwards. This way, feed moves would be relatively straightforward. However, that ship has sailed. Luckily, feeds typically don't relocate.
@zvava the second format (the one you think should be changed to), is it backwards compatible to what's currently in place? I believe the first one would be.
****
Sois la leche, os gusta más la idea de mi madre haciendo de castañera que hayamos conseguido una relatoria de la ONU ⌘ Read more****
****
En Star Trek, cuando viajan a nuestra era no usan Google como navegador sino DuckDuckGo.

Star Trek New Horizon. T2E3 ⌘ Read more****
I must not buy another mechanical keyboard. I must not buy another mechanical keyboard. I must not… https://www.keychron.com/products/keychron-k8-he-wireless-magnetic-switch-custom-keyboard
Using troff unironically: https://intr.cx/blog/troff
****
Mira, me ha llamado mi madre contándome una buena historia.

Le han llamado del colegio del pueblo para que se disfrace de castañera y vaya a contarles historias a les niñes.

Les ha dicho que sí, pero que hablará de bellotas, que no hay castañas en la zona.

Está ilusionada, haciendo el mandil, buscando los cucuruchos y las trébedes.

Es muy ilusionante, porque este año iba a cerrar el colegio por falta de niñes. Y gracias a dos familias migrantes se ha mantenido abierto. ⌘ Read more****
@alexonit prologic has me sold on the idea of hashv2 being served alongside a text fragment, eg. (#abcdefghijkl https://example.com/tw.txt#:~:text=2025-10-01T10:28:00Z), because it can be simply hacked in to clients currently on hashv1 and provides an off-ramp to location-based addressing (though i still think the format should be changed to smth like #<abc... http://example.com/...> so it's cleaner once we finally drop hashes)
@zvava That was my greatest concern with how it is currently handled, I'm afraid to break threads even by fixing a typo.

Handling it via the pod might work but I think it's not the best approach, external feeds and clients don't usually use a pod api but their own implementation, so any workaround won't work there.

That's why my proposals addressed those issues:

- the idea of using a "key" instead of the url (with the url as a fallback), the key could even be a public key so it can be used verifieable in crypto functions
- using the timestamp to prevent content changes to break threads (plus being simpler to implement)
- using an explicit thread reference with an alternative subject format (like [#THREAD_ID] Hello world and replies with (#REPLY_ID) Ahoy) so the content can change without affecting the thread reference, and anyone can use their own schemes freely
@rnlog bbycll, whenever it is ready, in the meantime you're already on a pretty good one :3
@zvava I just have plastic plants at home too.
I wrote a bit about #mastodon #starterpacks. Starterpacks got popular when Bluesky introduced them, and there is a similar solution for Mastodon too:https://sociab.li/blog/2025/mastodon-starterpacks-follow-and-create-them/
@zvava Don't say that.

The eye candy is always good to have.
@zvava I'm not sure, I could just set up a cors-anywhere via docker in a minute and it would work the same.

Still, I could write one with just a dozen lines of Go or Node.js, I might consider writing one after the client is working decently.
Amazing game, Love the Peer-to-peer with other players and be able to communicate with them.
So smart, would be great to sneak in as an easter egg in a app.
Há 33 anos, antes do mastodon ou das redes sociais, antes dos metaversos 3D sem pernas, antes do DRM na web, antes das redes sociais, antes dos blogs, antes da web 2.0;

Há 33 anos atrás, ainda era a Internet Portuguesa uma criança, nasceu o primeiro #Talker Português, uma comunidade virtual que, 33 anos depois, continua activa.

Parabéns, #SelvaVirtual !

https://selva.grogue.org
Há 33 anos, antes do mastodon ou das redes sociais, antes dos metaversos 3D sem pernas, antes do DRM na web, antes das redes sociais, antes dos blogs, antes da web 2.0;

Há 33 anos atrás, ainda era a Internet Portuguesa uma criança, nasceu o primeiro #Talker Português, uma comunidade virtual que, 33 anos depois, continua activa.

Parabéns, #SelvaVirtual !

https://selva.grogue.org
is the first url metadata field unequivocally treated as the canon feed url when calculating hashes, or are they ignored if they're not *at least* proper urls? do you just tolerate it if they're impersonating someone else's feed, or pointing to something that isn't even a feed at all?

and if the first url metadata field changes, should it be logged with a time so we can still calculate hashes for old posts? or should it never be updated? (in the case of a pod, where the end user has no choice in how such events are treated) or do we redirect all the old hashes to the new ones (probably this, since it would be helpful for edits too)
****
Como os comentaba el otro día, hemos participado como @tunubesecamirio en una relatoría de la ONU que habla del impacto en derechos humanos de los Centros de Datos, por su impacto en energía y agua

Es decir, un informe detallado donde explora como afecta este sector al derecho al agua y energía, y otros derechos humanos.

Podéis leerlo por aquí:

[https://tunubesecamirio.com/2025/09/30/el-relator-de-la-onu-muestra-el-impacto-en-los-derechos-humanos-al-agua-de-los-centro ... ⌘ [Read more](https://mastodon.social/@CorioPsicologia/115297635064585049)****
🧮 USERS:1 FEEDS:2 TWTS:1480 ARCHIVED:90198 CACHE:2728 FOLLOWERS:22 FOLLOWING:14
frontend developer who keeps getting sidetracked doing frontend things instead of fixing the backend :p
what losers
liverpool have lost 2 games in a row
Seems doubtful...
****
Hoy tengo la preocupación por la flotilla por las nubes.

https://globalsumudflotilla.org/tracker/Read more****
@alexonit terrariums are so cool but i couldn't even keep grass from the back yard in a jar alive
im just a poor frontend developer qwq
@alexonit yeah, i didn't even consider this as an option lol, though if it works it works! will you be writing a compatible proxy for self-hosting separate from the custom backend you were thinking of? :o
I always wanted to build a terrarium, but after cleaning my keyboard today, I think I already have one...
@lyse I can suggest you a trick to do a "cold" welding.

Using a copper wire or a similarly malleable material, pass it through a drilled hole, hammer it on one end until flat, then do the same on the other side.

It does the same job of a rivet but it's flatter and look nicer on both sides, it's of course weaker but still strong enough for small objects.

It's sometimes used to reduce risk of deformities due to heat in hand-crafted jewelry and to reduce costs of small tools.
I love it!

Giving the user multiple choices to do the same things is what is great about protocols in general.
@zvava CORS is our worst enemy. 🥷

I too had the same issue being a browser-based request, so the only solution is using a proxy.

For testing (and real personal use) I rely on this one https://corsproxy.io/.

In my client, I first check if the source allows me to fetch it without issues first and fallback to prefixing with a proxy if it gives an error.

For security reasons the client don't give you a readable error for CORS, so you must use a catch-all for that, if it fails again with the proxy you can deal with any other errors it throws as you normally would (preferably outside of the fetch function).

After the fetching responded, I store the response.url value to fetch it again for updates without having to do extra calls (you can store it verbatim or as a flag to be able to change the proxy later).

Here an extract of my code:

t
export async function fetchWithProxy(url, proxy=null) {
    return await fetch(url).catch(err => {
        if (!proxy) throw err;
        return fetch(`${proxy}${encodeURIComponent(url)}`);
    });
}

// Using it with
const res = await fetchWithProxy('https://twtxt.net/user/zvava/twtxt.txt', 'https://corsproxy.io/?');

// Get the working url (direct or through proxy)
const fetchingURL = res.url;

// Get the twtxt feed content (or handle errors)
const text = await res.text();


I also plan to allow the user to define a custom proxy field, I like the solution used by Delta.chat in their android app, where you can define the URL format with a variable https://my-proxy?$TWTXT_URL since it allows you to define with more freedom any proxy without a prefix format.

If the idea of using a third-party proxy is not to the user liking they can use a self-hosted solution like cors-anywhere or build their own (with twtxt it should just be a GET).
I briefly mentioned it yesterday: I wasn't really comfortable with my book rating system anymore. So last night, I spontaneously sat down and redesigned it:https://maurice-renck.de/en/blog/2025/leseliste-update
Bananas are radioactive https://what-if.xkcd.com/158/
****
Qué bien que por fin se tipifíque como delito la violencia vicaria como violencia de género. ⌘ Read more****
#MaradoWeekly #WeeklyPlant Week 39 Collection of purple poppy seeds and two of the pods they came from. The seeds are in a labeled packet with the date, useful for when we decide to plant them
#MaradoWeekly #WeeklyPlant Week 39 Collection of purple poppy seeds and two of the pods they came from. The seeds are in a labeled packet with the date, useful for when we decide to plant them
****
He visto gorros por la calle...

#felizOtoño #felizMartesRead more****
****
¡Mastdodón! ⌘ Read more****
I was born with a Swiss Army Knife and though it was no khukri or any kind of sword, it worked just fine on that umbilical cord and served me the rest of my Swiss Army Life.
@movq Same 👌
https://mapcarta.com está bem legal, só falta ter as rotas de transporte público!

#OpenStreetMap #FreeMaps #MapCarta
🧮 USERS:1 FEEDS:2 TWTS:1479 ARCHIVED:90183 CACHE:2723 FOLLOWERS:22 FOLLOWING:14
****
A ver, que se me ha olvidado lo de la ONU.

Este año hemos participado en una relatoria de la ONU, que hicieron especial sobre Agua y Energía sobre Derechos Humanos. Tenía un apartado especial sobre el tema del agua y los #centrosdedatos donde colaboramos como @tunubesecamirio

El informe había salido, y se me había pasado.

Mañana publicamos el tema. ⌘ Read more****
****
Ostrás, se me olvidó lo de la ONU 🫣 ⌘ Read more****
@alexonit i tried making a webapp initially but i didn't even get into the initial stages of testing because no one sets the Access-Control-Allow-Origin header, so i just jumped into building a backend instead. did you find away around this limitation? :o
Amanhã no #SescAvPaulista rola o último encontro do semestre do Grupo de Estudos em #Python (https://hackmd.io/@sesc-av-paulista/estudos-em-python), se quiser participar é só chegar 14h para pegar uma senha grátis. A atividade é das 14h30 às 16h30.

Em outubro vou dar este curso quintas à tarde com 4 encontros:

https://www.sescsp.org.br/programacao/ilustracoes-vetoriais-para-grandes-formatos-com-programacao/

#SescSP #TecnologiasEArtes Captura de tela da página do curso no site do Sesc
****
Financial Times ha sacado esta pieza donde analiza la desaparición de los trabajos de iniciación al mercado laboral.

Uno de los elementos que analiza es la irrupción de la IA.

Como anécdota personal, puedo contar que el 30% de las tareas que realizaba en mis primeros 5 años de trabajo ahora las hacen IA, y me contrataron precisamente por esas tareas.

https://www.youtube.com/watch?v=IeTFpsuCor8

#JobApocalipsis [ ... ⌘ [Read more](https://mastodon.social/@CorioPsicologia/115288689770963537)****
****
El final de temporada, y serie? de Andor se está volviendo súper emocionante!

#andor2Read more****
Haha, turns out, it's the perfect size to fit hankies: https://lyse.isobeef.org/tmp/blechschachtel/07.jpg
Thank you, @alexonit! It's not sealed at all. If you were pouring in a liquid, it would run out on all four corners. It's just folded over and carefully hammered shut as best as possible. 03 is a bit blurred, but you can see the tab from the right (the short side) tucking in on the left (the long side). The hem on top clamps it in place fairly decently.

I decided against blind rivets, because they leave ugly looking and sharp backsides, which can also interfer with the contents of the box. However, they would be an easy solution to make the corners more rigid and prevent any movement from the short sides.

Unfortunately, I can't weld or solder, so that's not an option. It would be the by far best solution. I wanna learn it one day, though.

Yes, Ken is a really great dude. He's the reason I gave this a shot in the first place. :-)
@itsericwoodward No worries, all good, mate! We all have to start somewhere. Other software requests my feed several orders of magnitude more often.

I can confirm, the User-Agent header appears to be fixed. \o/

Two other things I noticed, though:

1. There's now an OPTIONS request for my feed coming from something that claims to be Firefox, pointing to your feed URL in the query. No clue what this is about. In any case, it's rejected with a 405 Method Not Allowed.

2. Not that these few requests bother me at all, but you might wanna implement caching next with either the If-Modified-Since or If-None-Match request headers. This way, if the feed hasn't changed, the web server can reply with a 304 Not Modified and no body at all, saving unnecessary traffic. But again, this is really not an issue for me at all. I just wanted to make sure you're aware of it, that's all. It might be even already on your agenda. Or you might decide to never do anything about it, which is also fine for me. :-)
As pessoas ciclistas, em princípio, combatem a ideologia da carrocracia (a colonização mental pelo automóvel).
No entanto, muitos nutrem uma tóxica noção de superioridade em relação aos pedestres: furam a sinalização, cruzam de qualquer jeito a faixa de pedestre, assustam a gente e tiram finas. É detestável isso.
Não seja ciclista com a mente carrocrata.
****
Bueno bueno, como no se atreve a quitarme el día de teletrabajo que pacté con él, me pone las reuniones ese día.

Bien jugado Boss!

#felizLunesRead more****
****
Si alguien quiere prepararse unas oposiciones, y no puede permitirse academias privadas, está esta maravillosa iniciativa:

Funcionarios públicos dando formación gratis para que haya más opositores de clase obrera:

https://www.eldiario.es/sociedad/academia-prepara-opositores-forma-gratuita-hay-evitar-haya-funcionarios-clase-social\_1\_12622767.htmlRead more****
@itsericwoodward Cool! 😎
It still needs some cleaning (and some slight UX improvements), but overall, I'm happy with it.

BTW - I promise, I intended it to be pronounced like "TweetStream" (or as written, "TwtStrm"), rather than "TweetStorm". Sorry again. 😊
I _finally_ solved the loading issue in my WIP reader, TwtStrm (and apologies again to anyone that got spammed while I was diagnosing the issue).

After another round of coding this weekend, I'm happy to report that it now renders _all_ the twts (with markdown parsing), complete with localstorage and server-based file caching.
@prologic That zs looks pretty cool! I love simple static site generators, and look forward to trying it on my next web site project. Kudos!
I prefer "glog" over "phlog." Phlog sounds like a character from Spy Kids
@bender Yes! What you're seeing in the demo is just demoing the routes file and redirects, etc/. Pathing more.
@lyse Thanks, I think I fixed it now. Sorry for the spam.
🧮 USERS:1 FEEDS:2 TWTS:1478 ARCHIVED:90172 CACHE:2715 FOLLOWERS:22 FOLLOWING:14
@bender Yes and no.

To build a compliant PWA you need to provide a webmanifest json and a service worker.

Those requirements are not directly part of this project.

You can build the client as a standalone PWA or even as a widget inside an existing page.

The general steps are closer to how you would include a third-party library in an existing project, by importing it as a dependency and using it in your website.

I'm pretty sure most users would expect a PWA (me included) so I plan to provide a ready-made template ready to be deployed as is.
Confesso que tenho uma certa inveja dos amigos que não olham as mensagens no celular, são pessoas mais evoluídas que vivem uma vida com menos ansiedade, com mais momentos "desconectados". Queria conseguir ser um pouco mais assim.
****
Después de días incubando, el resfriado/gripe se ha manifestado con toda su fuerza.

Me alegro que me haya dado tiempo para disfrutar de la manifestación en Zgz. ⌘ Read more****
@alexonit so, a PWA, right?
Wouldn’t a deleted post not show on the list, and if referred from elsewhere render a 404?