Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
Rust 95%
CSS 4%
Just 1%
README.md
Vibe Atmosphere RSS Reader #
Lecteur RSS qui se connecte avec votre identité AT Protocol (Bluesky). Sans backend applicatif : l'application (web, desktop, mobile) parle directement à votre PDS. Les abonnements sont stockés sur votre PDS : portables et interopérables.
Architecture #
app/— client Dioxus 0.7 en Rust, compilé pour web (wasm), Linux desktop, macOS, Windows et Android.- Pas de backend applicatif. Le client effectue lui-même le flow OAuth
d'ATProto (PKCE + DPoP avec une clé ES256 locale) puis lit/écrit les
abonnements via XRPC sur le PDS de l'utilisateur (collection
at.glean.subscription, compatible avec le lecteur Glean). Les articles sont récupérés depuis les flux RSS/Atom : requête directe en natif, et via une fonction serveur du serveur Dioxus qui héberge l'app sur le web (les navigateurs bloquent la lecture cross-origin des flux sans en-têtes CORS). Le HTML est nettoyé côté client (ammonia). L'état « lu / non lu » reste local (IndexedDB sur le web, fichier JSON en natif).
Déclaration OAuth par plateforme #
- Desktop / Android : client « loopback » du profil atproto —
client_id = http://localhost, callback sur un listener éphémèrehttp://127.0.0.1:<port>/callback. Aucune infrastructure. - Web : le
client_iddoit être une URL HTTPS publique qui sert un document de métadonnées. Le serveur fullstack expose ce document sur/client-metadata.json, généré à partir de la variable d'environnementVIBE_APP_ORIGIN(l'origine publique du déploiement, ex.https://mon-app.example.com). Définissez-la au lancement du binaireserverproduit parjust build-web— aucun rebuild nécessaire pour changer d'origine.
Note : en développement web local (
dx serve), les PDS publics ne peuvent pas récupérer vos métadonnées client ; testez le flow web après déploiement, ou utilisez le build desktop.
Prérequis #
- Rust stable + cible
wasm32-unknown-unknown - dx CLI
- Pour le desktop Linux :
webkit2gtk-4.1,gtk3,libsoup - Pour Android : Android SDK/NDK + cibles Rust correspondantes
Commandes #
cd app
# Vérifications rapides sans build complet
cargo check --features desktop
cargo check --target wasm32-unknown-unknown --features web
cargo test --features desktop
# web (wasm) — build fullstack : déploie en exécutant le binaire `server`
# produit (il sert l'app wasm et télécharge les flux côté serveur)
dx build --platform web --fullstack
# desktop Linux
dx build --platform desktop # ou : cargo run --features desktop
# Android (nécessite le NDK configuré)
just build-android
Connexion (OAuth ATProto, sans backend) #
- Saisir son handle dans l'écran de connexion.
- L'app résout handle → DID → PDS → serveur d'autorisation, puis pousse une requête d'autorisation (PAR).
- Le navigateur s'ouvre sur la page d'autorisation du PDS.
- Au retour (reload sur le web, listener loopback en natif), l'échange de code se fait en DPoP et la session est stockée localement.
Les jetons sont rafraîchis automatiquement ; la déconnexion révoque le jeton côté serveur d'autorisation quand c'est possible.