#testing @ Hi Bob, nice to meet you!
If we don’t keep insisting on simplify and “The beauty of twtxt is, you put one file on your server, done. One.”, then people should just use ActivityPub-based software like Mastodon, PixelFed, etc. which are getting a lot of attention and uses migrating to the fediverse from meta/x here in Denmark over the last couple of months.
yes it works now :)
@prologic@twtxt.net All the URL are missing the protocol part (https://
) and my markdown parser does not know how to handle but I see yarnd does it just fine.
@falsifian@www.falsifian.org
it look like your markdown image tags are missing the protocol part (https://
) so they don’t render at least on my server: https://darch.dk/timeline/conv/3vtnszq
@andros@twtxt.andros.dev Thank you :-)
@andros@twtxt.andros.dev screenshots plz :=!
Added support for uploading images to to #Timeline
Right now you need to copy the markdown code yourself, but next up would be to lean some JS or use HTMX to make the process more smooth.
What exact feeds are we talking about that uses spaces instead of tabs or the T’s in timestamp?
So what are some good alternatives to GitHub, that are not based in USA?
I like the minimal feel of sourcehut but it seem you have to pay if you want your, not just submit patches to others repos. But they also got IRC bouncer and mailing-lists included. Codeberg also looks appealing being based in Germany.
@lyse@lyse.isobeef.org that 3th shot of the heron taking off is epic!
@aelaraji@aelaraji.com I’ve been noticing the same, so I opened an issue now (https://github.com/sorenpeter/timeline/issues/55) and then we will have to look into it.
#genuary #genuary2025 #genuary17 Maybe related to today prompt: What happens if pi=4? https://youtu.be/tGfUaZ8hTzg
@arne@uplegger.eu nice work with the client.
I also see you are using the Yellow CMS for your website🍋
@doesnm.p.psf.lt@doesnm.p.psf.lt Are you also using https://cabal.chat or just someone else with the same random username?
@doesnm.p.psf.lt@doesnm.p.psf.lt Cool lets see if this works?!
@<url>
form of mentions. Strictly require that all mentions include a nickname/name; i.e: @<name url>
.
@prologic@twtxt.net I say we should find a way to support mentions with only url, no nick, as per the original spec.
- For
@<nick url>
we already got support
- For
@<nick>
the posting client should expand it to@<nick url>
, if not then the reading client should just render it as@nick
with no link.
- For
@<url>
the sending client should try to expand it to@<nick url>
, if not then the reading client should try to find or construct a nick base on:
- Look in twtxt.txt for a
nick =
- Use (sub)domain from URL
- Use folder or file name from URL
- Look in twtxt.txt for a
nick = _@domain.tld
in the twtxt.txt?
hmm any ideas how to fix this case when there is no nick and it on a shared tilde hosting? http://darch.dk/timeline/profile?url=https://tilde.club/~deepend/twtxt.txt
@doesnm@doesnm.p.psf.lt How did you post from IndiePass? Did you add support for twtxt or use some kind of bridge?
nick = _@domain.tld
in the twtxt.txt?
I’ve implemented Use only nick as handle if nick and domain is the same · sorenpeter/timeline@8c12444
See it live at:
- nick = domain: https://darch.dk/timeline/profile?url=https://eapl.me/tw.txt
- nick ≠ domain: https://darch.dk/timeline/profile?url=https://twtxt.net/user/prologic/twtxt.txt
- no nick, use domain: https://darch.dk/timeline/profile?url=https://akkartik.name/twtxt.txt
I’m not sure I like the leading @
thou…
nick = _@domain.tld
in the twtxt.txt?
What should the advantage be to nick = _
compared to just not defining a nick and let the client use the domain as the handle?
What is not intuitive is that you put something in the nick field that is not to be taken literary. The special meaning of _
is only clean if you read the documentation, compared to having something in nick that makes sense in the current context of the twtxt.txt.
If NICK = DOMAIN then only show @DOMAIN
So instead of @eapl.me@eapl.me it will just be @eapl.me
@doesnm@doesnm.p.psf.lt So the user should then set nick = _@domain.tld
in the twtxt.txt?
It seems more intuitive and userfriendly to just use: nick = domain.tld
and have then convention for clients to render the handle as @domain.tld instead of @domain.tld@domain.tld
For a feed with no nick defined (eg. https://akkartik.name/twtxt.txt) it will also be simpler and make more sense to just use the domain as the nick and render it as @domain.tld
Are we talking about profile view heading, heading of posts or inline mentions?
In yarnd I recall there is a setting for changing the heading of posts, but not for the two others as of yet.
I like the hover option for inline mentions. For the other places some like how yarnd does it in two line or “ nick (domain.tld) ” could also work.
@eapl.me@eapl.me A way to have a more bluesky’ish handles in twtxt could be to take inspiration from Bridgy Fed and say: If NICK = DOMAIN then only show @DOMAIN
So instead of @eapl.me@eapl.me it will just be @eapl.me
And it event seem that it will not break webfinger lookup: https://webfinger.net/lookup/?resource=%40darch.dk (at least not for how I’ve implemented webfinger on my sever for a single user;)
I’ve started a draft over at: https://git.mills.io/yarnsocial/twtxt.dev/src/branch/main/exts/webfinger.md
@prologic@twtxt.net maybe you meant to specify twtxt as a type similar to ActivityPub’s application/activity+json
in https://webfinger.net/lookup/?resource=sorenpeter@norrebro.space
{
"rel": "self",
"type": "application/activity+json",
"href": "https://norrebro.space/users/sorenpeter"
},
Then it would also make sense to define a Link Relations but should that then link to something like https://twtxt.dev/webfinger.html
where we can describe the spec?
@prologic@twtxt.net Well I just mirrored yarnd’s JSON in my webfinger endpoint and lookup, so not much else to do for standardization.
And for people who don’t like PHP you can always just go with Added WebFinger support to my email address using one rewrite rule and one static file. or simply putting a static JSON in place for .well-know/webfinger
I like the cleaness and indiewebness of using just domains for handles/shorthands similar to blusky, but the situations with more users on the same domain and that people in the fediverse (threads too?) are already familiar with the syntax speaks for webfinger. And since we already got support for webfinger in both yarnd and timeline it makes sense to stick with it.
@movq@www.uninformativ.de Where in firefox can I set custom CSS?
@prologic@twtxt.net What IRC client is that?
@aelaraji@aelaraji.com https://github.com/sorenpeter/timeline/commit/555baefcd0e75e6a281472994e8eb7ae9b5d2a1c
Wow, it seem my #Webmentions implementation works from Mastodon via brid.gy
good luck with the doughnut on a stick in a URL
or timeline.txt ;)
test post EDIT
Yes it work: 2024-12-01T19:38:35Z twtxt/1.2.3 (+https://eapl.mx/twtxt.txt; @eapl)
:D
The .log is just a simple append each request. The idea with the .cvs is to have it tally up how many request there have been from each client as a way to avoid having the log file grow too big. And that you can open the .cvs as a spreadsheet and have an easy overview and filtering options.
Access to those files are closed to the public.
My twtAgent.php
was turned off, so try again now. I have uploaded the code to: https://github.com/sorenpeter/twtAgent
What was it suppose to look like? a <detail><summary>
-tag maybe?
@eapl.mx@eapl.mx Yes, the idea is to add User Agent support to #Timeline.
Right now it just adds every request to a growing log file, but I have also been working on a way to analyse it, so it only saves the time of the latest request.
I’m not sure how to make it part of timeline itself, since it requeses that you redirect/rewrite from twtAgent.php
to the acctual twtxt.txt
Help with making Timeline send proper User Agents to others would be much appreciated:)
@lyse@lyse.isobeef.org One person had came access it before, but no tried it
@prologic@twtxt.net Just that people thought twtxt sounded cool and maybe want to set it up themself
@eapl.mx@eapl.mx Super to see you got webmentions working too :)
EDIT: A webmention was send to: https://eapl.mx/timeline/webmention (Status: 202)
@johanbove@johanbove.info Thanks, I’m glad you like it.
@movq@www.uninformativ.de There was no time for discussion just after the presentation, but I had a chat with some folks later.
“A minimalist social network powered by plain text files” - my talk about #twtxt from #Piksel24 Festival is now on YouTube and slides can be found at http://darch.dk/twtxtalk-piksel
Because I don’t have capacity on my server to host and stream video and I want others to be able to find the video.
I’m gonna upload my part of the video to youtube and the slides to my website within a day or two. Then you can add it to yarn.social etc.
Live from Piksel Festival in about an hour via: https://www.twitch.tv/pikselfest - Also other presentations stating momentary
I’m giving a shot talk about twtxt/yarn/timeline tommow around noon CET at Piksel Festival in Norway. More info and link for live stream at: https://24.piksel.no
(So I will most likely not be joining the call)
@bender@twtxt.net The tagline of Timeline is “a single user twtxt/yarn pod” not just a yarn pod. Similar to GNU/Linux. When we came up with the concept of Yarn Social it was a way to rebrand twtxt with the extensions that makes conversations like this possible.
Great to see another user @aelaraji@aelaraji.com - And I can confirm that my #webmentions works from your server
(I know, the formatting is messed up;)Hey @aelaraji@aelaraji.com I’m running PHP 8.2 on my server
@movq@www.uninformativ.de I knew you would like it;)
@eapl.me@eapl.me here are my replies (somewhat similar to Lyse’s and James’)
Metadata in twts: Key=value is too complicated for non-hackers and hard to write by hand. So if there is a need then we should just use #NSFS or the alt-text file in markdown image syntax

if something is NSFWIDs besides datetime. When you edit a twt then you should preserve the datetime if location-based addressing should have any advantages over content-based addressing. If you change the timestamp the its a new post. Just like any other blog cms.
Caching, Yes all good ideas, but that is more a task for the clients not the serving of the twtxt.txt files.
Discovery: User-agent for discovery can become better. I’m working on a wrapper script in PHP, so you don’t need to go to Apaches log-files to see who fetches your feed. But for other Gemini and gopher you need to relay on something else. That could be using my webmentions for twtxt suggestion, or simply defining an email metadata field for letting a person know you follow their feed. Interesting read about why WebMetions might be a bad idea. Twtxt being much simple that a full featured IndieWeb sites, then a lot of the concerns does not apply here. But that’s the issue with any open inbox. This is hard to solve without some form of (centralized or community) spam moderation.
Support more protocols besides http/s. Yes why not, if we can make clients that merge or diffident between the same feed server by multiples URLs
Languages: If the need is big then make a separate feed. I don’t mind seeing stuff in other langues as it is low. You got translating tool if you need to know whats going on. And again when there is a need for easier switching between posting to several feeds, then it’s about building clients with a UI that makes it easy. No something that should takes up space in the format/protocol.
Emojis: I’m not sure what this is about. Do you want to use emojis as avatar in CLI clients or it just about rendering emojis?
Would it make sense for twtxt v.2 to do something similar to bluesky, where you use a domain as you handle by creating a specific DNS record as explained by: https://matthiasott.com/notes/how-to-set-your-domain-as-your-bluesky-handle
What are peoples #IRC setup? Do you have your own bouncer server or just have a you computer always on? And do you IRC on mobile?
I’m planning to be there tomorrow (message from yesterday, since we can not all live in the future;)
@movq@www.uninformativ.de How hard would it be to implement something like (#<2024-10-25T17:15:50Z https://www.uninformativ.de/twtxt.txt>)
in jenny as a replacement for (#twthash)
and have it not care about if is http(s) or a g-protocol?
@Codebuzz@www.codebuzz.nl Speed is an issue for the client software, not the format itself, but yes I agree that it makes the most sense to append post to the end of the file. I’m referring to the definition that it’s the first url =
in the file that is the one that has to be used for the twthash computation, which is a too arbitrary way of defining something that breaks treading time and time again. And this is the case for not using url+date+message = twthash.
Simplified twtxt - I want to suggest some dogmas or commandments for twtxt, from where we can work our way back to how to implement different feature like replies/treads:
It’s a text file, so you must be able to write it by hand (ie. no app logic) and read by eye. If you edit a post you change the content not the timestamp. Otherwise it will be considered a new post.
The order of lines in a twtxt.txt must not hold any significant. The file is a container and each line an atomic piece of information. You should be able to run
sort
on a twtxt.txt and it should still work.Transport protocol should not matter, as long as the file served is the same. Http and https are preferred, so it is suggested that feed served via Gopher or Gemini also provide http(s).
Do we need more commandments?
@prologic@twtxt.net Why does twtxt.net still show my old avatar?
@Codebuzz@www.codebuzz.nl Welcome to the twt’verse 👋
@doesnm@doesnm.p.psf.lt finally someone read my blogpost ;)
@aelaraji@aelaraji.com Thank you, and yes I got more on my websites https://darch.dk/vj/ and https://algorave.dk/videos/
Video of my latest #livecoding show using #punctual for #visuals
https://www.youtube.com/watch?v=CsM39SpRik8
I know no client support it (yet) - but it could be the future 😅
@2024-10-09T08:11:00Z@twtxt.net It an easy way of twt-adressing by using the timestamp instead of a nick, which is arbitrary anyhow. Just my suggestion for a new reply-model ;)
@2024-10-08T19:36:38-07:00@a.9srv.net Thanks for the followup. I agrees with most of it - especially:
Please nobody suggest sticking the content type in more metadata. 🙄
Yes, URL can be considered ugly, but they work and are understandable by both humans and machines. And its trivial for any client to hide the URLs used as reference in replies/treading.
Webfinger can be an add-on to help lookup people, and it can be made independent of the nick by just serving the same json regardless of the nick as people do with static sites and a as I implemented it on darch.dk (wf endpoint). Try RANDOMSTRING@darch.dk
on http://darch.dk/wf-lookup.php (wf lookup) or RANDOMSTRING@garrido.io
on https://webfinger.net
Thanks @david@collantes.us, good to know, but we need to agree on what character we use, otherwise the hashes will not be the same:)
@prologic@twtxt.net Regarding the new way of generating twt-hashes, to me it makes more sense to use tabs as separator instead of spaces, since the you can just copy/past a line directly from a twtxt-file that already go a tab between timestamp and message. But tabs might be hard to “type” when you are in a terminal, since it will activate autocomplete…🤔
Another thing, it seems that you sugget we only use the domain in the hash-creation and not the full path to the twtxt.txt
$ echo -e "https://example.com 2024-09-29T13:30:00Z Hello World!" | sha256sum - | awk '{ print $1 }' | base64 | head -c 12
@prologic@twtxt.net YES James, it should be up to the client to deal with changes like edits and deletions. And putting this load on the clients, location-addressing with make this a lot easier since what is says it: Look in this file at this timestamp, did anything change or went missing? (And then threading will not break;)
why can we both have a format that you can write by hand and better clients?
yes that works
(#2024-09-24T12:53:35Z) What does this screenshot show? The resolution it too low for reading the text…
(#abcdefg12345)
to something like (https://twtxt.net/user/prologic/twtxt.txt 2024-09-22T07:51:16Z)
.
(#2024-09-24T12:45:54Z) @prologic@twtxt.net I’m not really buying this one about readability. It’s easy to recognize that this is a URL and a date, so you skim over it like you would we mentions and markdown links and images. If you are not suppose to read the raw file, then we might a well jam everything into JSON like mastodon
yarnd
does for example) and equally a 5x increase in on-disk storage as well. This is based on the Twt Hash going from a 13 bytes (content-addressing) to 63 bytes (on average for location-based addressing). There is roughly a ~20-150% increase in the size of individual feeds as well that needs to be taken into consideration (on the average case).
(#2024-09-24T12:44:35Z) There is a increase in space/memory for sure. But calculating the hashes also takes up CPU. I’m not good with that kind of math, but it’s a tradeoff either way.
(#2024-09-24T12:39:32Z) @prologic@twtxt.net It might be simple for you to run echo -e "\t\t" | sha256sum | base64
, but for people who are not comfortable in a terminal and got their dev env set up, then that is magic, compared to the simplicity of just copy/pasting what you see in a textfile into another textfile – Basically what @movq@www.uninformativ.de also said. I’m also on team extreme minimalism, otherwise we could just use mastodon etc. Replacing line-breaks with a tab would also make it easier to handwrite your twtxt. You don’t have to hardwrite it, but at least you should have the option to. Just as i do with all my HTML and CSS.
yarnd
supports the use of WebMentions, it's very rarely used in practise (if ever) -- In fact I should just drop the feature entirely.
(#2024-09-24T12:34:31Z) WebMentions does would work if we agreed to implement it correctly. I never figured out how yarnd’s WebMentions work, so I decide to make my own, which I’m the only one using…
I had a look at WebSub, witch looks way more complex than WebMentions, and seem to need a lot more overhead. We don’t need near realtime. We just need a way to notify someone that someone they don’t know about mentioned or replied to their post.
Some more arguments for a local-based treading model over a content-based one:
The format:
(#<DATE URL>)
or(@<DATE URL>)
both makes sense: # as prefix is for a hashtag like we allredy got with the(#twthash)
and @ as prefix denotes that this is mention of a specific post in a feed, and not just the feed in general. Using either can make implementation easier, since most clients already got this kind of filtering.Having something like
(#<DATE URL>)
will also make mentions via webmetions for twtxt easier to implement, since there is no need for looking up the#twthash
. This will also make it possible to make 3th part twt-mentions services.Supporting twt/webmentions will also increase discoverability as a way to know about both replies and feed mentions from feeds that you don’t follow.
(replyto:…)
. It’s easier to implement and the whole edits-breaking-threads thing resolves itself in a “natural” way without the need to add stuff to the protocol.
@movq@www.uninformativ.de I cases of these kind of “abuse” of social trust. Then I think people should just delete their replies, unfollow the troll and leave them to shouting in the void. This is a inter-social issue, not a technical issue. Anything can be spoofed. We are not building a banking app, we are just having conversation and if trust are broken then communication breaks down. These edge-cases are all very hypothetical and not something I think we need to solve with technology.
Been thinking about it for the last couple of days and I would say we can make do with the shorter (#<DATETIME URL>)
since it mirrors the twt-mention syntax and simply points to the OP as the topic identified by the time of posting it. Do we really need and (edit:...)
and (delete:...)
also?
@prologic@twtxt.net what time in UTC?
@quark@ferengi.one It does not. That is why I’m advocating for not using hashes for treads, but a simpler link-back scheme.
@prologic@twtxt.net you will always be replying to OP - that is what the twthash is a shorthand for, it it not?!
no my fault your client can’t handle a little editing ;)
@movq@www.uninformativ.de I’m glad you like it. A mention (@<movq https://www.uninformativ.de/twtxt.txt>
) is also long, but we live with it anyway. In a way a replyto:
is just a mention of a twt instead of a feed/person. Maybe we chould even model the syntax for replies on mentions: (#<2024-09-17T08:39:18Z https://www.eksempel.dk/twtxt.txt>)
?!
@mckinley@twtxt.net Thanks for the feedback.
- Yeah I agrees that nick sound not be part of syntax. Any valid URL to a twtxt.txt-file should be enough and is more clear, so it is not confused with a email (one of the the issues with webfinger and fedivese handles)
- I think any valid URL would work, since we are not bound to look for exact matches. Accepting both http and https as well as a gemni and gophe could all work as long as the path to the twtxt.txt is the same.
- My idea is that you quote the timestamp as it is in the original twtxt.txt that you are referring to, so you can do it by simply copy/pasting. Also what are the change that the same human will make two different posts within the same second?!
Regarding the whole cryptographic keys for identity, to me it seems like an unnecessary layer of complexity. If you move to a new house or city you tell people that you moved - you can do the same in a twtxt.txt. Just post something like “I move to this new URL, please follow me there!” I did that with my feeds at least twice, and you guys still seem to read my posts:)
The tag URI scheme looks interesting. I like that it human read- and writable. And since we already got the timestamp in the twtxt.txt it would be somewhat trivial to parse. But there are still the issue with what the name/id should be… Maybe it doesn’t have to bee that stick?
Instead of using tag:
as the prefix/protocol, it would more it clear what we are talking about by using in-reply-to:
(https://indieweb.org/in-reply-to) or replyto:
similar to mailto:
(reply:sorenpeter@darch.dk,2024-09-15T12:06:27Z)
(in-reply-to:darch.dk/twtxt.txt,2024-09-15T12:06:27Z)
(replyto:http://darch.dk/twtxt.txt,2024-09-15T12:06:27Z)
I know it’s longer that 7-11 characters, but it’s self-explaining when looking at the twtxt.txt in the raw, and the cases above can all be caught with this regex: \([\w-]*reply[\w-]*\:
Is this something that would work?
Thank you @aelaraji@aelaraji.com, I’m glad you like it. I use PHP because it’s everywhere on cheap hosting and no need for the user to log into a terminal to setup it up. Timeline is not mean to be use locally. For that I think something like twtxt2html is a better fit. (and happy to see you using simple.css on you new log page;)
url
field in the feed to define the URL for hashing. It should have been the last encountered one. Then, assuming append-style feeds, you could override the old URL with a new one from a certain point on:
I was not suggesting to that everyone need to setup a working webfinger endpoint, but that we take the format of nick+(sub)domain as base for generating the hashed together with the message date and content.
If we omit the protocol prefix from the way we do things now will that not solve most of the problems? In the case of gemini://gemini.ctrl-c.club/~nristen/twtxt.txt
they also have a working twtxt.txt at https://ctrl-c.club/~nristen/twtxt.txt
… damn I just notice the gemini.
subdomain.
Okay what about defining a prefers protocol as part of the hash schema? so 1: https , 2: http 3: gemini 4: gopher ?
@prologic@twtxt.net do that mean that for every new post (not replies) the client will have to generate a UUID or similar when posting and add that to to the twt?
url
field in the feed to define the URL for hashing. It should have been the last encountered one. Then, assuming append-style feeds, you could override the old URL with a new one from a certain point on:
how little data is needed for generating the hashes? Instead of the full URL, can we makedo with just the domain (example.net) so we avoid the conflicts with gemini://
, https://
and only http://
(like in my own twtxt.txt) or construct something like like a webfinger id nick@domain
(also used by mastodon etc.) from the domain and nick if there, else use domain as nick as well
For following notifications I would say use webmetion refering to the the line in your twtxt.txt as per: https://darch.dk/mentions-twtxt
Or send them an email, so it would be an idea to add a # contact = mailto:me@domain.net
to ones twtxt.txt
This reminds me of this video: The Biggest Gap in Science: Complexity
However you might end up with more questions (complexity?) than answers (simplicity?)
s/(www\.)?youtube.com\/watch?v=([^?]+)/tubeproxy.mills.io/play/\1
for example? 🤔
Have not tried any of them, but some of these seem to fit the bill:
ok != perfect
It looks okay on my timeline: http://darch.dk/timeline/conv/omu7e4q
@prologic@twtxt.net The old options are still valid, so “Show latest post per feed” should just be added as a 3th.