{"id":28793213,"url":"https://github.com/bayang/jelu","last_synced_at":"2026-05-09T00:02:24.207Z","repository":{"id":37693418,"uuid":"426792636","full_name":"bayang/jelu","owner":"bayang","description":"Self hosted read and to-read list book tracker","archived":false,"fork":false,"pushed_at":"2025-06-09T09:37:55.000Z","size":9674,"stargazers_count":495,"open_issues_count":23,"forks_count":20,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-09T09:38:00.375Z","etag":null,"topics":["book","books","booktracker","goodreads","kotlin","librarything","reading","reading-list","self-hosted","to-read","tracker","vue","vue3"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bayang.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"bayang","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2021-11-10T22:09:40.000Z","updated_at":"2025-06-09T09:37:57.000Z","dependencies_parsed_at":"2023-02-15T23:30:29.287Z","dependency_job_id":"c2257a08-d36a-4169-a7e2-fdd74e9c6fdc","html_url":"https://github.com/bayang/jelu","commit_stats":null,"previous_names":[],"tags_count":118,"template":false,"template_full_name":null,"purl":"pkg:github/bayang/jelu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bayang%2Fjelu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bayang%2Fjelu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bayang%2Fjelu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bayang%2Fjelu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bayang","download_url":"https://codeload.github.com/bayang/jelu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bayang%2Fjelu/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260465877,"owners_count":23013446,"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":["book","books","booktracker","goodreads","kotlin","librarything","reading","reading-list","self-hosted","to-read","tracker","vue","vue3"],"created_at":"2025-06-18T01:06:54.678Z","updated_at":"2026-05-09T00:02:24.200Z","avatar_url":"https://github.com/bayang.png","language":"Kotlin","funding_links":["https://ko-fi.com/bayang"],"categories":["kotlin"],"sub_categories":[],"readme":"# JELU\n\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/bayang/jelu/ci.yml?branch=main\u0026style=flat-square) ![GitHub](https://img.shields.io/github/license/bayang/jelu?style=flat-square) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/bayang/jelu?style=flat-square) ![Docker Image Version (tag latest semver)](https://img.shields.io/docker/v/wabayang/jelu/latest?label=docker%20hub\u0026style=flat-square) [![Discord](https://img.shields.io/discord/970383499733381161?label=Discord\u0026style=flat-square)](https://discord.gg/3RZJ4zuMP5) [![Crowdin](https://badges.crowdin.net/jelu/localized.svg)](https://crowdin.com/project/jelu)\n\nThere is a matrix channel available : https://matrix.to/#/#jelu:matrix.org\n\nCheck the [Official documentation](https://bayang.github.io/jelu-web/) for more detailed information.\n\nLike Jelu or find it useful ? Offer me a [coffee ☕](https://ko-fi.com/bayang)\n\n## Purpose\n\nThis app main purpose is to track what you have read, what you are reading and what you want to read.\n\nIt acts as a self hosted \"personal Goodreads\" because I became tired of switching providers every time an online service was shut.\n\nI also became tired of having to export and reimport my data each time with data loss in the process.\n\nYou have control on your data since Jelu offers an API you can script or integrate with any third party tool or service (which you cannot do with the vast majority of other online services).\n\nAll your data is now located into a single-file database which can be saved anywhere.\n\n## Features\n\n* track read books so you don't have to remember everything, and view your history (by year and month)\n* manage to-read list\n* Import history (from goodreads via csv export or a file with a list of ISBNs, one by line)\n* Export your data in a csv file\n* Import single books manually or automatically via online search (through title, authors or isbn)\n* Mark books as currently reading, finished or dropped\n* Books can be tagged and a tag page can display all books with that tag\n* You can use tags to create custom shelves\n* Links to third party providers are fetched online (google books, amazon, goodreads, librarythings) or computed from those providers id you could enter manually.\n* Author page with author detail and books from this author\n* Auto import author details from wikipedia\n* Auto merge authors (to fix duplicates resulting from automatic imports for example)\n* Provide embed code snippets so that books can be tracked in other sites, blogs or even markdown notes/journal\n* Provide some stats about your readings\n* Multi user support (ldap login, proxy authentication, see other user libraries)\n* provides an API\n* Write reviews and share them, see the reviews of other users on your instance\n* Fallback metadata providers (see [official doc](https://bayang.github.io/jelu-web/configuration/) for configuration)\n* Metadata import from epub or opf files\n* Isbn scanning via camera on mobile\n\n## Usage\n\n* Import your existing history if you have a Goodreads account\n* Start recording your read books\n* Add books you want to read\n* Edit tags, books, import and change covers (either from a file on disk or from a url) ...\n\n## Installation\n\n### Java\n\n* download the java Jar from the releases section in a dedicated folder\n* go to this folder\n* start the jar (it is a spring fat jar so dependencies are included) : eg `java -jar jelu-0.13.0.jar`\n* If you want to tweak the default config (see `src/main/resources/application.yml`), just create a yaml file called application.yml in the same folder as the jar.\n\nFor example if you want the database to be located next to the jar file (instead of being located in the default `${user.home}/.jelu/database/` folder) :\n\n```yaml\njelu:\n  database:\n    path: .\n```\n\nThe automatic metadata online search is provided for the moment through a calibre tool called fetch-ebook-metadata (whether you like it or not).\n\nSo if you want to use it with the java install, provide the path to the executable in the config, like so :\n\n```yaml\njelu:\n  metadata:\n    calibre:\n      path: /usr/bin/fetch-ebook-metadata\n```\n\nIf you run into a cors issue, update the config with the desired origins like so :\n\n```yaml\njelu:\n  cors.allowed-origins:\n    - https://jelu.myserver.org\n```\n\nThen open the web UI in your web browser at `localhost:11111`\n\nConcerning Cors, the default is to accept everything, which you might not not want to do.\n\nNo config in the config file is equivalent to :\n\n```yaml\njelu:\n  cors.allowed-origins:\n    - \"*\"\n```\n\n### Docker\n\nAn image is available here :\n\nhttps://hub.docker.com/repository/docker/wabayang/jelu\n\nThis one is the easiest if you are used to it.\n\nThe docker image we provide embeds the fetch-ebook-metadata executable to automatically import books based on their title, authors or isbn.\n\nA sample docker compose would look like that :\n\n```yaml\nservices:\n  jelu:\n    image: wabayang/jelu\n    container_name: jelu\n    volumes:\n      - ~/jelu/config:/config\n      - ~/jelu/database:/database\n      - ~/jelu/files/images:/files/images\n      - ~/jelu/files/imports:/files/imports\n      - /etc/timezone:/etc/timezone:ro\n    ports:\n      - 11111:11111\n    restart: unless-stopped\n\n```\n\n### Kubernetes (Helm)\n\nAn unofficial Helm-Chart to deploy Jelu to Kubernetes is available here:\n\nhttps://artifacthub.io/packages/helm/tibuntu/jelu\n\n## Screenshots\n\nHome page :\n\n![home page](screenshots/home-page.png)\n\nAuto import form (empty) :\n\n![](screenshots/auto-import-empty.png)\n\nAuto import form (filled) :\n\n![](screenshots/auto-import-filled.png)\n\nAuto import form (result preview) :\n\n![](screenshots/auto-import-preview-result.png)\n\nAuto import form (edit pre-filled results before importing to your account, eg : modify tags etc...) :\n\n![](screenshots/auto-import-edit-result.png)\n\nBooks list :\n\n![](screenshots/book-list.png)\n\nBook detail page :\n\n![](screenshots/book-detail-1.png)\n\nBook detail, events part :\n\n![](screenshots/book-detail-events.png)\n\nAuthor page :\n\n![](screenshots/author-page.png)\n\nEmbed code and preview :\n\n![](screenshots/embed.png)\n\nReview creation :\n\n![](screenshots/review_modal.jpg)\n\n\n## Translations\n\nYou can help with translations : everything is hosted on crowdin https://crowdin.com/project/jelu\n\n## Contributions :\n\n* Czech translation : @filcuk, @ondrejk\n* Danish translation : @SirBogner\n* German translation : @puckzuck\n* Polish translation: @Sebastian Jasiński (PrinceNorris)\n* Italian translation : @AleCornella\n* Portuguese translation : @M0streng0\n\n(if you should be here or want your name modified just contact me)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbayang%2Fjelu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbayang%2Fjelu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbayang%2Fjelu/lists"}