Files
2026-06-09 18:40:21 +02:00

4.9 KiB

title, created, updated, type, tags, confidence, contested, sources
title created updated type tags confidence contested sources
PinePods 2026-06-07 2026-06-07 app
catalogue
media-streaming
podcasts
multi-user
rust
high false
https://selfh.st/apps/?tag=Media+Streaming
https://github.com/madeofpendletonwool/PinePods

🎬 PinePods

Serveur de podcasts multi-utilisateurs avec synchronisation entre clients, gestion fine des épisodes écoutés et découverte par thème.

📋 Informations Générales

Attribut Valeur
Nom PinePods
Slug app-pinepods
Description Plateforme de podcasts self-hosted, multi-utilisateurs, compatible clients iOS/Android/web
Site officiel https://pinepods.online/
Repository https://github.com/madeofpendletonwool/PinePods
Stars 878
Licence MIT
Langage principal Rust (backend) + Svelte (frontend)
Catégorie Media Streaming
Tags [catalogue, media-streaming, podcasts, multi-user, rust]

📝 Description

PinePods est un gestionnaire de podcasts moderne pensé pour un usage familial ou de petite équipe. Contrairement à des solutions mono-utilisateur comme app-casteros ou app-antennapod (qui est Android-only), PinePods gère nativement plusieurs comptes, conserve l'historique d'écoute par utilisateur et synchronise la position de lecture entre tous les clients connectés (web, iOS, Android, CLI).

L'indexation est centralisée : les métadonnées, la position d'écoute, les épisodes téléchargés et les abonnements sont stockés dans une base PostgreSQL. Le backend en Rust assure des temps de réponse rapides et une empreinte mémoire modeste, ce qui rend l'application parfaitement adaptée à un self-hosting sur Raspberry Pi 4/5 ou un mini-PC.

Points forts : interface agréable, recherche via iTunes et gpodder.net, génération RSS, marque-pages sur épisode, support des podcasts avec chapitres. Limites : la gestion de très grosses bibliothèques (> 5 000 abonnements) peut nécessiter quelques ajustements d'index PostgreSQL.

🚀 Installation

Via Docker (recommandé)

# docker-compose.yml
version: "3.8"

services:
  pinepods-db:
    image: postgres:16-alpine
    container_name: pinepods-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: pinepods
      POSTGRES_PASSWORD: changeme
      POSTGRES_DB: pinepods
    volumes:
      - ./db:/var/lib/postgresql/data

  pinepods-api:
    image: madeofpendletonwool/pinepods-api:latest
    container_name: pinepods-api
    restart: unless-stopped
    depends_on:
      - pinepods-db
    environment:
      DATABASE_URL: postgres://pinepods:changeme@pinepods-db:5432/pinepods
      JWT_SECRET: changez-moi-en-production
    ports:
      - "8013:8013"

  pinepods-web:
    image: madeofpendletonwool/pinepods-web:latest
    container_name: pinepods-web
    restart: unless-stopped
    depends_on:
      - pinepods-api
    ports:
      - "8014:8014"

Installation manuelle

Build Rust depuis les sources : cargo build --release, puis lancer l'API et servir le frontend Svelte. Réservé aux utilisateurs avancés ; la voie Docker est largement privilégiée.

⚙️ Configuration

  • Compte admin : créé au premier lancement via l'interface web (/setup).
  • Reverse proxy : configurer app-caddy ou app-traefik pour exposer en HTTPS sur un sous-domaine dédié.
  • Sauvegarde : ne pas oublier de sauvegarder le volume db/ (PostgreSQL) en plus des fichiers média.
  • Clients mobiles : utiliser les apps PinePods iOS / Android officielles (F-Droid et Play Store).
  • Synchronisation gPodder : activer le module correspondant pour conserver la compatibilité avec d'autres clients (AntennaPod).

🔗 Alternatives

  • Funkwhale — Serveur audio/podcasts ActivityPub, plus orienté musique.
  • Castopod — Plateforme podcasting avec ActivityPub, focalisée sur la publication.
  • Gpodder — Serveur gPodder standalone, plus minimaliste.
  • AntennaPod — Client Android uniquement, pas de serveur.

🔒 Sécurité

  • Changer JWT_SECRET et le mot de passe PostgreSQL avant toute exposition réseau.
  • Activer HTTPS (obligatoire pour la géolocalisation des clients mobiles récents).
  • Limiter l'inscription publique (allow_registration: false dans la conf).
  • Mettre à jour régulièrement ; le projet est en développement actif.

📚 Ressources

🔗 Pages Liées