---
title: Jelu
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, books, social, fediverse, kotlin, spring, lecture, partage]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Books, https://github.com/bachman/jelu]
---

# 📕 Jelu

> **La plateforme de lecture sociale auto-hébergée** — catalogue de livres, suivi de lectures, critiques, et fédération ActivityPub pour partager vos avis avec Mastodon, BookWyrm et Pleroma.

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [https://github.com/bachman/jelu](https://github.com/bachman/jelu) |
| **GitHub** | [https://github.com/bachman/jelu](https://github.com/bachman/jelu) |
| **License** | MIT |
| **Langage** | Kotlin (Spring Boot) |
| **Étoiles GitHub** | 30 ⭐ |
| **Dernière MAJ** | 2025-10 |
| **Catégorie** | [[cat-books\|Books]] |

## Description

Jelu (de l'auteur, basé sur *Jelu* en espéranto) est une **plateforme de lecture sociale** écrite en **Kotlin / Spring Boot**, conçue pour self-héberger un véritable *Goodreads* personnel et **fédéré**. C'est l'une des rares alternatives à supporter nativement **ActivityPub**, ce qui lui permet d'interagir avec BookWyrm, Mastodon, Pleroma et le reste du fediverse littéraire.

L'interface propose un **catalogue de livres** enrichi par les métadonnées (Google Books, OpenLibrary), un **journal de lectures** (lu, en cours, à lire, abandonné), des **critiques** (markup simple), des **listes** thématiques, des **citations** partageables, et un **flux social** des activités des comptes que vous suivez. Chaque action (note, critique, ajout) peut être **publiée en ActivityPub** sur votre timeline Mastodon.

Côté technique : **Spring Boot 3**, base **PostgreSQL**, frontend **Vue.js** servi depuis le JAR, **OAuth2** pour la connexion via Mastodon, **WebSocket** pour les notifications temps réel, et **Docker** prêt à l'emploi. Le code est modulaire et bien testé.

**Points forts** : federation ActivityPub (rare pour une app livres), moderne (Kotlin), API REST documentée, déploiement simple, respect de la vie privée.

**Points faibles** : pas d'application mobile native, communauté encore petite (~30 étoiles), pas de lecteur EPUB intégré, l'instance solo reste un point de friction pour découvrir d'autres lecteurs (sauf via fediverse).

## Installation

### Via Docker (recommandé)

L'image officielle est publiée sur `ghcr.io` :

```yaml
# docker-compose.yml
services:
  jelu:
    image: ghcr.io/bachman/jelu:latest
    container_name: jelu
    restart: unless-stopped
    environment:
      - JELU_DB_URL=jdbc:postgresql://db:5432/jelu
      - JELU_DB_USERNAME=jelu
      - JELU_DB_PASSWORD=change-me-strong
      - JELU_BASE_URL=https://jelu.example.com
      - JELU_ACTIVITYPUB_ENABLED=true
      - JELU_OAUTH_ENABLED=true
      - TZ=Europe/Paris
    volumes:
      - ./data:/app/data
      - ./config:/app/config
    ports:
      - "8089:8080"
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: jelu
      POSTGRES_USER: jelu
      POSTGRES_PASSWORD: change-me-strong
    volumes:
      - jelu_db:/var/lib/postgresql/data

volumes:
  jelu_db:
```

### Installation manuelle (JAR)

```bash
# Cloner et compiler
git clone https://github.com/bachman/jelu.git
cd jelu
./gradlew bootJar

# Lancer
java -jar build/libs/jelu-*.jar \
  --spring.datasource.url=jdbc:postgresql://localhost:5432/jelu \
  --spring.datasource.username=jelu \
  --spring.datasource.password=changeme
```

Prérequis : **JDK 17+**, **PostgreSQL 13+**, **2 Go de RAM** minimum.

## Configuration

1. Premier lancement : accéder à `http://localhost:8089`, créer le compte admin.
2. Paramétrer **JELU_BASE_URL** (URL publique HTTPS), **JELU_ACTIVITYPUB_ENABLED** (`true`), **JELU_OAUTH_ENABLED** (`true`).
3. Configurer le **reverse-proxy** (Caddy/Nginx) avec HTTPS et WebSocket (`/ws`).
4. (Optionnel) Activer les **sources de métadonnées** : Google Books, OpenLibrary.
5. Pour la **federation ActivityPub** : vérifier que le port 443/80 est joignable depuis Internet et que le fichier `/.well-known/host-meta` est servi correctement.

## Alternatives

### Open source
- [[app-bookwyrm]] — Référence fediverse livres, plus mature
- [[app-neodb]] — Catalogue social type Letterboxd pour livres
- [[app-mastodon]] — Pour la partie microblogage généraliste
- [[app-funkwhale]] — Federation audio (autre type de média)
- **OpenReads** — Suivi local sans réseau social

### Propriétaires
- **Goodreads** — Le géant Amazon, tracking publicitaire
- **StoryGraph** — Moderne, freemium, pas self-hostable
- **Babelio** — Francophone, propriétaire

## Sécurité

- ✅ **Authentification** : email + mot de passe (bcrypt), OAuth2 (Mastodon)
- ✅ **HTTPS** obligatoire (HSTS)
- ✅ **CSRF** + **CORS** configurables
- ✅ **Modération** : blocage de comptes, signalements
- ⚠️ **Activité ActivityPub** : un compte public attire les bots Mastodon
- ⚠️ **Sauvegardes** : `pg_dump` régulier de la base (volume `jelu_db`)
- ⚠️ **Pas de 2FA** natif — coupler avec Authelia/Authentik

## Ressources

- [Dépôt GitHub](https://github.com/bachman/jelu)
- [Wiki / Documentation](https://github.com/bachman/jelu/wiki)
- [selfh.st — Books](https://selfh.st/apps/?tag=Books)

## Pages Liées

- [[cat-books]] — Catégorie parente
- [[app-bookwyrm]] — Alternative fediverse plus mature
- [[app-neodb]] — Catalogue social type Letterboxd
- [[recettes-docker-compose]] — Templates Docker
- [[app-caddy]] — Reverse-proxy HTTPS
