yet another rss reader

yarr

yarr (yet another rss reader) is a web-based feed aggregator which can be used both as a desktop application and a personal self-hosted server.

It is written in Go with the frontend in Vue.js. The storage is backed by SQLite.

screenshot

usage

The latest prebuilt binaries for Linux/MacOS/Windows are available here.

macos

Download yarr-*-macos64.zip, unzip it, place yarr.app in /Applications folder.

The binaries are not signed, because the author doesn't want to buy a certificate. Apple hates cheapskate developers, therefore the OS will refuse to run the application. To bypass these measures, you can run the command:

xattr -d com.apple.quarantine /Applications/yarr.app

windows

Download yarr-*-windows32.zip, unzip it, place wherever you'd like to (C:\Program Files or Recycle Bin). Create a shortcut manually if you'd like to.

Microsoft doesn't like cheapskate developers too, but might only gently warn you about that, which you can safely ignore.

linux

The Linux version doesn't come with the desktop environment integration. For easy access on DE it is recommended to create a desktop menu entry by by following the steps below:

unzip -x yarr*.zip
sudo mv yarr /usr/local/bin/yarr
sudo nano /usr/local/share/applications/yarr.desktop

and pasting the content:

[Desktop Entry]
Name=yarr
Exec=/usr/local/bin/yarr -open
Icon=rss
Type=Application
Categories=Internet;

For self-hosting, see yarr -h for auth, tls & server configuration flags.

build

Install Go >= 1.16 and gcc. Get the source code:

git clone --recurse-submodules https://github.com/nkanaev/yarr.git

Then run one of the corresponding commands:

# create an executable for the host os
make build_macos    # -> _output/macos/yarr.app
make build_linux    # -> _output/linux/yarr
make build_windows  # -> _output/windows/yarr.exe

# ... or start a dev server locally
make serve          # starts a server at http://localhost:7070

# ... or build a docker image
docker build -t yarr .

credits

Feather for icons.

Owner
256 shades of grey
null
Comments
  • Issues on ARM

    Issues on ARM

    Tried building yarr for raspberry pi as per the instruction and got build successful however while try to run got the error:
    -bash: ./yarr: cannot execute binary file: Exec format error

    Then changed GOARCH=amd64 to GOARCH=armv7 in makefile and got issue(s) while build mkdir -p _output/linux GOOS=linux GOARCH=armv7 go build -tags "sqlite_foreign_keys release linux" -ldflags="-s -w -X 'main.Version=2.1' -X 'main.GitHash=f98de9a0'" -o _output/linux/yarr src/main.go cmd/go: unsupported GOOS/GOARCH pair linux/armv7 make: *** [makefile:21: build_linux] Error 2

    Guide me how to resolve this, thanks.

  • Old feed items reaapearing as unread occasionally

    Old feed items reaapearing as unread occasionally

    Hi 👋 Thank you for creating yarr. I've been using it for ages and it's wonderful! No other feed reader that I know of is so delightfully minimalistic and so easy to self-host thanks to the choice of SQLite and Go.

    I have a slight nuisance though with some feed items reappearing as unread from time to time in the reader. Note that the content of the items that reappear do not change (most of the time). They just need to be marked as read by hand. I'm sure other people experience that too and I'm curious what's the way avoid that and only see truly unread items in the reader.

    One cause that I've observed is when a RSS feed has <guid isPermalink=false> as e.g. at https://rss.art19.com/you-can-learn-chinese. In such case it's no wonder yarr doesn't try to guess whether an item is read or not because even the server doesn't guarantee whether it's a new item or not. Still, that translates to a suboptimal UX so maybe some workaround be acceptable? Generally, the feed item datetimes are correct, so a I was thinking of a per-feed setting like "do not show feed items older than some designated one". Perhaps there's a better solution. I'm curious to hear your thoughts.

    I have around ~250 feeds in my yarr instance and I'm experiencing the issue 3+ times a day.

    I should add I'm very much aware of https://github.com/nkanaev/yarr/issues/57 but I subjectively see this as an issue, not a new feature. You may have a different opinion of course.

    Best regards!

  • Nil pointer issue

    Nil pointer issue

    I tried running this service with more than 300 links and out of three times, it crashed twice.

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x89bd17]
    
    goroutine 24 [running]:
    github.com/nkanaev/yarr/server.findFavicon(0xc000406ba0, 0x1c, 0xc0002d1260, 0x29, 0x0, 0x0, 0x0)
    	/var/home/minioin/workspace/yarr/server/crawler.go:170 +0x5d7
    github.com/nkanaev/yarr/server.(*Handler).startJobs.func2()
    	/var/home/minioin/workspace/yarr/server/server.go:76 +0x3aa
    created by github.com/nkanaev/yarr/server.(*Handler).startJobs
    	/var/home/minioin/workspace/yarr/server/server.go:97 +0x149
    
  • Set auth without authfile

    Set auth without authfile

    With this patch, it is possible to pass username and password directly on the command line with:

    yarr --auth 'username:password'
    

    The corresponding environment variable comes handy with containers:

    YARR_AUTH='username:password' yarr
    
  • Pagination does not fetch the correct articles after some are marked as read

    Pagination does not fetch the correct articles after some are marked as read

    In the unread section, when you scroll down after reading a few articles some of them will not show up.

    I could take a shot at trying to fix it and I've thought of two ways this can be fixed.

    • The web-ui could request items from a specific offset (instead of by page), which would get decreased for each article read.
    • The web-ui could request items after the last item in the list, similar to how reddit handles pagination. This would to somewhat alter the query.

    Any thoughts as to which would be better, or maybe a different solution?

    Lastly, in rare cases the unread counter can go below 0. I haven't been able to reproduce it consistently and I don't know if it's related to this specific issue. Have you noticed that at all?

  • Suggestion: Keyboard Shortcuts

    Suggestion: Keyboard Shortcuts

    How would you feel about the idea of adding keyboard shortcuts? I find them very handy in NetNewsWire. Not asking you to necessarily do the implementation; more curious about your opinion of the capability.

  • Potential features in a branch

    Potential features in a branch

    Hi, I understand that #57 means the app is feature complete from your perspective.

    That said, I added some features in my branch and I thought it would be nice to at least point them here, in case there's something that interests you. I wouldn't mind making a PR for any of them:

    • Setting to enable/disable "Auto mark item as read"
    • "Mark all as read" works on all views
    • Show "mark all as read" and settings on all views
    • Use charset from feeds instead of using the HTTP charset
    • Some key-bindings change:
      • previous/next feed with p and n
      • toggle read/unread m

    If anything makes sense to you here, please let me know.

    If there's no interest in any of them, it's all good. :)

    Thanks for the great project.

  • Version v2.0 no longer works properly when setup behind reverse proxy

    Version v2.0 no longer works properly when setup behind reverse proxy

    I am trying to setup dockerized Yarr behind a Nginx reverse proxy. I have two Yarr docker images built right now: v1.4 and v2.0. Both versions work just fine when served directly, without reverse proxy.

    Docker image built from tag v1.4 works as expected. Nginx logs when accessing https://yarr.example.com:

    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET / HTTP/2.0" 200 39565 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/stylesheets/app.css HTTP/2.0" 200 10437 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/fetch.umd.js HTTP/2.0" 200 17934 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/vue.min.js HTTP/2.0" 200 93670 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/purify.min.js HTTP/2.0" 200 16941 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/url-polyfill.min.js HTTP/2.0" 200 6358 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/stylesheets/bootstrap.min.css HTTP/2.0" 200 160403 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/app.js HTTP/2.0" 200 18643 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/popper.min.js HTTP/2.0" 200 17883 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/api.js HTTP/2.0" 200 2967 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/vue-lazyload.js HTTP/2.0" 200 20764 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/Readability.min.js HTTP/2.0" 200 27755 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:27 +0000] "GET /static/javascripts/keybindings.js HTTP/2.0" 200 4904 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /static/javascripts/bootstrap-vue.min.js HTTP/2.0" 200 381485 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/feeds HTTP/2.0" 200 3 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/status HTTP/2.0" 200 25 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/folders HTTP/2.0" 200 3 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/settings HTTP/2.0" 200 162 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /api/items? HTTP/2.0" 200 37 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    192.168.1.5 - - [25/Apr/2021:14:22:28 +0000] "GET /static/graphicarts/anchor.png HTTP/2.0" 200 395 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    

    With v2.0, when I proceed to https://yarr.example.com, Firefox tries to download application/octet-stream file with a random name, without extension (for example dE9ike23). It seems to be a valid HTML file – see this gist. Nginx logs:

    192.168.1.5 - - [25/Apr/2021:14:23:59 +0000] "GET / HTTP/2.0" 200 5897 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0" "-"
    

    Relevant part of the docker-compose file:

    [...]
      yarr:
        container_name: yarr
        image: yarr2     # or yarr1
        restart: always
        networks:
          - nginx
        expose:
          - 7070
        volumes:
          - yarr:/data
    [...]
    

    Relevant part of the Nginx config file:

    [...]
    server {
        listen 443 ssl http2;
        server_name yarr.example.com;
        location / {
            proxy_pass http://yarr:7070;
    
            proxy_set_header Host $http_host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    [...]
    

    Please let me know if above information is sufficient, or should I include anything else.

  • yarr as PWA?

    yarr as PWA?

    Hi, I was reading through your rationale and discovered your initial goal:

    a desktop application accessible via web browser
    

    That somehow sparked the question and idea to support yarr as a PWA, adding features like:

    • Installable via the webpage
    • Have a dedicated app icon
    • Proper app feeling, not just a webpage in a browser

    Checking pages like pwabuilder.com the minimum requirement would be:

    • [ ] A manifest file
    • [ ] Service Worker scripts

    Have you considered making yarr a PWA?

    I could help providing the necessary files, but have honestly no idea how to include them via GO. Anyway, wanted to check with you upfront.

    What do you think?

  • Issues on Windows

    Issues on Windows

    I've been using yarr on Windows and am facing few problems:

    1. There is no logging on stdout. I ran yarr.exe from command line and saw no logs. Running yarr.exe -h / --help prints nothing either.

    2. I'm unable to bind on any other host/port. When I run yarr.exe -addr 127.0.0.1:7080, the process starts and exits in a moment. Again, there are no logs so I can't see what happened.

    3. Once 2 works, I would like to bind to 0.0.0.0:7070 so I can access yarr from other devices on LAN. That will work, right?

  • feat: support config from json and env

    feat: support config from json and env

    • support env
    $env:YARR_DATABASE = "D:\software\yarr\storage.db"
    $env:YARR_OPENBROWSER = $True
    $env:YARR_LOGPATH = "D:\software\yarr\yarr.log"
    
    • save log to file

    • support opml file exported from newsflow

    <?xml version="1.0" encoding="utf-8"?>
    <opml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
      <head>
        <title>Newsflow</title>
      </head>
      <body>
        <outline title="博客">
          <outline htmlUrl="https://m.thepaper.cn/list_26915" text="研习一个地方和一群人,记录城市的节奏与脉络。" title="澎湃新闻-城市漫步" xmlUrl="https://rsshub.app/thepaper/list/26915" />
        </outline>
      </body>
    </opml>
    
  • For high resolution screens, the sentences are too long

    For high resolution screens, the sentences are too long

    For high resolution screens (for example, iMac 4.5K display), the sentences are too long to read easily. I think it is good If there are some spaces beside the contents (like Feedbin or Feedly does).

    yarr (long sentences) Screenshot 2022-12-12 at 7 42 11 PM

    Feedbin for reference (centered) Screenshot 2022-12-12 at 7 51 19 PM

  • fever api support, #38

    fever api support, #38

    Fever API spec: https://github.com/DigitalDJ/tinytinyrss-fever-plugin/blob/master/fever-api.md

    base on fever branch, testing passed with Reeder app on MacOS. Welcome to use more Apps to test fever api.

  • The infinite scrolling doesn't load more posts with

    The infinite scrolling doesn't load more posts with "down arrow" key

    The infinite scroll doesn't work pressing "down key", it only works with "mouse wheel" or "trackpad" scrolling

    Just to explain better

    Screenshot from 2022-11-14 23-34-35

    Press down

    Screenshot from 2022-11-14 23-35-22

    the selection goes on the top of the list but..

    .. if you scroll with the trackpad it loads more posts

    Screenshot from 2022-11-14 23-36-00

  • Touch Gestures

    Touch Gestures

    I love the whole yarr experience even on mobile but I feel myself wanting to interact with it in a way it doesn't support yet.

    I want to implement 3 touch gestures I feel like it could use but I want to know if there is any interest in it.

    The three gestures are:

    • Swipe down on an open post to close it
    • Swipe left on an open post to go to the next post
    • Swipe right on an open post to go to the previous post

    In essence I just want to add the some of the same functionality granted by keyboard shortcuts on desktop.

Related tags
Yet another Go package for working with *.golden test files, with a focus on simplicity.

go-golden Yet another Go package for working with *.golden test files, with a focus on simplicity. Import import "github.com/jimeh/go-golden" Usage fu

Aug 3, 2022
Read data from rss, convert in pdf and send to kindle. Amazon automatically convert them in azw3.

Kindle-RSS-PDF-AZW3 The Kindle RSS PDF AZW3 is a personal project. The Kindle RSS PDF AZW3 is a personal project. I received a Kindle for Christmas, a

Jan 10, 2022
csv reader/writer and csv generator.

IO csv reader sample version 0.0.1-SNAPSHOT Goals: main: read huge file, hex substring, write to new file. repo has 2 version. v1 can read a file and

Nov 4, 2021
osu! database file format flexible reader

Example usage package main import ( "fmt" "github.com/l3lackShark/reader" types "github.com/l3lackShark/reader/types" ) type agent struct { Osu

Nov 24, 2021
Perform external sorting on io.Reader

external-sort This repo describes an algorithm to sort data from a stream with a fixed amount of memory necessary that can be specified. The overall i

Dec 25, 2022
A small tool for sending a single file to another machine

file-traveler A small tool for sending a single file to another machine. Build g

Dec 28, 2021
yarr (yet another rss reader) is a web-based feed aggregator
yarr (yet another rss reader) is a web-based feed aggregator

yarr (yet another rss reader) is a web-based feed aggregator which can be used both as a desktop application and a personal self-hosted server.

Jan 2, 2023
RSS master is a RSS subscription function aggregation tool, You can use it easily!

???? 中文 rsm ✨ RSS master[rsm] is a RSS subscription function aggregation tool, You can use it easily! How to start? ?? Start rsm with rsm run -c,--cfg

Oct 18, 2022
Svenska-yle-rss-content-fixer - Attach content to Svenska Yle RSS feeds

svenska-yle-rss-content-fixer This little tool attaches article content to the S

Oct 4, 2022
terminal rss reader

TODO Add author field [x] Add Source as own type to support both http sources and file types sources [x] Move Load http call to own method that Load m

Nov 7, 2021
Yet Another CLi Spinner; providing over 70 easy to use and customizable terminal spinners for multiple OSes
Yet Another CLi Spinner; providing over 70 easy to use and customizable terminal spinners for multiple OSes

Yet Another CLi Spinner (for Go) Package yacspin provides yet another CLi spinner for Go, taking inspiration (and some utility code) from the https://

Dec 25, 2022
An yet-another red-black tree implementation, with a C++ STL-like API.

A red-black tree with an API similar to C++ STL's. INSTALLATION go get github.com/yasushi-saito/rbtree EXAMPLE More examples can be fou

Apr 25, 2022
Yet another Go REPL that works nicely. Featured with line editing, code completion, and more.
  Yet another Go REPL that works nicely. Featured with line editing, code completion, and more.

gore Yet another Go REPL that works nicely. Featured with line editing, code completion, and more. (Screencast taken with cho45/KeyCast) Usage gore Af

Jan 2, 2023
🍱 yet another collection of go utilities & tools

gut ?? Yet another collection of Go utilities & tools. A simple one. Just go with your gut feeling. Shortcuts Symbol ?? 弁当 Document License Build Stat

Sep 26, 2022
Yet Another REST Framework

YARF: Yet Another REST Framework YARF is a fast micro-framework designed to build REST APIs and web services in a fast and simple way. Designed after

Sep 27, 2022
🚥 Yet another pinger: A high-performance ICMP ping implementation build on top of BPF technology.

yap Yet-Another-Pinger: A high-performance ICMP ping implementation build on top of BPF technology. yap uses the gopacket library to receive and handl

Nov 9, 2022
Yet another SIP003 plugin for shadowsocks, based on Xray-core

Yet another SIP003 plugin for shadowsocks, based on Xray-core Build go build Usage See command line args for advanced usages.

Jan 8, 2023
Yet another Go REPL that works nicely. Featured with line editing, code completion, and more.
  Yet another Go REPL that works nicely. Featured with line editing, code completion, and more.

gore Yet another Go REPL that works nicely. Featured with line editing, code completion, and more. (Screencast taken with cho45/KeyCast) Usage gore Af

Jan 7, 2023
Not Yet Another Password Manager written in Go using libsodium

secrets Secure and simple passwords manager written in Go. It aims to be NYAPM (Not Yet Another Password Manager), but tries to be different from othe

May 30, 2022
Yet another codemod alternative

rnm Yet another codemod alternative. Replace all occurrences of a name to another name in your code! Features Support for different case styles See rn

Sep 28, 2022