In the last weeks Lemmy has seen a lot of growth, with thousands of new users. To welcome them we are holding this AMA to answer questions from the community. You can ask about the beginnings of Lemmy, how we see the future of Lemmy, our long-term goals, what makes Lemmy different from Reddit, about internet and social media in general, as well as personal questions.
We’d also like to hear your overall feedback on Lemmy: What are its greatest strengths and weaknesses? How would you improve it? What’s something you wish it had? What can our community do to ensure that we keep pulling users away from US tech companies, and into the fediverse?
Lemmy and Reddit may look similar at first glance, but there is a major difference. While Reddit is a corporation with thousands of employees and billionaire investors, Lemmy is nothing but an open source project run by volunteers. It was started in 2019 by @dessalines and @nutomic, turning into a fulltime job since 2020. For our income we are dependent on your donations, so please contribute if you can. We’d like to be able to add more full-time contributors to our co-op.
We will start answering questions from tomorrow (Wednesday). Besides @dessalines and @nutomic, other Lemmy contributors may also chime in to answer questions:
Here are our previous AMAs for those interested.
- I have no idea how and which server I joined, is there any manial I can read better yet visually see how servers are connected that are federated? Thx. And when we search something does it search across all servers? Thanks.
When will anyone be able to click the following /c/books And see an agglomeration of all “books” communities on all federated server? I don’t mean multireddits Thanks!!
When will users be able to frictionlessly migrate between instances without losing their posts, their comments, their history, their relationships, their reputation etc? (Without requiring the consent of the exiting instance owner, or that this server still even exists, as they sometimes don’t)
What’s something you wish it had? What can our community do to ensure that we keep pulling users away from US tech companies, and into the fediverse?
One of the biggest issue at this point is probably the registration experience. There are quite a few occurrences on !fedibridge@lemmy.dbzer0.com of users not sure whether their email has been validated or not, and at the moment they really need to look out for the toastify notification on their first try, later attempts won’t show it.
Most recent example: https://lemmy.ml/post/27607055?scrollToComments=true
If there could be a way to inform a user saying “your email address has been validated, please wait for an administrator to activate your account, you can reach out to them at xxx”, that would be great.
This generally goes against security best practices as it can be used for attempted user enumeration. A better version would be “we’ll send you an email with your account status if this user exists” but obviously that results in a fair amount more complexity (and cost) to implement
Enumerating users is not a security problem. It’s platform obscurantism to even suggest that it is.
I think I’ll trust owasp and my own over 20 years of experience building commercial software but you do you
I am not suggesting users being able to enumerate other users, just that the unique link that is currently used for email verification would be more explicit than just the one time toastify notification
the password/cookie should still work even when awaiting validation, password is set before the email is sent
I’d need more detail here. If registration emails aren’t being sent out correctly, we need to handle that.
These two posts should provide more details
Youre right, I also noticed some other problems while testing registrations:
- https://github.com/LemmyNet/lemmy/issues/5547
- https://github.com/LemmyNet/lemmy/issues/5548#issue-2949361836
For the email validation it could also make sense to send out another email saying “your email has been validated”, so its not only shown on the website.
Thanks!
What was the last post that made you really laugh?
This one by @lka1988@sh.itjust.works
Hahaha thanks! That’s great!
Communities should be more unified across servers, especially for niche ones. I want to see an active Metroid community, I don’t give a crap what instance is hosting it (or if it’s a mostly-opaque medley of instances) so long as I’m federated with it. This is probably the biggest UX misunderstanding new users have.
This should be among the first priorities. It would really help kick things off. Not only niche communities, but bigger ones as well. They represent topics of interest. I think I’ve seen a thing like macro community in one of the clients?! Could that be it?
Eternity Android client allows grouping communities into a multi community, but it only helps on getting consolidated feed, not necessarily reaching the same people
the Summit app does it too
How would two communities named
news
, work for say, a server about star trek, and another located in a city.Well, what is each meant to represent? Should communities be constructed around the concept of topics, or should there be a server for each topic?
And please don’t use any variant of “everybody can do it whichever they want”, because this just avoids the responsibility of offering a personal answer and shifts it to them.
Personally I think the first (communities=topics)., while servers should provide voluntary redundancy for each other in case one of the servers has an inconvenient change of policies or circumstances for the users.
But I am not on the creative team of Lemmy, so my vision might differ from theirs. Also, I’m willing to change my belief if more solid arguments are presented.
Being able to view “all” communities with the same name across all instances would be so nice.
The problem here is that a community news@connecticut.social will have a completely different topic than news@mmorpg.net . In some cases the same name means same topic, in some cases not.
To be totally honest, a lot of communities aren’t big enough yet to really necessitate splitting into niche communities yet. I don’t know if gaming/Metroid is an example of one that does or doesn’t meet that. It’s just an observation.
What exactly is it you’re asking for, though? A change in user behaviour towards consolidation? Some new feature of the platform similar to multi-reddits? How exactly do you suggest that should work?
Not a change in user behaviour. How about: communities on different instances with the same name appear as one community essentially. As in, all instances’ version of that community appear in your feed if subscribed, and when viewing posts in a community, all instances versions of that community are visible.
Perhaps the user can restrict to just one instance’s community or just the local instance’s community with a button (like local/all), if that’s their preference.
This is a bad idea. They’re different communities. Full stop. They have different moderators. They may have different rules. I’m not even convinced communities using the same URL slug on different instances would even imply they’re the same topic.
Good luck with !politics@hexbear.net and !politics@lemmy.world
Right, so, in some circumstances it wouldn’t necessarily be a good idea to join identically-named communities.
Maybe it should be more like the multireddit idea – people have to manually set up the links between the communities.
Ha! The discoursive whiplash would be immense.
That’s gonna be fun for cases like c/trees. Someone somewhere will get the joke, someone somewhere won’t.
!fedigrow@lemm.ee has several examples of consolidation
Consolidation isn’t always a good thing, communities on different instances will have different styles and trends, and that’s a good thing. The benefit of federated social media is just as much in local instances as it is in federation, unique niches are going to have unique comments even if the post is the exact same.
I think the benefit of federation is that nobody controls the whole ecosystem. The downside of federation is splintering.
Less that nobody can control the whole thing, more that you can have full control of your own thing. Basically the same thing you said, but I think it’s important to note that many niche communities thrive on Lemmy.
Many more niche communities languish because they can never get enough traction to be seen.
If I subscribe to
/c/dubstep
, chances are I don’t care if it islemmy.ml/c/dubstep
orlemmy.world/c/dubstep
, but neither community is likely to be active because one comm on one instance needs to be the popular one for other users to sub and want to post there. What I really want is/f/dubstep
I disagree, actually. The issue here is relying on communities to be active, rather than instances with a healthy size and sorting by new rather than active. Hexbear has a bunch of communities, but people sort by New so any post will have some traction.
Lemmy works best when instances rely on themselves, and not federation. Federation is a bonus, not the point itself. Thinking of this massive fediverse as a single entity would mean it’s probably better to use Reddit, anyways.
Federation should be the point. I didn’t join Lemmy to join yet another reddit-like service but with far fewer users. I joined it because I want to be on something like reddit but which no one group controls. Otherwise I’d use threads, bluesky, etc.
Federation is one side of the equation, the fact that no one person controls it relies upon the fact that it isn’t centralized into few communities. It’s a double-edged sword, the same benefit is also potentially a drawback for others.
It does not have to be something mandatory…
I mean, there could be some form of “metacommunities”, something like being able to group multiple communities together in a “view” that shows them to you visually as if they were a single community despite being separated. Bonus points if everyone can make their own custom groupings.
In theory you could have multiple “metacommunities” for the same topic still… but at least they could be sharing the same posts if they share communities. I feel grouping like this would be helpful because small communities feel even smaller when they are split.
I think reddit has something similar to that, multireddits or something I think they are called.
Piefed has feeds that achieve exactly that: https://lemmy.dbzer0.com/post/38733273?scrollToComments=true
Nice! It also seems to be under discussion on lemmy’s github here: https://github.com/LemmyNet/lemmy/issues/818
Having distinct communities is a feature, not a bug. If two cities set up their own lemmy instances, say
lemmy.sao_luis.br
, andlemmy.lagos.ng
, they can each have anews
community, without them overlapping.Do a search for metroid, and subscribe to whichever ones you like.
It would still be a huge benefit, especially for more niche topics, if we had something like a federation-wide comm like
/f/niche_hobby
that you could subscribe to instead of 20 different/c/niche_hobby
communities.Maybe comms could opt in/out of behavior to avoid the issue you described.
This would also benefit smaller instances because few people will subscribe to their comms because they are too inactive, making it so their content never gets traction.
My biggest complaint with Lemmy is that it is too hard to group & categorize content. Sometimes I want politics, sometimes I want nerd shit, but my only three options are subscribed, local, and all, which doesn’t have any categorization unless you are on an active, niche server.
Multireddits are pretty much the only thing I miss from reddit.
Piefed has exactly that: https://lemmy.dbzer0.com/post/38733273?scrollToComments=true
Interesting, is this all manually curated like multireddits? Would also be nice to have automatic ones (with include/exclude overrides)
The problem with it just being Piefed is that Lemmy clients probably won’t bother to support it unless it becomes standard.
Is this a frontend specific thing or does it also require the Piefed backend on your instance too? If it is just frontend, I would definitely use it for desktop browsing.
Dope seeing implementation diversity resulting in experimentation and innovation. Would love to see this adopted in other Lemmy implementations too
Interesting, is this all manually curated like multireddits? Would also be nice to have automatic ones (with include/exclude overrides)
They have both
- user defined feeds, public or private
- admin defined “topics”
It’s a whole different software, backend and frontend
They have both
Awesome!
It’s a whole different software, backend and frontend
I know Piefed is both a frontend and backend, but does this behavior require the backend? Like can it be used with a regular Lemmy backend and/or database without backwards-incompatible changes?
The frontend requires the backend. Feeds and topics are managed by the backend anyway
Look, this is just my take – I think this is bad UX. I’m not saying federation isn’t a good idea – on the contrary, I like the idea that many different posts in the same community are all hosted on different instances. Sure, for a community like
news
it doesn’t make as much sense – fixes for this would be that some communities don’t have the behaviour I’m suggesting, or the convention is to call itsao_luis_news
or something.Who controls this universal community name system?
It’s a good question. Perhaps nobody needs to control it. Users of c/foo post on their own instance (or choose an instance to post on). Mods are responsible for posts on their own instances (as before). The difference is that when viewing c/foo, you see posts from all federated instances.
For news, politics, etc, which might cause trouble if combined, here’s a solution: Perhaps if your instance’s
c/foo
community has the “keep separated” flag enabled, then users on your instance browsing c/foo won’t see posts from other instances, and users on federated instances won’t see your instance’s c/foo posts when browsing c/foo.
this post provides a good overview of this issue and possible solution. https://popcar.bearblog.dev/lemmy-needs-to-fix-its-community-separation-problem/
Proposed solution 3: Communities following communities
Really, really like that idea!
Not on the current roadmap of Lemmy 1.0, which is planned for autumn 2025
Who is your daddy and what does he do?
Kindergarten cop right?
No seriously he’s retired and cooks his brain watching fox news all day. If he got off that drug for even a month he’d return to being a sweet and caring person.
Wait, I thought you’re French, dad sniffing the Fox from France?
What are your thoughts on blocking AI scraper access? Any attempts to improve that on the side of Lemmy? Basic things like allowing to customize the robots.txt easily would already help.
I also recently tried this new AI block tool called Anubis with Lemmy, but for some reason it fails with Lemmy-ui. Might be interesting to investigate further.
You can load a different robots.txt in your nginx config, something like this:
location /robotx.txt { index /path/to/my/robots.txt; }
Additionally 1.0 will change the “private instance” to work with federation enabled (see https://github.com/LemmyNet/lemmy/pull/5530). Then only logged-in users will see content, while AI scrapers wont see anything except the login page.
I’ve previously worked in anti-scraping. There is a negative 0% chance the Lemmy devs have the resources to effectively do this without tanking the server for everyone else.
I just set up Anubis today. Specifically I’m only testing it for Lemmy-ui, and it seems to work fine.
It looks like the distributed waves that keep bringing the service down hit exclusively our lemmy-ui subdomain, so maybe non-SSR photon is also a good defense, heh.
Hmm, that is odd. I guess I need to double check my Nginx config for lemmy-ui then. You have your setup documented somewhere?
Edit: ah, you run Photon as the main UI and lemmy-ui somewhere else? I think specifically the split between frontend and backend on the root domain somehow makes Anubis fail to set the correct cookie.
I don’t think it should be a problem, but I’m not that sure either. Lemmy.fedi.zutto.fi also runs it and that’s just a normal lemmy-ui installation. I think Zutto simply forwarded all traffic to Anubis and then fixed federation. There was some discussion and config shared in sopuli’s finnish matrix room.
Anyone that wants to scrape Lemmy would have an easier time setting up their own server, federating with everyone, and reading straight from their DB. No web scraping required. Though, web scraping defenses would be useful against general web scrapers/crawlers.
That would require the authors of these AI scrapers to actually give a f*ck. The problem is that they don’t, and just scrape what ever they can find repeatatly almost like a ddos attack on the open web.
Yup, same as they could clone git repos in one shot, but they instead crawl every single page.
I like Lemmy a lot, but when you share a URL it’s just an ID number. Compare that to Reddit, where you can get a lot more information on what you’re about to look at just from the URL alone.
https://lemmy.ml/post/27659153 vs
https://old.reddit.com/r/AsahiLinux/comments/1jg3vlk/progress_report_linux_614/Are there any plans to make Lemmy URLs more meaningful?
There’s some discussion of this here. It’s not something I care too much about, but anyone is free to add more detailed URLs to either lemmy-ui or other front-ends.
Its been years but no one has found it important enough to them to work on.
It will be a feature for Lemmy 1.0: https://feddit.org/post/5390705
Another issue is that post links are instance-specific, since the post ID isn’t the same across instances.
ex: https://lemmy.ml/post/27659153 is https://lemmy.ca/post/41237641 on Lemmy.ca
There are external tools like https://lemmyverse.link/ and some browser addons to alleviate those issues, but it’d be nice if this could be addressed at the source if doable.
And I dream of a
lemmy:\\
protocol handler one day.Protocol handlers are the way to go IMO. I’ve opened an issue based on @phiresky’s comment.
Potentially, using some sort of predictable hashing to get the same id across instances might also help in the detection of duplicate links so that they can be aggregated in a single place (sort of what was suggested at point 2 here).
I fear this could be too much of a breaking change though.
Seems like a good time to introduce a breaking change, jumping from 0.19 to 1.0.
We won’t add UUIDs or any “universal” sort of identifier, but universal links are still possible without them.
It will be a feature for Lemmy 1.0: https://feddit.org/post/5390705
Until then https://lemmyverse.link/feddit.org/post/5390705 ;)
I even discovered there was a new one today because the creator wasn’t aware of Lemmyverse link x)
Thanks a lot for the work you do! How do you get by with such a limited amount of funds? How sustainable is your financial situation if donations don’t pick up considerably?
I am new to Lemmy, so haven’t really looked into if the following is possible but can I create groups of communities with a similar topic across multiple instances?
Do you plan on moving away from GitHub to something else like Forgejo?
Not really a question, but something to think about is being more strict about backwards compatibility so that people don’t get burnt out on having stuff break. Coming from this post by the Tesseract dev, who did not like the breaking changes to the v3 API in 1.0: https://dubvee.org/post/2904152
To formulate that into an actual question, do you think the changes are still worth it and you’d make the same decision to break backwards compatibility?
Having a tantrum because breaking changes were announced is asinine. The Tesseract developer comes across like a proper twat.
Divas have problems no matter what you do.
I would reply directly to that post, but it looks like the admin (who is also the Tesseract dev) has completely blocked federation with lemmy.ml by IP block or useragent block. So Im going to respond here to his complaints:
Lemmy didnt have a single breaking change since version 0.19 which was released 1 year and 4 months ago. And the breaking changes in that version were quite minor. Before that was 0.18, 1 year and 6 months earlier. That version only removed websockets, so most third-party app devs who used the HTTP API didnt notice any difference. Meaning the API has been almost unchanged for over three years which is quite long for a project that hasnt reached a stable version yet. 1.0 includes all the breaking changes that were held back over the years, so that we dont need any more breaking changes for a long time.
That said it would be great if we could keep backwards compatibility with the existing API in Lemmy 1.0. Problem is with all the major changes we are doing now, it would take a huge amount of work to implement this kind of backwards compatibility. If we had twice as many fulltime developers working on Lemmy this would be doable, but our resources are very limited so we have to make some compromises.
Obligatory XKCD: https://xkcd.com/1172
This is all a matter of dev resources. If we had maybe 6 full-time devs, we could handle things like backwards compatibility.
People forget that lemmy, like other open source hobby projects, don’t have the resources that large corporations do. People understandably get frustrated when there’s breaking changes, but they also need to not put enterprise-level expectations on a small number of people.
If someone wanted to work on that, of course we wouldn’t be opposed, but you should know how monumental a task that would be.
More advertising! Boycott Reddit.
What have been the biggest challenges with the project over the years, both in terms of technical and non technical aspects. I’d be interesting to hear a bit of retrospective on how has the stack’s been working out, and what surprises you might’ve run into in terms of scaling and federation. What recommendations you’d make based on that and what you would’ve done differently knowing what you know now.
2nding @nutomic, that I’m really happy with the stack.
The one that seems really magical to me, is diesel. With it we get a compile-time-checked database, that’s tightly integrated to the rust objects / code.
Every single join, select, insert, etc is checked before lemmy is even run, and it eliminates a whole category of errors resulting from mismaps.
Its made adding columns, and changing our data structures so much less error-prone than when I lived in the java-world.
Whenever we find that we’d want to do things differently, we usually do a refactor ASAP so as not to keep rolling spaghetti code. We’ve had to do this many times for the federation and DB code, and even have 2 major refactors that also add features ongoing. But luckily we’ve been able to stay in the rust eco-system for that.
As for UI, leptos didn’t exist when I built lemmy-ui, so I went with a fast react-like alternative, inferno. Its showing its age now, so @sleepless1917 is working on lemmy-ui-leptos, which hopefully will supercede lemmy-ui.
I briefly worked with Hasura which does this sort of magic to produce GraphQL API on top of Postgres. Incidentally, also written in Rust. I do like Leptos approach, it sounds similar to HTMX approach where you just treat the DOM as a dumb terminal.
The stack is overall amazing, but not perfect. Waiting for the Rust code to compile is sometimes very annoying, but I wouldn’t want to use a different language. And we had to implement somewhat complicated things that existing Rust libraries did not do. For example, I made the “i_love_jesus” library so Lemmy could have cursor pagination that uses indexes well and allows bringing back the “back” button, we have a few custom QueryFragment impls because of diesel’s limitations, and we have a custom migration runner to do fancy stuff (see crates/db_schema/src/schema_setup.rs).
Being a Lisper, the idea of waiting for the compiler is very jarring. :)
Oh, to be able to develop Lemmy with something like SLIME or Geiser, now that would be a dream. Too bad the CL’s library ecosystem is so much worse than Rust’s.
Clojure has a lot better story in that regard living on the JVM, but the overhead of using the JVM is a downside of its own. It’s a good platform, but definitely not what you’d call lightweight.
Yeah, if I was building something production ready in Lisp, Clojure would be my choice even though I prefer CL. Ecosystem is ultimately king.
For sure, having mature and battle tested libraries is really hard to beat.
I made the “i_love_jesus” library so Lemmy
Could I ask if there’s any meaning behind that name?
Nothing related to the library. I love Jesus. I’m Catholic and a little silly. Also my GitHub profile picture is Jesus.
I don’t know what I expected lol. Cheers.
Edit: I don’t mean this disrespectfully, it was just a very direct and obvious answer.
The stack is great, I wouldnt want to change anything. Postgres is very mature and performant, with a high focus on correctness. It can sometimes be difficult to optimize queries, but there are wizards like @dullbananas@lemmy.ca who know how to do that. Anyway there is no better alternative that I know of. Rust is also great, just like Postgres it is very performant and has a focus on correctness. Unlike most programming languages it is almost impossible to get any runtime crashes, which is very valuable for a webservice.
The high performance means that less hardware is required to host a given number of users, compared to something like NodeJS or PHP. For example when kbin.social was popular, I remember it had to run on multiple beefy servers. Meanwhile lemmy.ml is still running on a single dedicated server, with much more active users. Or Mastodon having to handle incoming federation activities in background tasks which makes the code more complicated, while Lemmy can process them directly in the HTTP handler.
Nevertheless, scaling for more users always has its surprises. I remember very early in development, Lemmy wasnt able to handle more than a dozen requests per second. Turns out we only used a single database connection instead of a connection pool, so each db query was running after that last one was finished, which of course is very slow. It seems obvious in retrospect, but you never notice this problem until there are a dozen or so users active at the same time.
With the Reddit migration two years ago a lot of performance problems came up, as active users on Lemmy suddenly grew around 70 times. You can see some of that in the 0.18.x release announcements. One part of the solution was to add missing database indexes. Another was to remove websocket support, which was keeping a connection open for each user. That works fine with 100 users, but completely breaks down with 1000 or more.
After all there is nothing I would do different really. It would have been good to know about these scaling problems earlier, but thats impossible. In fact for my project Ibis (federated wiki) Im using the exact same architecture as Lemmy.
It’s great to hear things mostly worked out. Stuff like scaling bottlenecks is definitely tricky to catch until you have serious loads on the system, but sounds like the fixes very mostly trivial validating overall design. It also looks like you managed to get a way with a fairly simple stack by leveraging Postgres and Rust. I’ve had really good experience with using pg myself, and really don’t see a point in using anything else now. You can use it both as a relation db and a document store, so it’s extremely flexible on top of being highly performant. Keeping the stack simple tends to be underappreciated, and projects often just keep adding moving pieces which end up adding a lot of overhead and complexity in the end.