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.

  • Dark ArcA
    link
    English
    03 months ago

    You don’t need any of that for a web server… There should be minimal state to synchronize between threads (the assignment of a request to a thread) all handled by your web framework. Asynchronous IO can be much more significant which you can do in both Rust and Java equally safely. I haven’t kept up but Java was working on a threading model that allows old school threads to act like fibers or real threads effectively allowing dumb parallelism to scale like crazy for blocking IO with minimal code changes as well.

    Java should be just as good if not better (by the nature of being a VM that doesn’t have unsafe blocks) when it comes to the memory safety side of things. Java also optimizes quite well for long running applications like web servers.

    It’s really not a bad language and it continues to get better.

    • @SorteKanin@feddit.dk
      link
      fedilink
      English
      23 months ago

      You don’t need any of that for a web server

      I disagree - any software is better with more reliability. Static analysis becomes more and more important as the code base grows.

      Java should be just as good if not better (by the nature of being a VM that doesn’t have unsafe blocks) when it comes to the memory safety side of things. Java also optimizes quite well for long running applications like web servers.

      (Safe) Rust and Java are both memory safe. I don’t think any is better than the other in this aspect. Many projects use #[forbid(unsafe)] to make sure they only use safe Rust. Unsafe Rust is not necessary in 99.9% of cases, certainly never for a web server like Lemmy.

      It’s really not a bad language and it continues to get better.

      It’s subjective obviously. I don’t like it personally, some people do. To be fair I think there are worse languages out there - Python for instance. At least Java has static typing, which is nice. We’ll just have to wait and see what happens with the different fediverse forum implementations.

      • Dark ArcA
        link
        English
        1
        edit-2
        3 months ago

        any software is better with more reliability. Static analysis becomes more and more important as the code base grows.

        You’re saying static analysis and reliability like they’re things Rust objectively has that Java doesn’t.

        The only things Rust has at a fundamental level are a borrow checker and value types.

        Value types can be nice for performance in certain situations (which aren’t nearly as important for a web server as fibers/coroutines). The borrow checker is nice for threading (which isn’t an issue in a restful web server design as previously stated). That’s about it.

        (Safe) Rust and Java are both memory safe. I don’t think any is better than the other in this aspect.

        It’s not possible to write (memory) unsafe Java code. All Java code is memory safe. Most rust code is memory safe.

        Of course that’s not entirely true because of the possibility for bugs in the Rust compiler or the JVM.

        Java and Rust both can call out to C libraries as well which of course… You get what you get.

        Python for instance. At least Java has static typing

        Python can have static typing these days as well. It’s just optional and controlled by the project.