jina-ai/reader : préfixer une URL pour la rendre lisible par un LLM
Convert any URL to an LLM-friendly input with a simple prefix https://r.jina.ai/
En bref
- De quoi s’agit-il ?
- Le dépôt publie la branche open source derrière r.jina.ai et s.jina.ai : un proxy qui convertit une page, un PDF ou un document Office en markdown, plus une recherche web qui va chercher le contenu des cinq premiers résultats. La version publique tourne sans la couche de stockage MongoDB du SaaS, ce qui change ce qu'on peut réellement auto-héberger.
- À qui s’adresse-t-il ?
- À adopter si vous voulez un service de conversion URL vers markdown que vous pouvez lancer avec docker compose, ou si vous acceptez de dépendre de r.jina.ai et s.jina.ai avec leurs limites de débit. À éviter si votre cas d'usage exige la couche de stockage MongoDB du SaaS, absente de cette branche, ou si vous comptez sur s.jina.ai pour de la recherche en direct sans quota.
- Puis-je l’utiliser commercialement ?
- Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 117 jours.
- En quel langage est-il écrit ?
- Principalement TypeScript, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Le problème concret : du HTML brut dans un contexte de modèle
Un agent ou un pipeline RAG qui reçoit une page web telle quelle hérite de tout ce que la page contient en trop : navigation, scripts, styles, bandeaux de cookies, pieds de page. Le README part du principe que vos LLM méritent une meilleure entrée, et le dépôt répond à deux besoins distincts. Le premier est la lecture : préfixer une URL avec https://r.jina.ai/ renvoie un texte propre. Le second est la recherche : préfixer une requête avec https://s.jina.ai/ renvoie le contenu des résultats, pas seulement leurs titres et descriptions. Le public visé est donc l'ingénieur qui construit un agent ou un index de recherche et qui ne veut pas écrire lui-même la chaîne rendu navigateur, extraction du contenu principal, sérialisation. Le dépôt est en TypeScript, sous licence Apache-2.0, et il est présenté comme la branche open source du code derrière les deux domaines publics.
Deux services, deux flux de données distincts
r.jina.ai prend une URL cible et la transforme. Selon le README, le rendu passe soit par un Chrome sans interface graphique, soit par une récupération plus légère via curl-impersonate, et Reader choisit entre les deux. Les PDF passent par PDF.js. Les documents Word, Excel et PowerPoint sont convertis via LibreOffice puis traités comme du HTML ou du PDF. Les images sont légendées par un modèle vision-langage, ce qui donne à un LLM purement texte de quoi raisonner sur ce qu'il ne voit pas. s.jina.ai fonctionne différemment : le service lance une recherche web, récupère les cinq premiers résultats, visite chaque URL et leur applique la mécanique de r.jina.ai. C'est la différence que le README met en avant face aux fonctions de recherche des frameworks d'agents, qui renvoient souvent titre, URL et description issus de l'API du moteur, en laissant le soin de récupérer le contenu à l'appelant. Ici, le contenu des cinq pages est déjà là, ce qui évite d'avoir à gérer rendu, blocage et JavaScript côté client.
Le format de sortie se pilote par en-tête, pas par paramètre d'URL
L'API s'utilise avec des en-têtes de requête. Le README cite x-respond-with, dont les valeurs documentées sont markdown (sans passer par readability), html (documentElement.outerHTML), text (document.body.innerText), screenshot, pageshot, frontmatter et markdown+frontmatter. La distinction entre markdown et frontmatter est utile en pratique : la réponse texte par défaut utilise un en-tête maison de type Title: / URL Source:, tandis que frontmatter le remplace par un bloc YAML délimité par des tirets triples, avec title, description et url. Un pipeline qui analyse déjà du front matter n'a pas à écrire un parseur pour le format maison. Le README précise aussi que la liste des en-têtes présentée est partielle et renvoie vers https://r.jina.ai/docs pour la surface complète, les valeurs par défaut à jour et les règles de validation, avec src/dto/crawler-options.ts comme source de vérité dans le dépôt. C'est le fichier à ouvrir en premier si vous voulez savoir ce qui est réellement accepté, plutôt que de vous fier à un exemple de README.
Lancer la branche open source : stateless par défaut, cache en option
Le point le plus important pour l'adoption est dans les notes de version. En avril 2026, la branche open source a été resynchronisée avec le code du SaaS, avec une différence explicite : la couche de stockage MongoDB est retirée. La branche oss tourne en mode stateless dès le départ, avec un cache bucket optionnel compatible MinIO/S3 via docker compose. Le README renvoie à la section Local development du dépôt pour la marche à suivre, et cette section n'est pas reproduite dans le matériel fourni, donc les commandes exactes de démarrage ne peuvent pas être citées ici. Ce qu'on peut affirmer, c'est que docker compose est le chemin prévu pour le cache bucket, et que le mode par défaut ne persiste rien. Deux exemples d'appel figurent en revanche tels quels dans le README : curl 'https://s.jina.ai/When%20was%20Jina%20AI%20founded%3F?site=jina.ai&site=github.com' pour restreindre la recherche à des sites, et curl -H 'X-Respond-With: frontmatter' 'https://r.jina.ai/https://example.com' pour obtenir du markdown avec front matter. Les documents binaires sont envoyés via le champ de corps file, ce qui couvre PDF et Office sans héberger le fichier au préalable.
Ce que la branche publique ne contient pas
La limite est annoncée sans détour : le dépôt est la branche open source, il tourne en mode stateless ou avec cache bucket, et la couche de stockage MongoDB du SaaS n'est pas incluse. Si votre besoin est de conserver un historique de lectures, de partager des résultats entre instances ou de reproduire le comportement exact du service public, cette branche ne le fournit pas telle quelle. Le cache MinIO/S3 change la donne pour les lectures répétées, mais il ne remplace pas une base de données. Autre point à surveiller : le README présente r.jina.ai comme gratuit, stable et exploitable en production, avec un renvoi vers une page de tarification pour les limites de débit. Une dépendance à un service tiers gratuit dans un pipeline critique est un choix qui se défend, à condition de connaître le plafond applicable. Le dépôt ne publie pas de chiffres de performance et aucune version n'apparaît dans les informations de release récupérées, ce qui rend difficile de juger la cadence de publication autrement que par les dates des notes de version.
Face à une chaîne de rendu maison
L'alternative évidente est d'assembler soi-même Playwright ou Puppeteer, un extracteur de contenu principal et un convertisseur HTML vers markdown. La différence n'est pas la qualité du rendu, qui dépend surtout du moteur choisi, mais le périmètre couvert. Une chaîne maison traite des pages web ; elle ne traite pas les PDF avec PDF.js, ni les fichiers Office via LibreOffice, ni les légendes d'images par un modèle vision-langage. Elle ne fournit pas non plus s.jina.ai, c'est-à-dire la recherche suivie de la visite des cinq premiers résultats. En échange, une chaîne maison ne dépend d'aucun service externe, ne connaît pas de limite de débit imposée, et vous gardez la main sur la version du navigateur et sur le comportement de rendu. Un projet qui lit surtout des pages publiques simples et qui refuse toute dépendance réseau sortante vers un tiers n'a aucune raison d'ajouter ce proxy.
Coût de maintenance et implications de licence
Le dépôt est publié sous Apache-2.0, ce qui autorise l'usage commercial et la modification, avec les obligations habituelles de conservation des mentions de licence et d'avis. Cette description n'est pas un conseil juridique : si vous redistribuez le code ou le modifiez, faites relire les termes applicables. Côté maintenance, le README indique que le projet est maintenu activement comme l'un des produits principaux de Jina AI, et l'historique montre une resynchronisation avec le code du SaaS en avril 2026, l'ajout des envois de fichiers binaires en décembre 2025 et une migration hors de Firebase en mars 2025. Cette dernière date compte pour l'exploitation : la version actuelle n'est plus une application Firebase et se déploie comme une image, ce qui est cohérent avec le chemin Docker local. En revanche, la resynchronisation périodique avec une base de code SaaS signifie que la branche publique peut bouger en bloc, et que toute personnalisation locale devra être reportée à chaque resynchronisation. Le fichier src/dto/crawler-options.ts, cité comme source de vérité pour les options, est le point d'ancrage le plus stable pour suivre ces changements.
Conclusion éditoriale
À adopter si vous voulez un service de conversion URL vers markdown que vous pouvez lancer avec docker compose, ou si vous acceptez de dépendre de r.jina.ai et s.jina.ai avec leurs limites de débit. À éviter si votre cas d'usage exige la couche de stockage MongoDB du SaaS, absente de cette branche, ou si vous comptez sur s.jina.ai pour de la recherche en direct sans quota. Avant de vous engager, lisez src/dto/crawler-options.ts pour la liste réelle des en-têtes et leurs valeurs par défaut, et vérifiez la page de tarification de r.jina.ai pour le plafond de requêtes applicable à votre usage.
Notes de la communauté