Today I learned about Sublinks (here), an open-source project that aims to be a drop-in replacement for the backend of Lemmy, a federated link aggregator and microblogging platform. Sublinks is designed to be initially API-compatible with Lemmy, allowing existing Lemmy clients, such as Lemmy-UI, to integrate seamlessly.

The project is written in Java, which may introduce some overhead but is chosen for its maintainability and familiarity among a wider pool of developers. The Sublinks team prioritizes a more inclusive and less toxic development environment, and the project has already attracted more developers than Lemmy.

While Sublinks is starting with 1:1 compatibility, future plans include implementing additional features that the Lemmy developers have not pursued. This could lead to a divergence in functionality between the two platforms as Sublinks evolves beyond its initial compatibility phase.


README

GitHub stars GitHub tag (latest SemVer) gradle workflow GitHub issues License

Sublinks

A decentralized, censorship-resistant, and privacy-preserving social network.

About

Sublinks, crafted using Java Spring Boot, stands as a state-of-the-art link aggregation and microblogging platform, reminiscent yet advanced compared to Lemmy & Kbin. It features a Lemmy compatible API, allowing for seamless integration and migration for existing Lemmy users. Unique to Sublinks are its enhanced moderation tools, tailored to provide a safe and manageable online community space. Embracing the fediverse, it supports the ActivityPub protocol, enabling interoperability with a wide range of social platforms. Sublinks is not just a platform; it’s a community-centric ecosystem, prioritizing user experience, content authenticity, and networked social interaction.

Features

  • Open source, MIT License.
  • Self hostable, easy to deploy.
  • Clean, mobile-friendly interface.
    • Only a minimum of a username and password is required to sign up!
    • User avatar support.
    • Live-updating Comment threads.
    • Full vote scores (+/-) like old Reddit.
    • Themes, including light, dark, and solarized.
    • Emojis with autocomplete support. Start typing :
    • User tagging using @, Community tagging using !.
    • Integrated image uploading in both posts and comments.
    • A post can consist of a title and any combination of self text, a URL, or nothing else.
    • Notifications, on comment replies and when you’re tagged.
      • Notifications can be sent via email.
      • Private messaging support.
    • i18n / internationalization support.
    • RSS / Atom feeds for All, Subscribed, Inbox, User, and Community.
  • Cross-posting support.
    • A similar post search when creating new posts. Great for question / answer communities.
  • Moderation abilities.
    • Public Moderation Logs.
    • Can sticky posts to the top of communities.
    • Both site admins, and community moderators, who can appoint other moderators.
    • Can lock, remove, and restore posts and comments.
    • Can ban and unban users from communities and the site.
    • Can transfer site and communities to others.
  • Can fully erase your data, replacing all posts and comments.
  • NSFW post / community support.
  • High performance.

Contact

Contributing

Support / Donate

Sublinks is free, open-source software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project.

  • magic_lobster_party
    link
    fedilink
    23 months ago

    As you said, the difference is in the ecosystem of libraries. This is where Java has the edge. It has a more mature ecosystem when it comes to web server backends. This includes the number of frameworks, programmers and information sources.

    Unless Rust clearly solves common problems people currently have with Java backends, Java will remain the dominant alternative. I believe this is unlikely, because Rust is mainly designed to overcome common memory problems people have with low level C systems without the overhead of garbage collectors.

    • @asdfasdfasdf
      link
      English
      1
      edit-2
      3 months ago

      Rust is mainly designed to overcome common memory problems people have with low level C systems without the overhead of garbage collectors

      So you didn’t read my comment then.

      A concrete example of what my comment means is opening files. When you open a file handle, you can read from it, write to it, but then you should close it. After you close it you shouldn’t be ready to or write from it again. If you do, bad things can happen.

      Rust is the only language where you cannot. It’s a compile time error. This has nothing to do with low level systems programming. Using file handles is very high level.

      Same goes for thread safety. Web servers often can benefit from multithreading. Java does not enforce thread safety at compile time. If you send some data across threads and you don’t already understand what is thread safe and what isn’t, you’ll end up with data races, which is a form of memory safety violation. This is not possible in Rust, but it is in Java.

      Rust also isn’t subject to “the billion dollar mistake” since it doesn’t have the concept of null references. It also doesn’t support exceptions, which are the exact same issue as null references. These are also general programming problems and not specific to low level systems.

      Regarding frameworks, I’ve used Spring before and, although Rust doesn’t do some things Java frameworks do, IMO that’s a very good thing, and the web frameworks I’ve used in Rust have been a far better experience than what I saw from Spring.

    • @[email protected]
      link
      fedilink
      English
      13 months ago

      Rust does a lot more than that. It has a far more powerful, flexible, and higher-level type system than Java all while being much more performant.

      Every single time I’ve heard people cite Java’s ecosystem, I’ve yet to see them using anything that Rust doesn’t have a better alternative to. Java’s ecosystem is massive, but most of the time, you don’t actually need it. Unless you are doing a lot of third party integrations that have Java sdks or something, there’s not a lot it buys you. If you’re just making typical web applications with a database, Rust has you completely covered and will do a better job of it to boot.