{"id":18666459,"url":"https://github.com/spezifisch/rueder","last_synced_at":"2025-06-17T22:34:01.552Z","repository":{"id":45742028,"uuid":"492893028","full_name":"spezifisch/rueder","owner":"spezifisch","description":"Light and fast self-hosted Feed Reader","archived":false,"fork":false,"pushed_at":"2024-02-22T18:36:07.000Z","size":8022,"stargazers_count":7,"open_issues_count":15,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-19T00:20:31.357Z","etag":null,"topics":["atom","feed","feed-reader","golang","google-reader","rss","self-hosted","svelte","tailwindcss"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spezifisch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-16T15:25:03.000Z","updated_at":"2025-03-20T21:35:46.000Z","dependencies_parsed_at":"2023-10-03T16:56:34.675Z","dependency_job_id":"b82fbffe-1eca-4b12-810f-059e39ee8656","html_url":"https://github.com/spezifisch/rueder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/spezifisch/rueder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spezifisch%2Frueder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spezifisch%2Frueder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spezifisch%2Frueder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spezifisch%2Frueder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spezifisch","download_url":"https://codeload.github.com/spezifisch/rueder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spezifisch%2Frueder/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260450575,"owners_count":23011099,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atom","feed","feed-reader","golang","google-reader","rss","self-hosted","svelte","tailwindcss"],"created_at":"2024-11-07T08:32:29.609Z","updated_at":"2025-06-17T22:33:56.533Z","avatar_url":"https://github.com/spezifisch.png","language":"Go","readme":"# rueder\n\n![rueder logo: a gopher with glasses reading a newspaper](docs/images/rueder3gopher_s.png)\n\n## Dependencies\n\n- Docker or podman. Everything is contained in docker images.\n- docker-compose (1.27+ required)\n\n## Installation (Production Build)\n\n1. copy `rueder.example.env` to `rueder-prod.env` and\n   1.1 change `LOGINSRV_JWT_SECRET` and `RUEDER_JWT` to something secure (eg. the output of `pwgen -s 128 1`)\n   1.2 change `LOGINSRV_SIMPLE` to something else, however you want to authenticate your users\n2. change `docker-compose.yaml` to match your setup's imgproxy URL\n3. build docker production images: `docker-compose build`\n4. start db only: `docker-compose up -d db`\n5. create databases: `docker-compose -f docker-compose.initdb.yaml up`, then\n   `Ctrl+C` after it's done\n6. ready to run with: `docker-compose up -d`\n\n## Development\n\nWhile the `docker-compose.*` files in the main directory are for production use\nthe ones inside `backend/` and `frontend/` are intended for development purposes.\nThe Dockerfiles for production and development are named `Dockerfile` and\n`Dockerfile.dev` respectively and are located next to each other in the `docker`\nsub-directories inside the backend and frontend directories.\n\nTo start a local instance of `rueder3` with hot-reload on code changes, simply do:\n\n```shell\nmake run\n\n# OR\n\ndocker-compose up --force-recreate --build\n```\n\ninside `backend/` directory in one terminal and inside `frontend/` directory in\nanother terminal. If you prefer to run the frontend without a docker container\nyou can also use `pnpm dev` instead.\n\n**First run:** On the first run you need to initialize the database by running\n`./utils/reset_db.sh` from the `backend/` directory. Restart all containers after this.\n\n**Note:** Please use the provided Git hooks to make sure your changes pass\nlinting and testing.\n\n### Services\n\nThe commands above spawn the following services, all listening on localhost:\n\n- rueder web frontend that can be accessed at \u003chttp://127.0.0.1:3000\u003e (with\n  vite hot-reload)\n- rueder backend processes (also with hot-reload): http feed api (:8080),\n  authbackend (:8082, auth claims provider for loginsrv), events api (:8083),\n  feedfinder api (:8081)\n- additional required backend services: auth (:8082, loginsrv), postgres (:5432)\n- additional utility services: imgproxy (:8086)\n\nOpen the web frontend and login with user `bob` and password `secret`.\n\nYou can also access the Swagger docs at \u003chttp://127.0.0.1:8080/swagger/index.html\u003e\nfor the Feed API, and \u003chttp://127.0.0.1:8081/swagger/index.html\u003e for the\nFeedfinder.\n\n### Git Hooks\n\n#### Initial Setup for Development\n\nDevelopment Requirements:\n\n- Python (3.7+ required, 3.11 recommended) for pre-commit, pipx\n- Docker for some pre-commit hooks\n- Node/**p**npm for frontend checks (16+ required, 18+ recommended)\n- Go (1.17+ required, 1.21 recommended) for backend checks (make sure `GOPATH` environment variable is set)\n- golangci-lint for backend checks: \u003chttps://golangci-lint.run/usage/install/\u003e\n\nAfter installing these requirements and cloning the repository do these steps to\nset up Git hooks:\n\n```shell\n# install pre-commit (mainly for backend stuff)\npipx install pre-commit\n# note that something like ~/.local/bin needs to be in your PATH\npre-commit install\n\n# install husky (mainly for frontend stuff)\ncd frontend\npnpm install\n# DO NOT run husky install\n```\n\nThis installs [pre-commit](https://pre-commit.com/) which is triggered on Git commits.\nThe included config file `.pre-commit-config.yaml` then runs some backend checks\nand finally runs [husky](https://typicode.github.io/husky) for frontend checks\nusing `frontend/.husky/`.\n\n#### Running Manually\n\nTo just check if everything is in order:\n\n```shell\npre-commit run --all-files\n```\n\n### Linting/Formatting\n\nFor backend use `gofmt` for formatting and the linters configured in `golangci-lint`.\nUse `make lint` inside `./backend` directory to lint all files.\n\nFor frontend use (inside `./frontend` directory) `pnpm format` for formatting\nand as linters use `pnpm lint` and `pnpm validate`.\n\n### Testing\n\nLook at the GitHub Workflows in `.github` if anything is unclear.\n\n#### Backend\n\nUse `make test` inside `./backend` to run tests using the included `_test.go` files.\n\nWhen you change something which affects test execution in `APIPopRepository`\nyou need to start the test database service with `docker-compose up db` in `./backend`\nand then run `make test_record` to update copyist's logfiles. The updated files\nneed to be committed, too.\n\n#### Frontend\n\nUse `pnpm test` to run tests with Jest using the included `.test.ts` files.\n\n### Production Test\n\nBefore deploying to production you can test the production build of the\nfrontend with `pnpm preview` with the development version of the backend.\n\nYou can also test production backend and frontend with:\n\n```shell\ncp config/rueder.example.env config/rueder-test.env\n# edit rueder-test.env to set LOGINSRV_JWT_SECRET and RUEDER_JWT values\ndocker network create http_default\ndocker-compose -f docker-compose.test.yaml up\n```\n\nThe test-prod build will be accessible under \u003chttp://127.0.0.1:5000/rueder/\u003e.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspezifisch%2Frueder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspezifisch%2Frueder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspezifisch%2Frueder/lists"}