Rust-Lemmy 0.15.1: lemmy — A link aggregator / reddit clone for the fediverse

GitHub tag (latest SemVer) Build Status GitHub issues Docker Pulls Translation status License GitHub stars

Lemmy

A link aggregator / reddit clone for the fediverse.

View Site · Documentation · Report Bug · Request Feature · Releases

About The Project

Front Page Post
main screen chat screen

Lemmy is similar to sites like Reddit, Lobste.rs, Raddle, or Hacker News: you subscribe to forums you're interested in, post links and discussions, then vote, and comment on them. Behind the scenes, it is very different; anyone can easily run a server, and all these servers are federated (think email), and connected to the same universe, called the Fediverse.

For a link aggregator, this means a user registered on one server can subscribe to forums on any other server, and can have discussions with users registered elsewhere.

The overall goal is to create an easily self-hostable, decentralized alternative to reddit and other link aggregators, outside of their corporate control and meddling.

Each lemmy server can set its own moderation policy; appointing site-wide admins, and community moderators to keep out the trolls, and foster a healthy, non-toxic environment where all can feel comfortable contributing.

Note: Federation is still in active development and the WebSocket, as well as, HTTP API are currently unstable

Why's it called Lemmy?

Built With

Features

  • Open source, AGPL 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.
  • OEmbed support via Iframely.
  • High performance.
    • Server is written in rust.
    • Front end is ~80kB gzipped.
    • Supports arm64 / Raspberry Pi.

Installation

Support / Donate

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

Crypto

  • bitcoin: 1Hefs7miXS5ff5Ck5xvmjKjXf5242KzRtK
  • ethereum: 0x400c96c96acbC6E7B3B43B1dc1BB446540a88A01
  • monero: 41taVyY6e1xApqKyMVDRVxJ76sPkfZhALLTjRvVKpaAh2pBd4wv9RgYj1tSPrx8wc6iE1uWUfjtQdTmTy2FGMeChGVKPQuV

Contributing

Translations

If you want to help with translating, take a look at Weblate.

Contact

Code Mirrors

Credits

Logo made by Andy Cuccaro (@andycuccaro) under the CC-BY-SA 4.0 license.

Comments

  • Have the subscript and superscript not be limited to words
    Have the subscript and superscript not be limited to words

    Jan 16, 2022

    Sometimes when writing, we usually tend to find ways of organizing and presenting our ideas when communicating to others. The use of subscript and superscript are very useful when structuring footnotes in comments, if necessary or relevant. A footnote is sometimes necessary when talking about complex subjects (and makes reading much easier than with a three line parenthesis).

    Also a related request is to have the options for "big" and "small" in text to give poster options to enhance their posts with effects and further expression

    enhancement 
    Reply
  • Problems getting Lemmy running
    Problems getting Lemmy running

    Jan 17, 2022

    What's the question you have about lemmy?

    I installed it using Ansible. which gave a Play Recap as follows:

    PLAY RECAP ********************************************************************* [email protected] : ok=12 changed=9 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

    This is the task that it skipped:

    TASK [check lemmy_base_dir] **************************************************** skipping: [[email protected]]

    When I try and access Lemmy through the browser for first time, depending on the browser I either get:

    Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

    For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com.

    Thank you for using nginx.

    or

    This page isn’t workingexploding-heads.com redirected you too many times. Try clearing your cookies. ERR_TOO_MANY_REDIRECTS

    I have tried clearing my cookies.

    Do you have any idea what I am doing wrong or what I should do next?

    Thanks in advance

    Kap

    question 
    Reply
  • Dont make webfinger request when viewing community/user profile
    Dont make webfinger request when viewing community/user profile

    Jan 19, 2022

    Tested and works fine. This makes it so that viewing remote profiles like https://lemmy.ml/c/[email protected] doesnt make any request to the remote instance, and keeps working if the remote instance goes down. There are two side effects of this:

    • ResolveObject API endpoint doesnt support !name for local actors anymore (doesnt seem useful to implement)
    • Opening a profile url doesnt trigger a refetch, so the data might be outdated. Fetching still works via search (which uses ResolveObject API call).
    Reply
  • Adding starttls support. Fixes #1997
    Adding starttls support. Fixes #1997

    Jan 20, 2022

    null

                                                                                                                                                                                                           
    Reply
  • Removing the site creator, adding leave_admin. Fixes #1808
    Removing the site creator, adding leave_admin. Fixes #1808

    Jan 20, 2022

    Still needs some testing.

    Reply
  • WIP: Email localization (fixes #500)
    WIP: Email localization (fixes #500)

    Jan 20, 2022

    Needs some clarifications from upstream: https://github.com/baptiste0928/rosetta/issues/5

    Reply
  • Hide community v2
    Hide community v2

    Jan 22, 2022

    Wanted a cleaner PR because I messed up prev branch with a rebase.

    Fixing problems found with,

    https://github.com/LemmyNet/lemmy/pull/2017

    And then https://github.com/LemmyNet/lemmy/pull/2032

    For issue https://github.com/LemmyNet/lemmy/issues/1980

    This PR does the following,

    1. Adds the ability to hide or unhide a community with a new put endpoint example curl usage,
    curl -X PUT http://localhost:1236/api/v3/community/hide \   
    -H "Content-Type: application/json" \
    -d \
    '{"community_id":3,"hidden":true,"reason":"controversal","auth":"Foo"}'
    
    1. Hidden communities do not show up in all, local, or trending unless subscribed
    2. updates mod log to represent that.

    Still reviewing it so I will ask for a code Review in the chat. Might make some cleanups but ran it through a few simple test cases

    Reply
  • Can I get involved as a UX Designer and design technologist?
    Can I get involved as a UX Designer and design technologist?

    Jan 22, 2022

    Hi. I'd like to contribute to Lemmy if possible. I'm a professional UX designer and a design technologist. (design technologist means I'm a designer who focuses on design system work and the intersection between code and frontend skillsets)

    Involving designers in open source work can be a little bit hard to figure out sometimes but I'd like to offer my services.

    Stuff like this:

    image

    demonstrates some room for improvement on the design front.

    question 
    Reply
  • Federation with Friendica
    Federation with Friendica

    Jan 23, 2022

    Found a bug? Please fill out the sections below. 👍

    For front end issues, use lemmy-ui

    Issue Summary

    Federation with Friendica works only from Lemmy -> Friendica.

    Steps to Reproduce

    1. Join a Lemmy community from friendica.
    2. Create a posting in Lemmy
    3. see it in Friendica.
    4. answer in Friendica
    5. look into Lemmys logfile while posting
    lemmy_1     | 2022-01-23T20:21:26.183621Z  INFO HTTP request{http.method=POST http.scheme="http" http.host=lemmy.schuerz.at http.target=/inbox otel.kind="server" request_id=0d4a8d70-5c5a-46d3-8866-4ea6ee988123}:
    shared_inbox: lemmy_apub::http: Received shared inbox activity {"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"vcard":"http://www.w3.org/2006/vcard/ns#","dfrn":"http://purl.
    org/macgirvin/dfrn/1.0/","diaspora":"https://diasporafoundation.org/ns/","litepub":"http://litepub.social/ns#","toot":"http://joinmastodon.org/ns#","schema":"http://schema.org#","manuallyApprovesFollowers":"as:m
    anuallyApprovesFollowers","sensitive":"as:sensitive","Hashtag":"as:Hashtag","directMessage":"litepub:directMessage","discoverable":"toot:discoverable","PropertyValue":"schema:PropertyValue","value":"schema:value
    "}],"id":"https://soc.schuerz.at/objects/4edd2508-4361-edb8-c4d8-b45181083984/Create","type":"Create","actor":"https://soc.schuerz.at/profile/jakob","published":"2022-01-23T20:21:24Z","instrument":{"type":"Servi
    ce","name":"Friendica 'Siberian Iris' 2021.12-rc-1448","url":"https://soc.schuerz.at"},"to":["https://lemmy.schuerz.at/u/jakob","https://www.w3.org/ns/activitystreams#Public","https://lemmy.schuerz.at/c/test"],"cc":["https://soc.schuerz.at/followers/jakob"],"object":{"id":"https://soc.schuerz.at/objects/4edd2508-4361-edb8-c4d8-b45181083984","type":"Note","summary":"","inReplyTo":"https://lemmy.schuerz.at/post/25360","diaspora:guid":"4edd2508-4361-edb8-c4d8-b45181083984","published":"2022-01-23T20:21:24Z","url":"https://soc.schuerz.at/display/4edd2508-4361-edb8-c4d8-b45181083984","attributedTo":"https://soc.schuerz.at/profile/jakob","sensitive":false,"context":"https://lemmy.schuerz.at/post/25360#context","content":"<span class=\"h-card\"><a href=\"https://lemmy.schuerz.at/u/jakob\" class=\"u-url mention\">@<span>jakob</span></a></span> test","contentMap":{"de":"<bdi>@<a href=\"https://lemmy.schuerz.at/u/jakob\" class=\"userinfo mention\" title=\"jakob\">jakob</a></bdi> test"},"source":{"content":"@[url=https://lemmy.schuerz.at/u/jakob]Jakob[/url] test","mediaType":"text/bbcode"},"diaspora:comment":"{\"author\":\"[email protected]\",\"guid\":\"4edd2508-4361-edb8-c4d8-b45181083984\",\"created_at\":\"2022-01-23T20:21:24Z\",\"edited_at\":\"2022-01-23T20:21:24Z\",\"parent_guid\":\"ea620d1e-742c8b4d15249a9b-18b5fca3\",\"text\":\"@{Jakob; [email protected]} test\",\"author_signature\":\"JNCqOui5Cg8\\/Uxw+f0NtGCRjRnhPOrqE6kGJnMkZvOOKhlCdZbCqvyPlNJzEYDa3Z30mOWQKTTNo5BVI+VVZtGrVEqFOdzNog7jOLQoY1dKU9iEQ9vc8USwUCkyJyv48w1iXpfea87KPwv+03DMlftmD6kC7jdUVwhc7+jm0g4fh06tpOcCMQJOZqTTV\\/80EjxIJQ+8eEk5evSw\\/S98ohD1ahcwSomJ9hJUV1H48ucDvMod1FCLcN5h4ALHqubCu4TZIYhGhw9zoCl52GeHhrD3\\/vL6OW4ftZ7UG4rEKQ4HowuXqmNwydrQldtprRtu2UrZBjLqVusPXEs\\/xERQqZnalNXHijyd1TwwCmfTV4YjKwH4BhX\\/p4hdWMqEP4yYXlfA4apalVeAaYZLrNR58kPJjBHad\\/yqH30ziBFheqZ5odFh\\/jnKB4OCFVST3u9b1OKE0jyTrbTepPTaONwc8giQH1sM8koj1gFdulwuJuOTRUKR\\/8ishgHi5SWwbp5YG5Z3YSINkF10IcLiFZAF300AvwgOCdf7ferim4i\\/7TR1D2CBpoNUZnKCKZRymZbE0GuKEE+A6Pk3lk\\/DCsDtmMXpnxlPZ8Nq8OZS\\/olXevAu1y57MNnxBDXtojr4F54MP2fO7E2JwBr7AlwoeSEvtZSAO\\/elzrKfW0eVWOUM2OnI=\"}","attachment":[],"tag":[{"type":"Mention","href":"https://lemmy.schuerz.at/u/jakob","name":"@[email protected]"}],"to":["https://lemmy.schuerz.at/u/jakob","https://www.w3.org/ns/activitystreams#Public","https://lemmy.schuerz.at/c/test"],"cc":["https://soc.schuerz.at/followers/jakob"]},"signature":{"type":"RsaSignature2017","nonce":"fe42f1478453c9c5e92efdc8a1b00c7e2dd2ce89501f2437c4438b8add1c8ff7","creator":"https://soc.schuerz.at/profile/jakob#main-key","created":"2022-01-23T20:21:25Z","signatureValue":"iWeNKyfH/d5+f6FDmZIadF4hW7XBliL8w3PQ2QkeKQG7fheqx1MB6825JX+Eaq8C0aNESesTTiDJgy3Xdcw8tgKwAVdji2DNZh7rNbSy57AzXlXOPRDnGJUbXp8gAuW2PJNZx3TTsJ5yM7tKLmHk0PpwsnKbvjFabL5O+htyfRZNVjFAsB9bVym/dBvf4jiTZiLufGDprgsaDVygUi3QrzmwsE41NZtL/MIEtbiC5pROWQvdQBEzeLfMDsnjI4CR+3tnaSlvepipuFxeSFpwl5Ae5+YM6IYRvSDsssjr8kAg1t3XnHUyeBdBdys0A6ryR5t5QuY0ygAHFs+X633JsgHDuCxxHiqNYxFuTs1xO0gmHydFy1iKlEt2rbr9pcX05hSvEFg0bI8HEC5M9GuafpY7sOyLX0jobBUH9CxdHUu0qri4ntORlvvAYsGFNHj+folFlMRBNMkcZ+MbrAxdoXBdjhsAp+tD6nje+PeZy63yJJQmPLQi9E+fHGGe0DAobGrBE/XF8X1ABH+ywyKwVu0t6lkSxu+zdr9+JXKgnf7HaFSsknapumw9aQwC7N/Q0M5KO41fF0R4VL2GtoppyB9Ck9Dg1zwMWjL2KZN3ckbWABb+frWtmKIVQACzupRWzHiHSZjRRNJalK3uugVisHF2PFGkjYoUjHDCNegKHO0="}}
    lemmy_1     | 2022-01-23T20:21:26.191104Z  WARN Error encountered while processing the incoming HTTP request: lemmy_server::root_span_builder: data did not match any variant of untagged enum SharedInboxActivities at line 1 column 4107
    lemmy_1     |    0: lemmy_apub::http::shared_inbox
    lemmy_1     |              at crates/apub/src/http/mod.rs:40
    lemmy_1     |    1: lemmy_server::root_span_builder::HTTP request
    lemmy_1     |            with http.method=POST http.scheme="http" http.host=lemmy.schuerz.at http.target=/inbox otel.kind="server" request_id=0d4a8d70-5c5a-46d3-8866-4ea6ee988123 http.status_code=400 otel.status_code="OK"
    lemmy_1     |              at src/root_span_builder.rs:16
    lemmy_1     |    2: tokio::task::runtime.spawn
    lemmy_1     |            with kind=local task.name= loc.file="/root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/task/local.rs" loc.line=302 loc.col=22
    lemmy_1     |              at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/util/trace.rs:16
    lemmy_1     |    3: tokio::task::runtime.spawn
    lemmy_1     |            with kind=local task.name= loc.file="/root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/task/local.rs" loc.line=302 loc.col=22
    lemmy_1     |              at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/util/trace.rs:16
    lemmy_1     |    4: tokio::task::runtime.spawn
    lemmy_1     |            with kind=local task.name= loc.file="/root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/task/local.rs" loc.line=302 loc.col=22
    lemmy_1     |              at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/util/trace.rs:16
    lemmy_1     |    5: tokio::task::runtime.spawn
    lemmy_1     |            with kind=local task.name= loc.file="/root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/task/local.rs" loc.line=302 loc.col=22
    lemmy_1     |              at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/util/trace.rs:16
    lemmy_1     |    6: tokio::task::runtime.spawn
    lemmy_1     |            with kind=block_on task.name= loc.file="/root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/task/local.rs" loc.line=466 loc.col=12
    lemmy_1     |              at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/util/trace.rs:16
    lemmy_1     | LemmyError { message: None, inner: data did not match any variant of untagged enum SharedInboxActivities at line 1 column 4107, context: "SpanTrace" }
    
    
    

    Technical details

    • Please post your log: sudo docker-compose logs > lemmy_log.out.
    • What OS are you trying to install lemmy on? Linux (Debian 11) Lemmy: 0.15.1
    bug 
    Reply
  • Cannot log-in to Lemmy site via iOS device
    Cannot log-in to Lemmy site via iOS device

    Jan 24, 2022

    Issue Summary

    Cannot log in to Lemmy (try with lemmy.ml) via an iOS device. Screenshot -> https://i.ibb.co/ZdpZKPP/IMG-5013.jpg

    Steps to Reproduce

    1. Open lemmy.ml site via any browser on your iOS 15 device (I try with iPhone 13).
    2. Try to log in with your own credential.
    3. Got an "Unknown" error message.

    Technical details

    • iOS 15.2.1
    • Safari, Firefox, and Brave experienced the same issue, probably related to WebKit.
    bug 
    Reply
  • Implement RSS Feeds
    Implement RSS Feeds

    Nov 19, 2019

    This is a basic implementation for RSS feeds. It is still missing proper error handling, and doesnt provide a feed for all. The available feeds are:

    https://*your-domain*/feeds/c/*community-name*.xml
    https://*your-domain*/feeds/u/*user-name*.xml
    

    The website also doesnt have any links to the feeds yet, I would add that in a seperate PR.

    @dessalines As with my last PR, please let me know if there is a better (more idiomatic) way to write some of the Rust code.

    TODO:

    • [x] check which other fields should be added
    • [x] sort by hot by default
    • [x] add parameter for sort order
    • [x] add feed for all
    • [x] proper error handling
    • [x] rebase on master
    Reply
  • Unable to login on Firefox for iOS
    Unable to login on Firefox for iOS

    Jul 14, 2020

    Issue Summary

    After pressing "Login", it loads forever but doesn't log in. I've tried turning off tracking protection etc. but it doesn't help. Works with iOS Safari though.

    Steps to Reproduce

    1. I clicked login, and an endless spinner shows up.

    Technical details

    iOS 13.5

    Firefox version 27.0

    bug 
    Reply
  • 502 bad Gateway
    502 bad Gateway

    Jun 23, 2020

    I installed Lemmy using docker everything went smoot, when i setup ngibx reverse proxy for it, it simply throw an error 502 bad gateway.

    Reply
  • Connecting to database doesn't work
    Connecting to database doesn't work

    Oct 15, 2021

    Issue Summary

    I'm trying to get Lemmy running on my server after reinstalling it with Ansible. Nginx is giving a 502 error message so I can't access my instance.

    The command docker-compose logs is giving the following error messages that are related to the Docker containers lemmy and lemmy-ui. The images seem to restart after a short amount of time because of the errors. The containers for postgres, pictrs and postfix-relay seem to run fine.

    lemmy-ui_1 | Inferno is in development mode. lemmy-ui_1 | Inferno is in development mode. lemmy-ui_1 | Inferno is in development mode. lemmy-ui_1 | httpbase: https://lemmy:8536 lemmy-ui_1 | wsUri: wss://lemmy:8536/api/v3/ws lemmy-ui_1 | isHttps: true lemmy-ui_1 | No JWT cookie found. lemmy-ui_1 | http://0.0.0.0:1234 lemmy-ui_1 | lemmy-ui_1 | /app/node_modules/node-fetch/lib/index.js:1461 lemmy-ui_1 | reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); lemmy-ui_1 | ^ lemmy-ui_1 | FetchError: request to http://lemmy:8536/api/v3/site?auth=AUTHKEY> lemmy-ui_1 | at ClientRequest.<anonymous> (/app/node_modules/node-fetch/lib/index.js:1461:11) lemmy-ui_1 | at ClientRequest.emit (node:events:390:28) lemmy-ui_1 | at Socket.socketErrorListener (node:_http_client:447:9) lemmy-ui_1 | at Socket.emit (node:events:390:28) lemmy-ui_1 | at emitErrorNT (node:internal/streams/destroy:157:8) lemmy-ui_1 | at emitErrorCloseNT (node:internal/streams/destroy:122:3) lemmy-ui_1 | at processTicksAndRejections (node:internal/process/task_queues:83:21) { lemmy-ui_1 | type: 'system', lemmy-ui_1 | errno: 'ECONNREFUSED', lemmy-ui_1 | code: 'ECONNREFUSED' lemmy-ui_1 | }

    lemmy-ui_1 | Inferno is in development mode. lemmy-ui_1 | Inferno is in development mode. lemmy-ui_1 | Inferno is in development mode. lemmy-ui_1 | httpbase: https://lemmy:8536 lemmy-ui_1 | wsUri: wss://lemmy:8536/api/v3/ws lemmy-ui_1 | isHttps: true lemmy-ui_1 | No JWT cookie found. lemmy-ui_1 | http://0.0.0.0:1234 lemmy-ui_1 | lemmy-ui_1 | /app/node_modules/node-fetch/lib/index.js:1461 lemmy-ui_1 | reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); lemmy-ui_1 | ^ lemmy-ui_1 | FetchError: request to http://lemmy:8536/api/v3/site? failed, reason: connect ECONNREFUSED 172.19.0.5:8536 lemmy-ui_1 | at ClientRequest.<anonymous> (/app/node_modules/node-fetch/lib/index.js:1461:11) lemmy-ui_1 | at ClientRequest.emit (node:events:390:28) lemmy-ui_1 | at Socket.socketErrorListener (node:_http_client:447:9) lemmy-ui_1 | at Socket.emit (node:events:390:28) lemmy-ui_1 | at emitErrorNT (node:internal/streams/destroy:157:8) lemmy-ui_1 | at emitErrorCloseNT (node:internal/streams/destroy:122:3) lemmy-ui_1 | at processTicksAndRejections (node:internal/process/task_queues:83:21) { lemmy-ui_1 | type: 'system', lemmy-ui_1 | errno: 'ECONNREFUSED', lemmy-ui_1 | code: 'ECONNREFUSED' lemmy-ui_1 | }

    lemmy_1 | warning: invalid logging spec 'info"', ignoring it lemmy_1 | thread 'main' panicked at 'Error connecting to postgres://lemmy:[email protected]:5432/lemmy', src/main.rs:45:25 lemmy_1 | note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

    Even though I added the new generated database password to config.json from docker-compose.yml, connecting to the database doesn't work. When database connection doesn't work, Inferno seems to crash too.

    Technical details

    • Please post your log: sudo docker-compose logs > lemmy_log.out.
    • What OS are you trying to install lemmy on? Ubuntu 20.04.2 LTS
    • Any browser console errors? None
    bug 
    Reply
  • Picture preview on main page
    Picture preview on main page

    Mar 31, 2021

    Hi, I've set up an instance of the latest stable (0.9.9 at the moment) lemmy with docker (hosted on Ubuntu 20.04). Everything went smoothly. Basically, everything works save for picture preview on the main page - all I can see is a small icon of picture with label 'expand picture' (see attached picture). screenshot

    In 'Create post' dialog, picture is displayed (preview works there) irrespective of address or picture type. Strange is that for example mp4 files work fine. Once a post is created, files are present in docker 'pictrs' container.

    Logs don't say anything like error, warning or so. What can I do more?

    Here is my docker-compose.yml - pretty much the same as prod-example at lemmy github page.

    version: '2.2'
    
    services:
      postgres:
        image: postgres:12-alpine
        environment:
          - POSTGRES_USER=lemmy
          - POSTGRES_PASSWORD=SecretPassword
          - POSTGRES_DB=lemmy
        volumes:
          - ./volumes/postgres:/var/lib/postgresql/data
        restart: always
    
      lemmy:
        image: dessalines/lemmy:0.9.9
        ports:
          - "127.0.0.1:8536:8536"
        restart: always
        environment:
          - RUST_LOG=error
        volumes:
          - ./lemmy.hjson:/config/config.hjson
        depends_on:
          - postgres
          - pictrs
          - iframely
    
      lemmy-ui:
        image: dessalines/lemmy-ui:0.9.9
        ports:
          - "127.0.0.1:1235:1234"
        restart: always
        environment:
          - LEMMY_INTERNAL_HOST=lemmy:8536
          - LEMMY_EXTERNAL_HOST=localhost:8536
          - LEMMY_HTTPS=false
        depends_on:
          - lemmy
    
      pictrs:
        image: asonix/pictrs:v0.2.6-r1
        ports:
          - "127.0.0.1:8537:8080"
        user: 991:991
        volumes:
          - ./volumes/pictrs:/mnt
        restart: always
    
      iframely:
        image: dogbin/iframely:latest
        ports:
          - "127.0.0.1:8061:80"
        volumes:
          - ./iframely.config.local.js:/iframely/config.local.js:ro
        restart: always
        mem_limit: 200m
    

    and nginx.conf config file

    proxy_cache_path /var/cache/lemmy_frontend levels=1:2 keys_zone=lemmy_frontend_cache:10m max_size=100m                 use_temp_path=off;
    
    server {
        listen 80;
        listen [::]:80;
    
        server_name xxxx.dev;
        location /.well-known/acme-challenge/ {
            root /var/www/certbot;
        }
        location / {
            return 301 https://$host$request_uri;
        }
    }
    
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
    
        server_name xxxx.dev;
    
        ssl_certificate /etc/letsencrypt/live/xxxx.dev/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/xxxx.dev/privkey.pem;
    
        # Various TLS hardening settings
        # https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
        ssl_session_timeout  10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_stapling on;
        ssl_stapling_verify on;
    
        # Hide nginx version
        server_tokens off;
    
        # Enable compression for JS/CSS/HTML bundle, for improved client load times.
        # It might be nice to compress JSON, but leaving that out to protect against potential
        # compression+encryption information leak attacks like BREACH.
        gzip on;
        gzip_types text/css application/javascript image/svg+xml;
        gzip_vary on;
    
        # Various content security headers
        add_header Referrer-Policy "same-origin";
        add_header X-Content-Type-Options "nosniff";
        add_header X-Frame-Options "DENY";
        add_header X-XSS-Protection "1; mode=block";
    
        # Upload limit for pictrs
        client_max_body_size 50M;
    
        location / {
          set $proxpass "http://0.0.0.0:1235";
          if ($http_accept = "application/activity+json") {
            set $proxpass "http://0.0.0.0:8536";
          }
          if ($http_accept = "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") {
            set $proxpass "http://0.0.0.0:8536";
          }
          if ($request_method = POST) {
            set $proxpass "http://0.0.0.0:8536";
          }
          proxy_pass $proxpass;
    
          rewrite ^(.+)/+$ $1 permanent;
    
          # Send actual client IP upstream
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
    
          # Proxy Cache
          proxy_cache             lemmy_frontend_cache;
          proxy_cache_use_stale   error timeout http_500 http_502 http_503 http_504;
          proxy_cache_revalidate  on;
          proxy_cache_lock        on;
          proxy_cache_min_uses    5;
    
          # WebSocket support
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }
    
        location ~ ^/(api|pictrs|feeds|nodeinfo|.well-known) {
          proxy_pass http://0.0.0.0:8536;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
    
          # Add IP forwarding headers
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
        location ~ /pictshare/(.*)$ {
          return 301 /pictrs/image/$1;
        }
    
        location /iframely/ {
          proxy_pass http://0.0.0.0:8061/;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    Could this be wrong?

    location ~ /pictshare/(.*)$ {
          return 301 /pictrs/image/$1;
        }
    
    question 
    Reply
  • [docs] federation block does not work
    [docs] federation block does not work

    Nov 5, 2021

    I believe this might be more of an issue on clarifying Lemmy's documentation however the setup for federation does not download any files when running curl -H 'Accept: application/activity+json' <domain>.


    What I have tested:

    {
      # for more info about the config, check out the documentation
      # https://join-lemmy.org/docs/en/administration/configuration.html
    
    {
      hostname: <domain>
      federation: {
        enabled: true
      }
      slur_filter:
        '''
        (fag(g|got|tard)?\b|cock\s?sucker(s|ing)?|ni((g{2,}|q)+|[gq]{2,})[e3r]+(s|z)?|mudslime?s?|kikes?|\bspi(c|k)s?\b|\bchinks?|gooks?|bitch(es|ing|y)?|whor(es?|ing)|\btr(a|@)nn?(y|ies?)|\b(b|re|r)tard(ed)?s?)
        '''
    }
    
      setup: {
        # username for the admin user
        admin_username: "lemmy"
    
    [...]
    
    

    and

    {
      # for more info about the config, check out the documentation
      # https://join-lemmy.org/docs/en/administration/configuration.html
    
      hostname: <domain>
      federation: {
        enabled: true
      }
      slur_filter:
        '''
        (fag(g|got|tard)?\b|cock\s?sucker(s|ing)?|ni((g{2,}|q)+|[gq]{2,})[e3r]+(s|z)?|mudslime?s?|kikes?|\bspi(c|k)s?\b|\bchinks?|gooks?|bitch(es|ing|y)?|whor(es?|ing)|\btr(a|@)nn?(y|ies?)|\b(b|re|r)tard(ed)?s?)
        '''
    
      setup: {
        # username for the admin user
        admin_username: "lemmy"
    
    [...]
    
    

    after each change I ran docker-compose up -d and verified it was correct through the webgui.


    **Edit*t:

    sorry I ran url -H 'Accept: application/activity+json' https://<domain>/c/announcements and not the command listed above

    question 
    Reply
  • Add private messaging
    Add private messaging

    Aug 28, 2019

                                                                                                                                                                                                            enhancement 
    Reply
  • Make the slur filter editable from the site itself
    Make the slur filter editable from the site itself

    Apr 3, 2020

    It's generally not a good idea to hard code something like the slur filter because the needs of every instance is different. Instances in another language would need their versions, and cases where the slur filter over blocks need to be addressed by the admins.

    A good idea would be to store the slur filter in the database and initialize it with a default when spinning up an instance, but make it editable by admins without changing source files.


    Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

    enhancement moderation 
    Reply
  • Create an android app
    Create an android app

    May 15, 2019

    Clients

    • Kotlin : https://github.com/eiknat/lemmy-client

    Apps

    • Typescript: https://github.com/koredefashokun/lemmy-mobile
    • Dart: https://github.com/krawieck/lemmur/
    enhancement help wanted 
    Reply
  •  домен как добавляется ?
    домен как добавляется ?

    Dec 20, 2021

    где нибудь есть инструкция насчет добавления домена ?

    enhancement 
    Reply