Une extension Chrome peut tenir dans quatre fichiers et quelques dizaines de lignes de JavaScript. Avec Cursor, sa première version devient accessible en une séance de travail, même sans maîtriser tout le langage.
Nous avons retenu un cas concret : SauveLiens, un petit outil qui mémorise les pages ouvertes dans le navigateur, sans compte ni serveur. Le parcours tient dans un planning indicatif de 60 minutes, depuis le prompt jusqu’au ZIP prêt à soumettre. Il faut cependant distinguer deux chronomètres : celui du développement, que l’on peut accélérer, et celui de la validation par le Chrome Web Store, que Cursor ne contrôle pas. Voici les fichiers, les vérifications et les pièges qui font la différence entre une démo et une extension distribuable.
Trois points clés à retenir:
- En moins d’une heure, une extension simple peut être codée, chargée et testée localement, si les outils sont déjà installés.
- Manifest V3, permissions minimales et tests dans Chrome restent indispensables : l’IA ne garantit pas un programme fonctionnel.
- Soumettre un ZIP n’équivaut pas à publier : Google doit encore examiner l’extension.
La promesse des 60 minutes fonctionne à une condition
Ne demandez pas à Cursor de fabriquer un mini-SaaS. Pour tenir le délai, il faut une extension locale, une seule fonction, aucune authentification et aucun service extérieur. SauveLiens mémorise l’onglet actif dans une liste personnelle. Chaque entrée contient un titre, une adresse et un bouton de suppression. Le résultat est modeste, mais vérifiable : un clic enregistre une page, un autre permet de la retrouver.
Ce cadrage compte davantage que le modèle IA choisi. Traduire des pages, appeler une API payante ou synchroniser des données ajouterait des autorisations et des risques. Notre exemple évite ces complications. Le chronomètre reste toutefois un scénario indicatif, pas un test de performance mesuré. Cursor et Chrome doivent être installés. Pour soumettre dans l’heure, le compte développeur et les éléments de la fiche doivent aussi être prêts.
| Temps indicatif | Étape | Résultat attendu |
| 0–5 min | Définir l’idée et les limites | Une fonction clairement décrite |
| 5–25 min | Générer les fichiers avec Cursor | Manifeste et popup créés |
| 25–40 min | Charger et tester dans Chrome | Enregistrement, ouverture et suppression vérifiés |
| 40–55 min | Corriger et préparer le ZIP | Archive et fiche prêtes |
| 55–60 min | Soumettre pour examen | Envoi effectué, sous réserve d’un compte déjà opérationnel |
Même respecté, ce planning ne garantit pas l’approbation. Le temps de revue appartient à Google, pas à Cursor.
Avant de coder, fixez les limites de l’extension
Ouvrez Cursor, créez un dossier vide nommé sauveliens, puis lancez le mode Agent. Il peut explorer un projet, modifier des fichiers et exécuter des commandes. Cela accélère le travail, sans prouver que le résultat fonctionne. Chrome servira de juge.
Inutile d’imposer React, une base SQLite ou un outil de compilation. HTML, CSS et JavaScript natifs suffisent. Le navigateur charge directement les fichiers, sans serveur de développement. La méthode diffère de la création d’une application web avec Cursor : une extension dépend aussi d’un manifeste et de règles de distribution propres à Google.
Le prompt à transmettre à Cursor
Une demande vague comme « crée-moi une extension pratique » laisse trop de liberté à l’agent. Elle favorise les fonctions inutiles, les dépendances superflues et parfois des permissions disproportionnées. Utilisez plutôt une consigne précise :
Crée une extension Chrome Manifest V3 nommée SauveLiens.
Objectif : enregistrer l’URL et le titre de l’onglet actif,
afficher les liens mémorisés, les rouvrir et les supprimer.
Interface popup en français, en HTML, CSS et JavaScript natifs.
Utilise chrome.storage.local, sans serveur, CDN, tracker ni API.
Permissions limitées à activeTab et storage.
Accepte uniquement les URL http et https.
Crée manifest.json, popup.html, popup.css, popup.js,
ainsi que des icônes PNG de 16, 48 et 128 pixels.
Prévois les erreurs, les doublons et les tests manuels.
Ce prompt fixe un comportement observable et les fichiers attendus. Si vous répétez ce type de projet, les Cursor Rules permettent de conserver ces contraintes sans les ressaisir à chaque nouvelle demande. Relisez les changements avant de les accepter.
Les quatre fichiers qui transforment une idée en extension
Toute extension commence par un manifest.json à la racine du dossier. Il déclare son identité, son interface et ses permissions. Les nouvelles extensions destinées au magasin de Google utilisent Manifest V3. Pour SauveLiens, voici le noyau de la configuration ; les chemins d’icônes doivent correspondre à des fichiers existants.
{
« manifest_version »: 3,
« name »: « SauveLiens – favoris rapides »,
« version »: « 1.0.0 »,
« description »: « Enregistrez vos pages dans Chrome, sans compte. »,
« permissions »: [« activeTab », « storage »],
« action »: { « default_popup »: « popup.html » },
« icons »: {
« 16 »: « icons/icon16.png »,
« 48 »: « icons/icon48.png »,
« 128 »: « icons/icon128.png »
}
}
La permission activeTab donne un accès temporaire à l’onglet lorsque l’utilisateur déclenche l’extension. Elle évite une autorisation permanente sur tous les sites. storage permet de conserver la liste grâce à chrome.storage.local. Pour ce scénario, ni l’historique complet ni la permission générale tabs ne sont nécessaires. Le stockage local ne synchronise pas les favoris entre appareils : les données disparaissent si l’extension est désinstallée. N’y conservez donc aucun secret. Cette simplicité est un choix assumé pour le prototype, pas une solution universelle de sauvegarde.
popup.html définit la fenêtre ouverte depuis l’icône : un bouton d’enregistrement, une liste et des messages de statut. popup.css gère l’apparence. Enfin, popup.js interroge l’onglet actif avec chrome.tabs.query(), filtre les adresses http ou https, puis ajoute ou retire les entrées. Il doit aussi éviter les doublons. Pour afficher les titres récupérés, mieux vaut employer textContent plutôt qu’injecter du HTML non contrôlé. Vérifiez les URL avant de les rouvrir. Le code généré ne doit jamais traiter les informations collectées comme des instructions exécutables.
Ce que l’IA doit montrer avant que vous acceptiez le code
Demandez à Agent un récapitulatif des fichiers et autorisations. Ouvrez vous-même le manifeste. Vérifiez les chemins des icônes, l’absence de scripts distants et les appels réseau éventuels. Le Chrome Web Store interdit le code JavaScript hébergé à distance dans les extensions.
L’exemple SauveLiens fourni avec le dossier comporte les fichiers nécessaires et a été vérifié sur sa structure et sa syntaxe. Ce contrôle ne remplace pas un test dans Chrome. Une extension peut charger correctement puis échouer au premier clic.
Charger l’extension dans Chrome prend quelques minutes
Saisissez chrome://extensions dans la barre d’adresse, activez le mode développeur puis cliquez sur « Charger l’extension non empaquetée ». Choisissez le dossier qui contient directement manifest.json. Épinglez l’extension et ouvrez une page web ordinaire. Google décrit cette installation dans son tutoriel Hello World.
Le test doit rester concret. Ouvrez une page HTTPS, cliquez sur « Enregistrer cet onglet », fermez le popup puis rouvrez-le : le lien doit persister. Enregistrez à nouveau la même page ; elle ne doit pas apparaître deux fois. Cliquez sur le lien pour vérifier sa réouverture. Supprimez-le enfin et confirmez le retour à une liste vide. Vous aurez contrôlé la lecture de l’onglet, le stockage et les principales actions.
Testez aussi l’échec. Une page chrome://settings ne doit pas être enregistrée. Une adresse non exploitable doit déclencher un message compréhensible, pas faire planter l’interface. Pour diagnostiquer une erreur, cliquez avec le bouton droit dans le popup, choisissez « Inspecter » et consultez la console. Après une modification du code, rechargez l’extension depuis chrome://extensions. Répétez ensuite les tests réussis avant la correction. Il est fréquent qu’un changement dans la gestion des doublons modifie aussi l’affichage de la liste ; seule cette seconde passe révèle une régression.
Si un bug survient, fournissez son message exact à Cursor. Demandez une correction ciblée : « Corrige cette exception sans modifier les permissions ni ajouter de dépendances ». Une réécriture générale risque de casser les fonctions déjà validées. Réalisez ensuite une capture d’écran réelle du popup : elle servira à présenter l’extension sur le magasin.
Le passage délicat de l’extension locale au ZIP de publication
Une extension qui fonctionne sur un ordinateur n’est pas automatiquement distribuable. Vérifiez son nom, sa description, sa version et ses icônes. Pour la fiche du magasin, Google exige une icône PNG de 128 × 128 pixels et au moins une capture d’écran. Les formats recommandés pour celle-ci sont 1280 × 800 ou 640 × 400 pixels, selon la documentation officielle.
Créez un ZIP contenant directement manifest.json, popup.html, popup.css, popup.js et le dossier icons. N’ajoutez pas de dossier parent entre la racine de l’archive et le manifeste. Retirez les fichiers temporaires, les journaux et toute donnée secrète. Contrôlez encore les chemins : une icône oubliée peut empêcher l’installation. Ne confondez pas illustration promotionnelle et capture d’écran : la première peut être créée pour communiquer, tandis que la seconde doit refléter le véritable fonctionnement du produit. Une image séduisante qui montre une interface inexistante induirait les utilisateurs en erreur.
Le stockage local ne dispense pas des obligations de confidentialité. Les URL et titres enregistrés peuvent constituer des données utilisateur. Dans ce cas, les règles du Chrome Web Store imposent une politique de confidentialité publique et à jour. Elle doit expliquer la collecte, l’utilisation et les éventuels partages. Pour SauveLiens, décrivez précisément que les liens restent sur l’appareil et ne sont pas envoyés au développeur. Les déclarations dans le tableau de bord doivent correspondre au code réel.
Soumettre dans l’heure est possible, être publié n’est pas garanti
L’envoi passe par le tableau de bord du Chrome Web Store. Il faut un compte développeur enregistré et des frais d’inscription uniques déjà réglés. Un nouveau compte peut nécessiter des démarches supplémentaires. Sans ces prérequis, mieux vaut sortir la soumission du planning de 60 minutes. Dans le tableau de bord, créez un élément, importez le ZIP puis remplissez les rubriques demandées : présentation, catégorie, captures, langue, assistance et confidentialité. Justifiez les permissions : activeTab pour lire l’onglet après un clic ; storage pour garder les favoris localement. Définissez la visibilité et soumettez l’ensemble à l’examen de Google. N’annoncez aucune fonction d’IA : SauveLiens est un gestionnaire de liens, pas un assistant intelligent.
La nuance est décisive : « Soumettre pour examen » ne signifie pas « publié ». D’après le processus officiel de validation, la plupart des extensions sont examinées en quelques jours ; certains dossiers prennent plusieurs semaines. Une demande de corrections ou un refus peut encore retarder la sortie. L’approbation ne peut donc pas figurer parmi les résultats garantis de cette heure de travail.
La vraie prouesse de Cursor repose sur le vibe coding, cette méthode qui consiste à décrire son projet en langage naturel. Elle accélère le passage d’une idée à un outil testable, sans supprimer les contrôles techniques ni les obligations du magasin. En soixante minutes, vous pouvez disposer d’un prototype et, avec une fiche déjà préparée, avoir soumis son ZIP. La date à laquelle les internautes pourront l’installer restera celle décidée par Google.
- Partager l'article :
