Lemmy

A federated, open-source link aggregator and discussion platform, similar to Reddit. Built on ActivityPub. Wide range of cross-platform client apps.

Open Source

Lemmy Source Code

Author

LemmyNet

Description

๐Ÿ€ A decentralised discussion platform for communities.

#activitypub#chat#fediverse#lemmy#link-aggregator#reddit#rust

Homepage

https://join-lemmy.org

Repository

  • LicenseAGPL-3.0
  • Created14 Feb 19
  • Primary languageRust
  • Size40,385 KB
  • Stars14,645
  • Forks969
  • Watchers14,645

Language Usage

Language Usage

Project Health

  • Last commit1 day ago
  • Open issues118
  • Latest releasev0.17.3-rc.2

Recent Commits

  • Dessalines(23 Oct 26)

    Upgrading diesel-async, totp, and a few more dependencies. (#6717) * Upgrade deps to mitigate CA failure, remove webmention * fmt * Upgrading a few more deps. A few needed manual intervention: diesel-async, totp, and sha2. * Fixing chrono to jiff conversion * Fixing pleroma test --------- Co-authored-by: Felix Ableitner <[email protected]>

  • Dessalines(23 Oct 26)

    Fixing comment list cursor pagination tie-breaker. (#6716) - I went through all of the `::paginate` functions, to make sure they all have a tie breaker. - Also added one for registration_applications. - Fixes #6686

  • Joel Town Road(22 Oct 26)

    Hide unpublished scheduled posts from profile content, post fetch and user RSS (#6696) * Hide unpublished scheduled posts from non-creators in GetPost and person content PostView::read (GetPost API) and PersonContentCombinedQuery::list (person profile API, user RSS feed) did not filter out posts whose scheduled_publish_time_at is in the future. Any authenticated or unauthenticated user could read them via those three routes. Apply the same rule that PostQuery::list already enforces: a post with a non-null scheduled_publish_time_at is only visible to its creator. Add regression tests for PostView::read (routes 1/2) and PersonContentCombinedQuery::list (routes 1/3). * Remove formatting churn, fix clippy::expect_used in test Restore db_perf/mod.rs, db_perf/series.rs and post/src/lib.rs to upstream state (stable cargo fmt had reformatted them; only the three files that contain the fix or its tests should change). Reformat the three changed files with cargo +nightly fmt per the repo's .rustfmt.toml so they pass the upstream lint check. Add clippy::expect_used to the test-module expect attribute in person_content_combined/src/impls.rs to satisfy the workspace deny rule triggered by .checked_add_days().expect() in the new test. * Hide unpublished scheduled posts/comments from AP routes and comment views - Return 404 from ActivityPub GET /post/{id} and /post/{id}/context when the post has a scheduled_publish_time_at (still unpublished). AP routes are unauthenticated, so no creator-exception applies there. - Same 404 for AP GET /comment/{id} and /comment/{id}/context when the comment's post is still scheduled. - Filter comments on scheduled posts from CommentView::read and CommentQuery::list: only the post creator can see them (mirrors the rule already in PostQuery::list and PostView::read). - Add unit tests: AP post/comment routes reject scheduled content; CommentView::read and CommentQuery::list hide such comments from non-creators (logged-out, other users) and expose them to the creator. * Add tests for AP context routes and search on scheduled posts * Move test modules to bottom of http/post.rs and http/comment.rs * Refactor scheduled post tests per review feedback - Merge three verbose comment.rs tests into one test that creates a scheduled post, tests it, then updates it to published and tests again - Split db_views impls.rs tests into one test per feature (read, list, search) * Undo formatting churn from cargo fmt Restores all files except comment.rs and impls.rs to their pre-fmt state. Only the two target files should have changes for the test refactoring. * Merge related scheduled-post tests into single functions Combine the ActivityPub post tests and comment-view scheduled-post tests so each scenario uses one setup/teardown, matching review feedback. Keep the same assertions, including publish-after-schedule checks for AP routes. * remove assert messages --------- Co-authored-by: Nutomic <[email protected]>

  • Dessalines(22 Oct 26)

    Allow a user to block an admin. (#6711) - Fixes #6706

  • Dessalines(21 Oct 26)

    Use root certs for tls DB connections, rather than allowing any self-signed. (#6687) * Use root certs for tls DB connections, rather than allowing any self-signed. * Remove unecessary aws_lc_rs

  • Nutomic(20 Oct 26)

    Forbid unsafe code (#6707)

  • Nutomic(20 Oct 26)

    Add community vote settings (fixes #5360) (#6603) * Move vote settings from LocalSite to community (fixes #5360) * federate * api * Restore LocalSite vote columns * deduplicate logic for vote checks * rename enum * merge enums * init community vote setting from site * rename to post_downvote_mode * review changes * rename columns * Fix down migration

  • Nutomic(14 Oct 26)

    Update Extism and Rust versions (#6704) * Update Extism and Rust versions * automatic clippy fixes * Rust 1.98

  • Nutomic(14 Oct 26)

    Prevent caching of private RSS feeds (#6703)

  • Dessalines(13 Oct 26)

    Fixing liked and saved combined post filter (#6698) - Copied from the content_combined filter, where it was already fixed. - Fixes #6695

  • Dessalines(13 Oct 26)

    Fixing delete community banner. (#6700) - Fixes #6699

  • Dessalines(09 Oct 26)

    Fix mod / admin add re-ordering (#6692)

  • malsadev(08 Oct 26)

    Track additional statistics (#6390) * Rename users, posts, etc to local_users, local_posts, etc in local_site This is in preparation for adding a new set of columns total_users, total_posts, etc which are meant to track all objects visible to the instance * Add a scheduled task to calculate various totals (total users, total posts, etc) these values will give a sense of how exposed any given instance is to the wider lemmyverse (not how many users there are in the lemmyverse) such that total_users - local_users will show how many out-of instance users are interacting with the instance. * Add a scheduled task to keep track language usage across posts and comment in home instance * Add a scheduled task to keep track of the number of linked instances * Add a scheduled task to keep track of running user retention Using a retention formula that tracks a metric called bracketed/range retention which gives a sense of how well a website retains active users (not for example, retention of new signups). It answers the following question: Of all users who were active before (new and existing), how many of them remained active after? * Add a scheduled task that keeps track of local ban rate The formula is total ban percentage (100*banned local user count / total local user count). Excluding bots, deleted users, etc * Add scheduled tasks tests * Clippy fixes * Add migration * Revert "Clippy fixes" This reverts commit dc575c7d712a98670f2143d1c598a70021ab571e. * Merge test_update_linked_instance_count into test_update_total_counts * Exclude bot and locally banned users from total_user_count * Changed percent-type fields to smallint and added _percent suffix * Removed generic comments from sql migrations --------- Co-authored-by: Dessalines <[email protected]>

  • Nutomic(08 Oct 26)

    Security hardening for image downloading (#6691)

  • uOJackDu(08 Oct 26)

    Add hashing for activity ids (#6366) * add md5 hashing for generate_announce_activity_id * modify parameter order * add md5 hashing to generate_activity_id * modify object_id type * remove as_bytes calls on input string when hashing * modify object_id type from str to url * ensure unique activity ids for posts for Create and Update * switch to sha2 for hashing * change hashing input format to adhere to the issue * add comment * edit comments * ensure unique activity ids for comments for Create and Update * modify naming * add convenient function * modify hashing to use digest to string directly * use timestamps for create activities * add hashing to create or update private message * modify comment hashing to using timestamp * move timstamp logic to impl * chore: ignore .DS_Store files (macOS) * Format activity_object_id call sites with nightly rustfmt * Pass timestamp into generate_activity_id_with_object_id Drop the extra activity_object_id helper so Create/Update hashing takes the object URL and published/updated time in one call. --------- Co-authored-by: Dessalines <[email protected]> Co-authored-by: Nutomic <[email protected]>

  • flamingos-cant(07 Oct 26)

    Allow removing post URL via federation (#6626) * Allow removing URLs via federation * fmt * Type * Fmt with up-to-date rustfmt * Rename functions and create various `to_update_form` for various insert forms Community was excluded from this because trying to do the same there caused a bunch of 'Too many open files' errors. * Delete commented code * Use UpdateForms instead of conversion functions * Clippy * Revert "Use UpdateForms instead of conversion functions" This reverts commit 1b60afa8f9272bf57214469401b2ac7d24e26f86. * Remove to_update_form functions * Make url a double option on post insert * fmt + make tests run * Revert "Make url a double option on post insert" This reverts commit af3aa2055ba1eaa89b9fbdbddb7919e8bd0692f7. * Add upsert forms for comm/users * Change site insert to upsert

  • Dessalines(07 Oct 26)

    Fixing mastodon nodeinfo CI tests. (#6689)

  • Nutomic(07 Oct 26)

    For OAuth account linking check email verified by provider (#6682)

  • Nutomic(06 Oct 26)

    Add plugin hooks for registration (fixes #5736) (#6681)

  • Nutomic(06 Oct 26)

    Validate 2FA on OAuth login (#6683) * Validate 2FA on OAuth login * fix test * cargo shear * fix

  • Michael Flynn(01 Oct 26)

    Mark instance as alive if activity is received from it (#6679) * mark instance as alive if activity is received from it * revert activity_lists.rs * preliminary commit of revision * second revision pass * update mark_alive comment * remove whitespace * Apply suggestion from @Nutomic replace error handling for `mark_alive` in hook Co-authored-by: Nutomic <[email protected]> * remove unused imports, consolidate dead instance logic into function * fix cargo.toml * taplo format --------- Co-authored-by: Nutomic <[email protected]>

  • dullbananas(25 Sept 26)

    Remove redundant person_id indexes from smoosh-tables-together migration (#6661) * update up.sql * Update down.sql * Create up.sql * Create down.sql * remove the todo comment * sql formatting

  • Nutomic(24 Sept 26)

    Improve error message for OauthLoginFailed (ref #6609) (#6675) * Improve error message for OauthLoginFailed (ref #6609) * separate errors

  • Dessalines(16 Sept 26)

    Validate the followers_url in the apub verify. (#6673) * Validate the followers_url in the apub verify. * Fixing * Adding verify_domains_match_opt function * Add other urls * Adding checks for instance, multi_community, and person * Fixing pleroma test

  • Dessalines(16 Sept 26)

    Add a few clippy lint expects for plugins.rs (#6677)

  • tracyspacy(11 Sept 26)

    Move newtypes.rs from lemmy_db_schema to lemmy_db_schema_file (#6652) * move newtypes.rs from lemmy_db_schema to lemmy_db_schema_file * chore: remove unused diesel-derive-newtype from cargo.toml * fix import with full feature --------- Co-authored-by: Dessalines <[email protected]> Co-authored-by: Dessalines <[email protected]>

  • Felix Ableitner(11 Sept 26)

    Version 1.0.0-beta.2

  • Dessalines(11 Sept 26)

    Markdown rendering / escaping post name and parent comment content for email. (#6672)

  • Dessalines(10 Sept 26)

    Validate IPs of markdown image links before inserting (#6662) Co-authored-by: Nutomic <[email protected]>

  • Nutomic(10 Sept 26)

    Fix inverted invitation expiration check (fixes #6659) (#6666)

Lemmy Security

5.3/10

Repo Security Summary

Updated 24 Aug 26

  • PackagingN/A
  • Maintained10/10
  • Code-Review9/10
  • Dangerous-WorkflowN/A
  • Token-PermissionsN/A
  • Security-Policy10/10
  • CII-Best-Practices0/10
  • Binary-Artifacts10/10
  • License10/10
  • Fuzzing0/10
  • Signed-Releases0/10
  • Branch-ProtectionN/A
  • Pinned-Dependencies0/10
  • SAST0/10

Security Advisories (23)

  • mediumPatched

    CVE-2026-54738Rate limit bypass via X-Forwarded-For header spoofing in actix-web ConnectionInfo

  • lowPatched

    CVE-2026-54743Stored XSS via markdown image alt-text in lemmy-ui html5-embed

  • mediumPatched

    CVE-2026-54739Login Endpoint User Enumeration via HTTP Response Code Differential

  • lowPatched

    GHSA-5qxq-g3f3-57p5Multi-community `Update` has no actor authorization

  • lowPatched

    GHSA-9wj2-3cv5-cqrxPrivate community profile and moderators leak via federation HTTP

  • lowUnpatched

    CVE-2026-54742`CollectionAdd::Featured` does not check the post is in the community

  • lowPatched

    GHSA-95q8-x6r6-672mPrivate community data exposed through community, saved, liked, and modlog API views

  • lowPatched

    CVE-2026-54741Blocked users can edit private messages sent before the block

  • lowPatched

    GHSA-jmxc-hhwx-gvv3Private Lemmy instances expose multi-community metadata without authentication

  • mediumPatchedCVSS 6.5

    CVE-2026-54740Lower-ranked federated moderator can remove higher-ranked moderators

  • lowPatched

    GHSA-vh35-q865-92vrFederated Block activity can ban local users without site admin authorization

  • lowPatched

    GHSA-qxrw-f6fh-34r7Resend verification endpoint exposes registered email addresses

  • mediumUnpatchedCVSS 6.3

    CVE-2026-42180SSRF in /api/v3/post via Webmention dispatch

  • mediumUnpatchedCVSS 6.5

    CVE-2026-42181SSRF and internal image disclosure in post link metadata via unvalidated og:image

  • lowUnpatched

    GHSA-c482-7gjx-pp36Blind SSRF in /api/v3/resolve_object, normal user can reach internal services and make outbound requests

  • mediumPatchedCVSS 6.5

    CVE-2026-33693SSRF via 0.0.0.0 bypass in activitypub-federation-rust v4_is_invalid()

  • mediumPatched

    CVE-2026-29178Unauthenticated SSRF via file_type query parameter injection in image endpoint

  • lowPatched

    GHSA-x57w-mr53-3f5hDB performance issues

  • mediumPatched

    GHSA-373q-r73m-8mrgLocal users can delete arbitrary entries from the local_image table

  • mediumPatched

    GHSA-7xwp-jqhc-v6vwLocal users can delete arbitrary pict-rs media

  • mediumPatched

    GHSA-wr2m-38xh-rpc9Purging users or communities or banning users can delete images they didn't upload/exclusively use

  • mediumUnpatchedCVSS 4

    CVE-2025-25194Server-Side Request Forgery (SSRF) in activitypub_federation

  • highPatchedCVSS 7.5

    CVE-2024-23649Any authenticated user may obtain private message details from other users on the same instance

Lemmy Website

Website

Lemmy - A decentralised discussion platform for communities

Lemmy

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address65.21.61.25
  • Hostnamestatic.25.61.21.65.clients.your-server.de
  • LocationHelsinki,Uusimaa,Finland,EU
  • ISPHetzner Online GmbH
  • ASNAS24940

Associated Countries

  • USUS
  • FIFI

Safety Score

Website marked as safe

100%

Trackers

No known trackers found

Blacklist Check

join-lemmy.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

Lemmy Android App

APK Info

De-Googled Compatibility

Native4.00/ 44 ratings
microG4.00/ 43 ratings
  • GrapheneOSNative4.0 / 4(2)
  • LineageOSmicroG4.0 / 4(2)

Tested on Android 11โ€“16 ยท Updated 09 Oct 25 ยท View on Plexus โ†’

Trackers

No trackers found

    Permissions

    • Internet
    • Read External Storage

    Lemmy Reviews

    More Social Networks

    About the Data: Lemmy

    Change History

    Edit Lemmy Data

    You can edit Lemmy's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
    Note that some of the information shown above has been aggregated from external sources, a list of these can be found data documentation.

    Origin Data

    Modify Data

    API

    You can access Lemmy's data programmatically via our API. Simply make a GET request to:

    https://api.awesome-privacy.xyz/v1/services/lemmy

    The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

    Share Lemmy

    Help your friends compare Social Networks, and pick privacy-respecting software and services.
    Share Lemmy and Awesome Privacy with your network!