tfa52app
CurlKeep
CurlKeep
App #12/52 29 juil. 2026

CurlKeep

Colle ton cURL, garde-le, partage-le.

Présentation

CurlKeep · Colle ton cURL, garde-le, partage-le.

CurlKeep transforme un cURL en requête propre, éditable, sauvegardée et partageable par lien — sans créer de compte. Tu colles une commande cURL (celle que tu copies depuis les DevTools ou une doc d'API), l'app la parse en méthode, URL, headers, query params, body et auth dans un éditeur clair. Tu regroupes tes requêtes en collections, tu les sauvegardes, et tu obtiens un lien à partager avec ton équipe ou à retrouver toi-même plus tard. Tu peux lancer la requête et voir la réponse, réexporter vers cURL, fetch, TypeScript ou HTTPie, et importer/exporter tes collections depuis Bruno ou Postman. Zéro inscription, gratuit, open source.

Le problème

Postman et Insomnia sont devenus des usines : compte obligatoire, sync cloud payante, app lourde à installer juste pour rejouer trois requêtes. Et quand un collègue te file un cURL sur Slack, il finit noyé dans l'historique. Il n'existe pas d'outil simple, sans compte, pour transformer un cURL en requête réutilisable, l'organiser, la rejouer et la partager en un lien.

Fonctionnalités

  • Import cURL : colle une commande curl complète, elle est parsée côté navigateur en méthode, URL, headers, query params, body (JSON / form / raw) et auth. Édition dans un formulaire clair, sans toucher à la syntaxe cURL
  • Éditeur de requête : modifie chaque partie (méthode, URL, headers clé/valeur, query params, body avec coloration JSON), ajout / suppression de lignes, activation / désactivation d'un header sans le supprimer
  • Gestion de l'auth : bloc dédié gérant Bearer token, Basic, API key (header ou query param) et auth custom. L'auth est définie au niveau de la requête OU héritée de la collection, et les secrets passent par des variables pour ne jamais fuiter dans le lien partagé
  • Collections : regroupe tes requêtes dans des collections nommées, réordonne par glisser, renomme, duplique une requête. Une collection = une unité de travail et de partage
  • Sauvegarde + partage par lien unique (zéro inscription) : chaque collection a une URL publique en lecture. Lien d'édition séparé avec token UUID pour modifier sans compte
  • Run : lance la requête via un relais serveur (contourne le CORS), affiche status, temps de réponse, taille, headers et body formaté. Rate-limité et protégé contre les abus (SSRF, timeout, taille plafonnée)
  • Génération de code : régénère la requête en cURL, fetch (JS), TypeScript (typé, avec l'interface de réponse), HTTPie, wget et bash. Bouton copier par format, coloration syntaxique
  • Import / export Bruno et Postman : importe une collection Bruno (.bru) ou Postman (v2.1) et retrouve tes requêtes, dossiers, variables et auth. Export dans les deux formats pour repartir avec ses données. Aucun enfermement
  • Variables d'environnement : {{base_url}}, {{token}} définies au niveau de la collection et injectées dans les requêtes, pour ne pas hardcoder ni exposer un vrai token dans le lien partagé
  • Zéro friction : pas de compte, pas d'email. Tu arrives, tu colles, tu ranges, tu partages. Mobile-first en consultation, desktop-first en édition. États vides / erreurs / responsive gérés + bouton BuyMeACoffee

Pour qui

Devs back et full-stack, intégrateurs d'API, freelances tech, petites équipes produit. Les gens qui vivent dans les cURL au quotidien (docs Stripe, DevTools, tickets support) et qui veulent les ranger et les partager sans sortir l'artillerie Postman.

Stack

Laravel + Livewire, Alpine.js et Tailwind CSS. Le PARSE cURL et l'éditeur sont côté navigateur (JS + Alpine) — rapide, aucun aller-retour serveur pour éditer. Le RUN passe obligatoirement par un relais serveur (Laravel HTTP client / Guzzle) car le navigateur ne peut pas taper une API tierce à cause du CORS. Ce relais est la seule vraie surface de risque, à sécuriser sérieusement : (1) blocage SSRF — refuser les IP privées / loopback / metadata cloud (169.254.x, 10.x, 192.168.x, localhost), résolution DNS validée avant l'appel et re-vérifiée après redirection ; (2) rate limiting par IP + par collection ; (3) timeout court (10s), taille de réponse plafonnée (5 Mo), méthodes autorisées limitées ; (4) aucun log du body des requêtes/réponses (elles peuvent contenir des tokens). IMPORT/EXPORT : Bruno (.bru, format texte propriétaire mais simple) et Postman v2.1 (JSON). Parseurs côté serveur, mappés vers le schéma interne ; l'export régénère le format cible. Attention aux collections volumineuses : plafonner la taille du fichier importé et le nombre de requêtes. GÉNÉRATION DE CODE : templates par cible (cURL, fetch, TypeScript, HTTPie, wget, bash) ; pour TypeScript, générer aussi l'interface de la réponse à partir d'un run réel si disponible. PERSISTANCE : table collections (id public ULID, nom, edit_token UUID, variables JSON, auth JSON, created_at) + table requests (id, collection_id, méthode, url, headers JSON, query JSON, body, auth JSON, ordre). Les variables et secrets ne sont JAMAIS rendus dans le lien de lecture seule. Même codebase hébergé ou self-hosted (tout par variables d'env), repo public dès le lancement. Zéro coût d'API externe. ATTENTION CHARGE : le périmètre a été élargi (import/export + génération de code + auth étendue) sans rien retirer. Le Run et l'import/export sont les deux gros morceaux ; les attaquer tôt dans la semaine.