Nouveautés
Ce qui est livré chez Canner.
Nous sommes en ligne depuis le début mai 2026 et livrons presque chaque jour. La liste ci-dessous est tenue à la main — extraite des déploiements en production, pas d'un flux automatisé. Abonnement RSS à venir. D'ici là, revenez nous voir, ou suivez hello@canner.ca.
Envie de savoir ce qui s'en vient? Consultez la feuille de route pour ce qui est priorisé pour la prochaine livraison.
Une page Journaux plus simple, des courriels d'erreur à votre demande et des onglets plus nets
- La page Journaux compte maintenant deux vues : Requêtes et Journaux de l'app. Les erreurs sont simplement les requêtes en échec (choisissez Erreurs dans Requêtes), et la tuile Erreurs serveur de la vue d'ensemble ou une barre du graphique ouvre les Requêtes de cette période. Le direct et la vue Déploiements disparaissent.
- Les courriels d'erreur sont maintenant désactivés tant que vous ne les demandez pas. Chaque app en reçoit un seul, pour la première erreur captée, avec un lien; ouvrez-la et activez « Me prévenir par courriel des nouvelles erreurs » pour être prévenu ensuite des nouvelles erreurs et des réapparitions. Une erreur ouverte montre aussi son historique sur la période d'où vous venez, au lieu des 7 derniers jours.
- Une période réglable avec précision. Le graphique Trafic et mémoire et la page Journaux partagent maintenant un même contrôle : la dernière heure, 6 ou 24 heures, 7, 30 ou 90 jours, ou un Du et un Au personnalisés. Un clic sur une barre remplit son Du et son Au dans la page Journaux au lieu de deviner un filtre, et une barre plus ancienne que les 7 jours de requêtes conservées n'ouvre plus une liste vide.
- Le graphique peut maintenant tracer des barres de 1, 5 et 15 minutes pour tout ce qui se trouve dans les 7 derniers jours, et ne propose que les largeurs de barre qui donnent un graphique lisible pour la période choisie (entre 7 et 400 barres), en s'ouvrant sur celle qui en donne environ 48.
- Les onglets du tableau de bord partagent un même soulignement net (l'ancien se recourbait aux extrémités), y compris sur les pages de base de données.
Erreurs, journaux et historique des déploiements, et un graphique Trafic et mémoire avec chaque minute de la dernière semaine
- Les erreurs sont regroupées selon ce qui les corrigerait et rattachées au déploiement fautif. La page Journaux d'un projet compte maintenant Erreurs, Requêtes, Journaux de l'app et Déploiements à côté du direct : voyez dans quel déploiement une erreur est apparue, avec son commit, ce qui a changé et si elle est revenue depuis. Réglez ou ignorez une erreur; une erreur réglée qui se reproduit est signalée comme une réapparition. Les erreurs sont conservées 90 jours, les requêtes et la sortie de l'app 7 jours, sur tous les forfaits.
- Des courriels pour une nouvelle erreur juste après un déploiement et pour une réapparition, une fois chacun et au plus un par heure et par app. Un « Expliquer cette erreur » facultatif interroge un modèle qui fonctionne sur le serveur même de Canner : vos journaux ne le quittent pas, et les citations fournies sont vérifiées dans vos vrais journaux. Les agents peuvent tout lire grâce à six nouveaux outils MCP.
- Le graphique de trafic devient Trafic et mémoire : les requêtes au-dessus de la ligne, la mémoire en dessous, avec les builds et les plantages marqués. Choisissez la période et la largeur des barres, alternez entre requêtes et visiteurs, masquez n'importe quelle série, cliquez sur une barre pour voir ses erreurs et téléchargez les données en CSV ou en Excel. Le trafic et la mémoire sont maintenant captés chaque minute pour les 7 derniers jours (l'historique à l'heure est conservé comme avant), et la latence est enregistrée sous forme d'histogramme afin que les percentiles soient justes à toute largeur de barre.
- Une commande de compilation ou de mise en production qui s'arrête à une question oui/non ne retient plus le déploiement pendant 15 minutes. Après environ 20 secondes de silence devant une invite comme « Would you like to proceed? (y/N) », la commande est arrêtée et le déploiement échoue en affichant la question elle-même et ce qu'il faut ajouter (son option non interactive, ou une réponse envoyée par un tube). Enregistrer une commande connue pour poser une question, comme prisma migrate reset, artisan migrate ou collectstatic, affiche maintenant un avertissement avec l'option à utiliser.
- Pendant la compilation d'une version, le haut à droite de la vue d'ensemble du projet affiche la compilation : sa phase, sa durée et la dernière ligne de son journal. Le statut à côté du nom du projet indique En file, Compilation ou Déploiement au lieu de En ligne pendant ce temps. Si une commande de mise en production s'arrête à une question oui/non, la question et les boutons Oui / Non s'y affichent aussi.
La mise hors ligne tient, une portée de variable « exécution seulement » et les migrations par la commande de mise en production
- La mise hors ligne tient maintenant. Un projet mis hors ligne ne peut être redémarré que par un déploiement : ni par un visiteur, ni par une vérification de domaine, ni par un redémarrage du serveur. Son adresse répond 503 (« actuellement arrêté ») au lieu de 404. Le tableau de bord l’indique aussi lorsque la demande est refusée pour cause de trop nombreuses requêtes, au lieu d’échouer en silence.
- Les portées de variables disent ce qu’elles font. Une variable de production n’atteint plus que les déploiements de production; les aperçus reçoivent les variables à portée toutes ou aperçu. Les variables existantes se comportent comme avant (elles sont maintenant à portée toutes). Nouveau : exécution seulement, pour l’application en marche en production, jamais un build, la commande de mise en production ni un aperçu.
- La connexion propriétaire pour les migrations (DATABASE_URL_MIGRATE) va maintenant à la commande de mise en production seulement, pas aux builds, et c’est une connexion de session : les outils qui utilisent des verrous consultatifs fonctionnent. Elle a son propre interrupteur dans les paramètres d’accès de la base.
- La vue d’ensemble du projet a un interrupteur de retour arrière automatique. Désactivé, un déploiement qui ne démarre pas reste arrêté au lieu de reconstruire le dernier bon commit.
Les domaines d’envoi se vérifient d’eux-mêmes, et on peut en retirer ou en changer un
- Les domaines d’envoi de Canner Auth sont maintenant vérifiés automatiquement : toutes les quelques minutes pendant la première demi-heure, puis environ trois fois par heure, pendant 24 heures. Vous recevez un courriel lorsque le domaine est vérifié, ou un seul courriel listant les enregistrements encore manquants s’il ne l’est jamais. Vérifier de nouveau fonctionne toujours et rouvre 24 heures après que Canner a abandonné.
- Un domaine d’envoi peut être retiré de l’application, ce qui permet aussi de passer à un autre domaine. Une configuration inachevée est libérée chez notre fournisseur de courriel, de sorte que le nom ne reste pas bloqué.
- Le tableau des enregistrements DNS indique la fonction de chaque enregistrement (DKIM ou SPF) et la priorité MX, qui manquait, avec un bouton Copier sur chaque nom et chaque valeur. La configuration précise dès le départ qu’il faudra ajouter des enregistrements DNS, et les conseils de dépannage ne supposent plus un fournisseur DNS en particulier. Le guide comporte une section complète Envoyer depuis votre propre domaine.
- Le renvoi du courriel de vérification du compte indique maintenant « Trop de demandes, veuillez patienter » lorsque vous l’avez demandé trop de fois en une heure, au lieu d’un bouton qui disait seulement « Réessayer ».
Des clés d’accès pour tous les membres, l’expiration des jetons d’API et l’accès de supervision pour vos rôles de base de données
- Un administrateur d’organisation peut exiger une clé d’accès de chaque membre (Organisation, Sécurité de la connexion). L’option est désactivée par défaut. Tant qu’elle est activée, les membres n’accèdent à l’organisation qu’après s’être connectés avec une clé d’accès, et ceux qui n’en ont pas doivent en ajouter une. Les jetons d’API ne sont pas touchés.
- Les jetons d’API peuvent expirer. Les nouveaux jetons créés dans le tableau de bord durent de 30 jours à un an, et l’API accepte expires_in_days jusqu’à 365. Un jeton expiré cesse de fonctionner comme un jeton révoqué.
- Sur une instance dédiée, les rôles que le propriétaire de votre base crée en SQL apparaissent maintenant dans la liste des rôles, et on peut accorder pg_monitor (ou pg_read_all_stats, pg_read_all_settings, pg_stat_scan_tables) à n’importe quel rôle, ce que le propriétaire d’une base ne peut pas faire seul.
- La grille tarifaire n’indique plus les rôles nommés sur tous les forfaits : ils font partie de l’instance dédiée, comme le dit la documentation.
- Les jetons d’API peuvent être limités à certains projets. Un jeton limité n’agit que dans les projets choisis (aucun autre projet, ni facturation, domaines, membres ou jetons, ni MCP); le jeton à l’échelle de l’organisation reste le choix par défaut. L’expiration est facultative aussi, avec un an par défaut.
- Une commande de démarrage par projet : Paramètres → Compilation permet maintenant de remplacer la commande détectée par Canner (votre script start) par la vôtre, sur une seule ligne, exécutée depuis le répertoire de votre application.
Des fichiers supprimés qu’on peut ramener, et une jauge de stockage sur la page Fichiers
- La page Fichiers a un onglet Supprimés. Un fichier supprimé, ou l’ancienne version d’un fichier écrasé, peut être restauré pendant 30 jours (de 1 à 365, réglable par projet, jamais moins que les fenêtres de sauvegarde des bases du projet), ou supprimé définitivement pour libérer l’espace tout de suite. Cela couvre aussi les fichiers que votre code écrit avec les identifiants S3.
- La jauge de stockage de la page Fichiers est maintenant la même jauge segmentée que sur les pages de bases de données, avec les fichiers et les versions supprimées ou anciennes en segments distincts.
- Sauvegardes de fichiers. Un nouvel onglet Sauvegardes sur la page Fichiers prend des sauvegardes planifiées ou à la demande des fichiers d’un projet : la liste de chaque fichier avec sa version, sa taille et son sha256, qui retient ces versions pour qu’elles ne soient pas purgées, sans stockage supplémentaire. Comparer avec maintenant, restaurer (remettre ce qui manque ou a changé, restaurer exactement, ou copier dans un dossier pour examiner d’abord), vérifier en relisant les fichiers par rapport à leur sha256, et télécharger un manifeste des fichiers à comparer aux références de fichiers de votre propre base de données. Restaurer ramène un fichier sous son propre nom : ces références continuent donc de fonctionner sans restaurer la base au même moment.
- Les sauvegardes de fichiers peuvent être copiées hors site vers votre propre seau compatible S3, les mêmes destinations que les sauvegardes de bases de données. La copie est faite de fichiers ordinaires, chaque fichier distinct stocké une seule fois selon son sha256, avec un manifeste lisible : elle survit à la perte du serveur et se lit sans Canner. Une restauration ou une vérification qui constate qu’un fichier manque ici utilise la copie hors site; supprimer une sauvegarde, ou effacer un fichier des sauvegardes, est répercuté là-bas.
Schéma et politiques : un fichier qui dit exactement ce que contient une sauvegarde
- Chaque sauvegarde enregistre maintenant son schéma et ses politiques dans un fichier JSON téléchargeable à côté d’elle : tables et colonnes, index, contraintes, sécurité au niveau des lignes, politiques, privilèges, privilèges par défaut et rôles concernés, avec le nombre de lignes et deux empreintes. Ni données ni empreintes de mot de passe : on peut donc le joindre à un dossier d’audit. Ajoutez ?compare=live dans l’API pour qu’il indique aussi en quoi la base en service diffère maintenant.
- Les restaurations d’essai sont plus strictes. Une restauration de vérification compare maintenant la copie restaurée à cet enregistrement et échoue si une table, une colonne, une politique ou un privilège n’est pas revenu. Le téléchargement d’un fichier de sauvegarde, qui ne fonctionnait pas, fonctionne maintenant.
- Les aperçus des demandes de tirage peuvent être désactivés par projet (réglages du projet, ou previews_enabled dans l’API). Un aperçu exécute le code d’une branche avec les variables d’environnement et la base de données du projet : un projet qui détient des identifiants réels ne devrait donc pas en construire. Gardez la production dans son propre projet, aperçus désactivés, et les aperçus dans un projet de préproduction avec des identifiants d’essai. Les désactiver arrête les nouveaux aperçus et déploiements de branche, et peut supprimer ceux qui sont en cours.
Des sauvegardes qui voient tout : choisissez en tant que qui elles s’exécutent
- Sur une instance dédiée, un nouveau réglage Les sauvegardes s’exécutent en tant que permet à Canner de lire vos bases en tant que superutilisateur de l’instance plutôt que propriétaire de la base. Une table dont la sécurité au niveau des lignes est forcée cache ses lignes même à son propriétaire, ce qui faisait échouer les sauvegardes exécutées par le propriétaire; le superutilisateur les lit, et il ne dépend jamais du mot de passe du propriétaire : le changer en SQL ne brise plus une sauvegarde.
- Les restaurations reviennent avec les mêmes permissions. Une sauvegarde exécutée en superutilisateur conserve vos privilèges, vos privilèges par défaut et les rôles utilisés par votre base (avec leurs empreintes de mot de passe, chiffrées) : la restaurer dans Canner, ou faire une restauration à un instant précis, remet la sécurité au niveau des lignes, les politiques et les connexions sans que vous ayez rien à fournir. Les restaurations d’essai vérifient maintenant que chaque table qui contenait des lignes en contient toujours, et vous pouvez télécharger un fichier de rôles pour restaurer sur votre propre serveur.
Sites statiques : compression et en-têtes personnalisés
- Les sites statiques sont maintenant servis compressés. Les fichiers HTML, CSS, JavaScript, JSON, SVG, cartes de source et polices TTF/OTF de plus de 1 Ko sont envoyés en Brotli ou en gzip, selon ce que le navigateur accepte. Cela couvre les sites statiques simples et le résultat du build de Vite et de projets semblables.
- En-têtes personnalisés. Ajoutez un fichier `_headers` (le format de Netlify et de Cloudflare Pages) pour définir Content-Security-Policy, X-Frame-Options, Referrer-Policy et tout autre en-tête de réponse, par chemin. Avec Vite, placez-le dans `public/_headers`.
- Les deux s'appliquent au prochain déploiement d'un site. Voir la documentation des sites statiques.
Postgres, deuxième partie : vos propres rôles, mises à niveau sur place et vérification de sécurité
- Vos rôles, vos règles. Les rôles nommés de la dernière mise à jour vont plus loin : sur une instance dédiée, le propriétaire de votre base peut maintenant créer des rôles en SQL (groupes, connexions, privilèges, politiques de sécurité au niveau des lignes), et Canner ne les suit ni ne les remet en question. Une connexion créée ainsi passe par le pooleur comme n'importe quelle autre, et vous choisissez quelle connexion votre application reçoit à la place de celle du propriétaire. Les groupes et les connexions sont dans le tableau de bord et dans `canner db roles`, avec un audit des rôles qui montre ce que chacun peut réellement faire.
- Mettez Postgres à niveau sans rien reconstruire. `canner db instance upgrade` fait passer une instance dédiée à une version majeure plus récente, sur place. Les bases, les rôles, les privilèges, les politiques et les extensions sont conservés, les chaînes de connexion ne changent pas, et si quoi que ce soit échoue, l'instance reste exactement comme elle était. La version précédente est conservée sept jours pour que vous puissiez y revenir, et la récupération à un instant précis repart d'une nouvelle fenêtre ensuite. Toutes les bases de l'instance sont hors ligne quelques minutes pendant l'opération.
- Une vérification de sécurité et de performance sur chaque base, sur tous les forfaits. Lancez `canner db check` ou ouvrez le nouveau panneau sur n'importe quelle base. Elle lit le catalogue, jamais vos données, et signale les politiques de sécurité au niveau des lignes trop permissives, les fonctions que tout le monde peut exécuter avec les droits de leur propriétaire, les vues qui contournent les règles, les clés primaires et les index manquants, et plus encore. `--strict` fait échouer l'IC en cas d'avertissement.
- Le moindre privilège en une étape. `canner db least-privilege` exécute votre application avec un rôle qui peut lire et écrire vos données, mais pas modifier le schéma ni toucher un registre de migrations, y compris celui que crée votre première migration. Le propriétaire est fourni au build seulement, sous `DATABASE_URL_MIGRATE`, pour que vos migrations s'exécutent toujours.
- Fini les devinettes sur ce qui est injecté. La page des variables d'environnement liste maintenant ce que Canner définit à partir de vos bases, avec le mot de passe masqué, et vous avertit quand une de vos propres variables est remplacée, avec un lien pour désactiver l'injection automatique.
- Petits correctifs. Les clients de base de données qui définissent `statement_timeout`, `lock_timeout` ou `idle_in_transaction_session_timeout` à la connexion passent maintenant par le pooleur; il les accepte sans les appliquer, alors définissez les délais sur le rôle. La documentation du stockage d'objets explique maintenant pourquoi `HeadBucket` renvoie 403 avec des identifiants limités à un projet et quoi utiliser à la place. MCP reçoit trois outils en lecture seule : la vérification de sécurité, l'audit des rôles et une vérification de mise à niveau (la mise à niveau elle-même reste dans le tableau de bord et la CLI). La CLI 0.5.3 contient toutes les nouvelles commandes.
- Le tout est dans le tableau de bord, la CLI (`canner db …`) et l'API. Voir les docs Bases de données Postgres.
Payez ce que vous utilisez : le forfait Studio devient des modules
- Deux forfaits en libre-service, Démarrage et Live, plus Enterprise sur devis. Tout ce que regroupait le forfait Studio est maintenant un module que vous activez seul, sans devoir sauter un palier entier pour une seule fonction.
- Nouveau module Conformité, 29 $ par mois : une entente de traitement des données signée (LPRPDE / Loi 25), une attestation de résidence des données, et le journal d'audit de votre organisation avec export. Il remplace les documents à 149 $ l'unité.
- Le tableau des tarifs montre maintenant chaque module à côté de la ligne qu'il prolonge : applis toujours actives, RAM d'application et RAM dédiée, stockage, Postgres dédié et Conformité.
Postgres, méga mise à jour : sauvegardes sous votre contrôle, récupération à un instant précis et instance dédiée
- Sauvegardes et récupération à votre façon : planifiez les sauvegardes par base, conservez-les aussi longtemps que vous voulez, copiez-les vers jusqu'à cinq seaux compatibles S3 qui vous appartiennent, examinez une restauration avant qu'elle ne touche à quoi que ce soit, et recevez des alertes pour les sauvegardes échouées ou non vérifiées. Sur une instance dédiée, restaurez n'importe quelle base à n'importe quel instant d'une fenêtre de 1 à 35 jours (récupération à un instant précis), dans une toute nouvelle base.
- Une instance Postgres dédiée par projet : votre propre processus serveur avec extensions (pgvector, PostGIS, pg_cron et plus), préréglages de charge et fenêtre de maintenance, rôles nommés, métriques, requêtes lentes et journaux, réplication logique vers vos propres abonnés, et suivi en direct d'un serveur Postgres externe pour une migration sans interruption. L'archive de récupération est chiffrée en AES-256 et peut être copiée hors site vers votre propre seau.
- Un seul groupe de stockage par organisation : la limite de votre forfait plus les blocs de 50 Go couvre les bases, les sauvegardes, l'archive de récupération, les objets et les jeux de données de l'Atelier de données. Ajouter une base ne l'augmente jamais.
- Des modules plus clairs : la nouvelle RAM d'application (4 $ le Go, mémoire groupée pour une application) s'ajoute à la RAM dédiée (19 $ le Go, garantie, le choix le plus sûr pour Postgres et l'IA). Le module de performance est retiré. Chaque achat affiche d'abord vos nouveaux totaux et le prix mensuel, et ne facture qu'à votre confirmation.
- Le tout est dans le tableau de bord, la CLI (`canner db …`), l'API et MCP. Voir les docs Bases de données Postgres et Forfaits et limites.
Des compilations ultra rapides sur la nouvelle infrastructure 2026 de Canner
- Canner tourne désormais sur du matériel dédié que nous exploitons nous-mêmes — sans couche de virtualisation partagée, sans autre locataire concurrent pour le même CPU. Chaque compilation, sur chaque forfait, en profite.
- Résultat : les compilations sont de 4 à 6,5 fois plus rapides qu'avant, sans aucun changement de votre côté — même dépôt, mêmes dépendances, mêmes commandes. Nous avons mesuré les mêmes projets avant et après la migration pour obtenir cette fourchette. Certaines compilations légères se terminent maintenant en quelques secondes.
- Chaque domaine, certificat, base de données et variable d'environnement a traversé la migration intact. L'histoire complète de la migration est à /fr/blog/vps-to-dedicated-server-migration.
- Ce qui a changé : l'infrastructure de compilation et d'hébergement de Canner est passée de serveurs VPS virtualisés et partagés à du matériel dédié utilisé exclusivement par Canner — le même type de changement d'architecture que n'importe quelle équipe peut faire pour corriger une performance de compilation inconstante, sauf que nous nous en occupons pour vous.
À noter : l'alias hérité *.app.canner.ca sera retiré le 30 septembre
- Chaque locataire recevait auparavant à la fois une URL canner.app et un alias hérité *.app.canner.ca, que l'alias soit utilisé ou non. Seuls les projets qui existaient avant la bascule de juillet 2026 (ou que nous avons confirmés individuellement) conservent désormais l'alias hérité — et il disparaît complètement pour tout le monde le 30 septembre 2026. Si vous utilisez encore une adresse *.app.canner.ca quelque part, passez à votre URL canner.app d'ici là. Les propriétaires concernés ont déjà été contactés directement par courriel.
Stockage d'objets : récupérez d'une suppression ou d'un écrasement accidentel
- Chaque compartiment de stockage d'objets conserve désormais un historique des versions. Supprimez ou écrasez un fichier par erreur, et la version précédente est conservée pendant 30 jours avant d'être nettoyée définitivement.
- La récupération à l'intérieur de cette fenêtre passe aujourd'hui par une demande de soutien, pas encore par une action en libre-service — écrivez-nous et nous restaurerons la version. Les versions conservées comptent dans votre quota de stockage, donc un compartiment très actif ne peut toujours pas croître sans limite.
Si un projet plante en boucle, on arrête d'insister et on vous prévient
- Un projet qui échoue à démarrer de façon répétée n'est plus relancé indéfiniment en arrière-plan. Après plusieurs échecs de démarrage dans une courte fenêtre, Canner arrête les tentatives, affiche aux visiteurs une page claire de « réveil » plutôt qu'une erreur brute, et signale le projet dans votre tableau de bord avec la raison.
- Redéployer règle le problème — un nouveau déploiement efface automatiquement le signalement et reprend le comportement normal. Nous envoyons aussi un courriel unique à votre compte, la première fois que cela survient, pour expliquer ce que ça signifie.
Choisissez le répertoire racine de votre monorepo au lieu de le taper
- La connexion d'un dépôt GitHub propose maintenant un sélecteur de répertoire racine rempli avec de vrais chemins candidats détectés dans votre dépôt — partout où se trouve un package.json, requirements.txt, go.mod ou marqueur de compilation semblable — plutôt qu'un champ texte vide à saisir correctement du premier coup.
- Offert à la fois lors de la connexion d'un nouveau dépôt et par la suite depuis la fiche source de l'aperçu du projet, à côté des sélecteurs de branche et de cadriciel.
La suppression de compte énumère maintenant tout ce qui sera détruit
- La suppression d'une organisation à membre unique affichait auparavant une seule phrase d'avertissement dense. Elle énumère maintenant tout ce qui l'accompagne — projets, jetons API, applications Canner Auth, commandes de conformité, jeux de données et requêtes de l'Atelier de données, tâches planifiées, votre abonnement Stripe — et précise qu'un domaine acheté est conservé, pas supprimé.
Modules de ressources — achetez exactement la capacité dont vous avez besoin
- Quatre modules à la carte s'ajoutent maintenant à votre forfait : une place d'application toujours active supplémentaire (4 $/mois), un bloc de performance (4 Go de RAM + 2 vCPU dédiés à un projet, 69 $/mois — débloque aussi les environnements ML/Rust pour ce projet), +50 Go de stockage d'objets mutualisé (5 $/mois), et des places d'équipe Studio supplémentaires (5 $/mois).
- Les blocs de performance sont assignés à un projet précis depuis sa page d'aperçu, afin que la capacité garantie aille exactement où vous en avez besoin plutôt que d'élever un plafond partagé. Les modules s'ajoutent à n'importe quel forfait payant — Démarrage affiche le même panneau en aperçu de ce que débloque une mise à niveau.
Déployez BoxLang — des applications CFML sur la JVM
- BoxLang (boxlang.io) — le langage JVM moderne compatible CFML — se déploie maintenant directement depuis votre dépôt. Un box.json, un server.json, un Application.bx/.cfc ou un gabarit .bxm/.cfm suffit à Canner pour le détecter.
- Aucune étape de compilation : le MiniServer BoxLang sert votre source et compile à la volée, les modules de box.json s'installent automatiquement depuis ForgeBox, et les en-têtes de proxy sont pris en charge pour que les sources de données et les sessions fonctionnent derrière la périphérie. S'exécute sur Java 21; forfait Live ou plus. Guide à /fr/docs/other-runtimes.
Déployez Java — Spring Boot, Maven et Gradle
- Java se déploie maintenant comme le reste. Poussez un projet Maven ou Gradle — Spring Boot compris — et Canner le détecte, compile le JAR et l'exécute. Sans Dockerfile, sans configuration.
- Le JDK est choisi d'après votre configuration de compilation : déclarez Java 17, 21 ou 25 (via maven.compiler.release, java.version ou une chaîne d'outils Gradle) et Canner utilise un environnement Temurin correspondant de bout en bout — à la compilation comme à l'exécution.
- Offert à partir de Démarrage, sur la même infrastructure canadienne que tous les autres environnements. Guide complet à /fr/docs/other-runtimes.
Choisissez votre version de Postgres — 17 ou 18
- Au moment de provisionner une base, vous pouvez désormais choisir Postgres 17 (par défaut) ou Postgres 18. Les bases existantes restent sur leur version de création; rien ne change à moins que vous ne le choisissiez.
- L'onglet Base de données affiche la version exacte en exécution (par exemple, 17.9), pour que vous sachiez précisément où vous en êtes, pas seulement la version majeure.
Membres d'équipe, permissions détaillées et mode sombre
- Invitez des personnes dans votre organisation. Les membres se connectent avec leur propre compte — clé d'accès, mot de passe ou connexion sociale — et vous décidez, par section et par projet, si chacun peut consulter ou modifier. La gestion des membres demeure réservée aux administrateurs.
- Vous appartenez à plus d'une organisation? Un sélecteur d'organisation dans la barre latérale vous fait passer de l'une à l'autre, et chaque limite de forfait est comptée une fois par organisation, jamais par personne.
- Les sièges sont facturés à mesure que vous les ajoutez : une invitation au-delà des sièges inclus dans votre forfait ajoute des frais de siège calculés au prorata, et retirer un membre le libère. Démarrage et Live incluent un nombre illimité de sièges. Guide complet à /fr/docs/members.
- Également nouveau : le mode sombre dans tout le tableau de bord. Suivez votre système, ou choisissez clair ou sombre depuis la barre supérieure.
Travailleurs en arrière-plan, et PHP 8.3 avec Laravel
- Nouveau : les projets travailleurs. Un robot, un consommateur de file d'attente ou tout processus de longue durée qui n'est pas un serveur web peut maintenant s'exécuter sur Canner sans vérification d'état ni URL publique — il tourne, tout simplement. Marquez un projet comme travailleur dans ses paramètres, ou redéployez-en un existant comme tel.
- PHP 8.3 avec une compilation Laravel + Vite combinée : une application Laravel dont les ressources frontales sont compilées par Vite installe et compile désormais les deux côtés en une seule passe, puis sert par PHP.
Journal d'audit — un registre inaltérable de ce qui s'est passé
- Chaque action significative dans votre organisation — déploiements, changements de membres et de permissions, modifications de domaines et de facturation — est désormais consignée dans un journal d'audit inaltérable, propre à votre organisation, indiquant qui a fait quoi et quand. Les entrées ne peuvent être ni modifiées ni supprimées.
- Inclus sur Studio et Entreprise, conservé 13 mois et exportable — la trace qu'exige une revue interne ou une demande de reddition de comptes au titre de la Loi 25. Guide complet à /fr/docs/audit-log.
Factures TPS/TVQ émises par Canner
- Chaque paiement s'accompagne maintenant d'une véritable facture Canner — numérotée, avec la TPS et la TVQ présentées sur des lignes distinctes et nos numéros d'inscription du Québec. Téléchargez-les toutes, à tout moment, depuis Facturation.
- Les prix sont affichés avant taxes : la TPS et la TVQ s'ajoutent au paiement pour les nouveaux abonnements et ceux qui changent, au taux exigé par votre province (TPS seulement hors Québec, aucune taxe hors du Canada). Les abonnements existants conservent leur total actuel jusqu'à leur prochain changement de forfait.
Nouveaux tarifs : deux échelles claires, et des ressources à la carte
- Les tarifs forment maintenant deux échelles. Pour les créateurs : Démarrage (gratuit) et Live (9 $/mois). Pour les équipes et les entreprises : Studio (149 $/mois) et Entreprise (sur devis). Vous choisissez l'échelle qui correspond à votre raison d'être ici, pas une grille de paliers qui se chevauchent.
- Studio est le forfait d'équipe : 10 applications toujours actives, des membres d'équipe avec permissions détaillées, le journal d'audit et les documents de conformité (entente de traitement des données + attestation de résidence au Québec) inclus.
- Les ressources sont désormais des modules, pas un motif de sauter un palier entier : une application toujours active de plus (4 $/mois), un bloc de performance de 4 Go de RAM + 2 vCPU (69 $/mois), +50 Go de stockage (5 $/mois) et des postes supplémentaires (5 $/mois). Ajoutez ce dont vous avez besoin, là où vous êtes.
- Les abonnés existants conservent le prix auquel ils se sont inscrits. L'ancien palier Dédié devient Studio; rien à votre forfait actuel ne change sans que vous le choisissiez.
Clés d'accès, connexion sociale et Canner Auth
- Connectez-vous à Canner avec une clé d'accès — empreinte, visage ou NIP de l'appareil. Ajoutez-en une depuis Compte; elle devient ensuite la méthode attendue, et nous vous écrivons si quelqu'un entre sans elle.
- Connexion Google et Microsoft, liable depuis votre page de compte.
- Voyez chaque appareil où vous êtes connecté et déconnectez-en n'importe lequel.
- Nouveau : Clé d'accès (Canner Auth) — ajoutez la connexion par clé d'accès à VOTRE application sans base de données d'utilisateurs. Offert sur tous les forfaits, y compris le forfait gratuit.
Node.js 24 est maintenant disponible
- Vous pouvez désormais compiler et exécuter votre application sur Node.js 24 (24.18.0 LTS) en plus de Node.js 22. Choisissez la version sous Version de Node.js dans les paramètres de votre projet; Node 22 demeure la valeur par défaut, donc rien ne change à moins que vous ne changiez.
- La version s'applique à la compilation et à l'application en exécution, donc un projet qui a besoin des fonctionnalités de Node 24 en profite de bout en bout — pas seulement à la compilation.
- Changer de version déclenche une réinstallation complète au prochain déploiement. Les dépendances natives sont compilées pour une version précise de Node et ne peuvent donc pas être réutilisées — après cette première compilation, la mise en cache reprend normalement.
- Si votre package.json définit une plage engines.node, la compilation vous indique désormais précisément quelles versions sont disponibles au lieu d'échouer sur une version que vous ne pouvez pas choisir.
Votre application vit maintenant à votre-projet.canner.app
- Votre application obtient désormais une adresse canner.app plutôt que app.canner.ca — par exemple, mon-projet.canner.app. Le changement se fait à votre prochain déploiement; d'ici là, rien ne change.
- Votre ancienne adresse continue de fonctionner, en permanence. Chaque application répond aux deux, donc les liens, favoris et codes QR existants ne sont pas touchés. Vous n'avez rien à faire. (Mise à jour du 9 septembre 2026 : ce n'était finalement pas permanent — voir cette entrée pour le retrait de *.app.canner.ca.)
- Pourquoi : les systèmes de sécurité des navigateurs évaluent un domaine entier d'un coup. Héberger les applications clientes sous canner.ca signifiait qu'une seule page abusive pouvait affecter l'adresse de toutes les autres — et en juillet, c'est arrivé. Les applications clientes vivent maintenant sur leur propre domaine, pour que cela ne puisse plus se reproduire.
Sauvegardez votre app directement depuis votre outil d’IA — MCP distant + jetons limités
- Nouveau : un serveur MCP distant à https://api.canner.ca/mcp. Les outils d’IA qui s’exécutent dans le navigateur — Lovable, Bolt, v0 — se connectent à un serveur Model Context Protocol par URL; vous pouvez donc désormais en pointer un vers Canner, vous authentifier avec un jeton API et dire à votre agent « sauvegarde mon app sur Canner ». Il crée un projet et déploie votre code sur une infrastructure canadienne, depuis la conversation.
- Nouveaux outils : canner_create_project et canner_save_app. L’agent envoie directement le code source complet de votre projet (aucun dépôt requis) et Canner le compile et l’héberge. Treize outils MCP au total; @canner-ca/mcp pour les agents de bureau (Claude Desktop, Cursor, Claude Code) relaie désormais le même point de terminaison.
- Nouveau : jetons API limités. Générez un jeton restreint à l’accès projet + déploiement — ni facturation, ni gestion de jetons — pour qu’un identifiant collé dans un outil tiers ne puisse rien faire de plus que déployer. Les jetons existants sont inchangés et conservent l’accès complet. Voir /fr/mcp pour commencer.
La mise en cache, améliorée : un fournisseur Astro natif, le mode brouillon et « stale-while-revalidate »
- Nouveau : un fournisseur de cache Astro 7 natif. @canner-ca/astro-cache intègre désormais Canner à la mise en cache des routes d'Astro comme fournisseur de première classe — la même API Astro.cache.set() que sur Netlify, Vercel ou Cloudflare, dirigée vers Canner. Configurez-le une fois et mettez en cache par route, avec purge par étiquette et par URL via un seul jeton.
- Nouveau : le mode brouillon. Prévisualisez du contenu CMS non publié sur sa vraie URL sans vider ce que voient les autres — une requête portant le secret de contournement de votre projet est rendue à neuf depuis l'origine pendant que le public garde la page en cache. Transportez le secret dans un témoin, un lien ?__canner_bypass= ou un en-tête X-Canner-Bypass; des utilitaires clé en main sont fournis pour Astro, Next.js et Nuxt.
- Nouveau : « stale-while-revalidate ». Passé le TTL d'une page, Canner sert la copie périmée instantanément et la rafraîchit une fois en arrière-plan — aucun visiteur n'attend jamais un rendu à froid. Ajoutez stale-while-revalidate à votre Cache-Control (ou swr aux utilitaires) pour l'activer.
- Aussi : invalidation par URL (pas seulement par étiquette) — envoyez {"paths":["/blog/post"]} au point de terminaison de purge. La mise en cache est désormais documentée pour ce qu'elle est : indépendante du cadriciel et du CMS, DatoCMS n'étant qu'un exemple parmi d'autres. Guide complet à /fr/docs/caching.
Requêtes SQL planifiées — du SQL sur vos bases selon un cron
- Nouveau : les requêtes SQL planifiées. Écrivez du SQL, définissez une planification cron, et Canner l'exécute sur vos bases de projet à Montréal — en lecture et en écriture, en les nommant (projet.schema.table), en joignant plusieurs projets et en écrivant les résultats directement dans votre Postgres. Sans outil ETL externe, sans que les données quittent le Canada. C'est le pendant SQL des tâches planifiées (qui appellent un webhook). Offert sur tous les forfaits sous Calcul → Requêtes planifiées; guide complet à /fr/docs/scheduled-queries.
- Chaque exécution est isolée : un moteur en mémoire avec plafond de mémoire et délai par requête, l'accès au système de fichiers local désactivé, et un accès limité aux seules bases que votre compte possède. Historique, exécution immédiate, suspension/reprise et annulation sont dans le tableau de bord.
- Renforcement de la sécurité : les requêtes de l'Atelier de données s'exécutent désormais avec le système de fichiers local désactivé partout, fermant tout accès aux fichiers de l'hôte depuis le SQL utilisateur.
Une vraie documentation, et un prix Live à la hauteur de ce qu'il est
- Une documentation complète est en ligne à /fr/docs : guides de démarrage pour chaque cadriciel et environnement pris en charge (Next.js, Vite, Astro, Node, Python, Go, Ruby, PHP, Rust, statique), guides pour les domaines, bases de données et variables d'environnement, et une page de dépannage qui décode les messages d'erreur exacts d'un journal de build. Entièrement bilingue.
- Live passe à 9 $/mois ou 99 $/année. Les abonnés Live existants conservent leur prix d'origine — le changement s'applique aux nouveaux abonnements seulement. Démarrage reste gratuit, Dédié reste dès 29 $.
Tarifs simplifiés : Démarrage, Live et Dédié facturé à l'usage
- Trois forfaits au lieu de quatre. Démarrage est gratuit et se met en veille au repos; Live, c'est 4,90 $/mois fixe pour l'hébergement toujours actif, les domaines personnalisés et l'IA; Dédié est facturé à l'usage dès 29 $ et évolue sans plafond.
- Dédié facture équitablement : vous payez la mémoire ou le stockage — celle que vous utilisez le plus, jamais les deux — vous ne payez que pour ce que vous utilisez réellement.
- Le Python d'apprentissage automatique (PyTorch, TensorFlow) et Rust fonctionnent maintenant sur Live, pas seulement sur le forfait supérieur. Les documents de conformité et l'export des journaux d'audit sont inclus sur Dédié.
Une API REST documentée, une spécification OpenAPI et un serveur MCP pour agents IA
- L'API Canner est maintenant une véritable surface REST sous /v1, décrite par une spécification OpenAPI 3.1 avec une référence interactive à api.canner.ca/docs. Gérez projets, déploiements, domaines, bases de données, variables d'environnement et facturation depuis votre propre code. Un nouveau guide pour développeurs se trouve à canner.ca/developers.
- Réponses d'erreur cohérentes (un code stable, un message et un request_id), en-têtes de limite de débit sur chaque réponse et pagination par clé sur les points de terminaison de liste. Les chemins existants du tableau de bord et de la CLI continuent de fonctionner sans changement.
- Nouveau @canner-ca/mcp : un serveur Model Context Protocol qui donne aux agents IA — Claude Desktop, Cursor et autres — des outils natifs pour déployer et gérer vos projets. Zéro dépendance, fidèle à la chaîne d'approvisionnement propre de Canner. Voir canner.ca/mcp.
- La @canner-ca/cli gagne un mode de sortie --json pour les scripts et les agents, ainsi que de nouvelles commandes token, env et domains.
Déployez Python, Go, Ruby, PHP et Rust — pas seulement Node
- Python se déploie maintenant comme le reste, avec FastAPI, Flask, Streamlit, Gradio et Django détectés automatiquement. Déposez une démo IA Gradio ou Streamlit et obtenez une URL en direct.
- Go, Ruby (Rails, Sinatra), PHP (Laravel, Symfony) et Rust s'ajoutent aussi à la liste — sans configuration, détection automatique.
- Plus de cadres JavaScript reconnus d'emblée : Angular, Create React App, Gatsby et Docusaurus, ainsi que les applis full-stack qui exécutent leur propre serveur.
- Le Python d'apprentissage automatique (PyTorch, TensorFlow) et Rust sont offerts sur Pro et Entreprise.
Forfait Entreprise, documents de conformité et un blogue en français
- Nouveau forfait Entreprise avec serveur dédié, soutien prioritaire et engagement de disponibilité de 99,9 %.
- Une entente de traitement des données et une attestation de résidence des données au Québec sont maintenant offertes en modules uniques — incluses sur Entreprise.
- Le blogue complet est maintenant offert en français, et la page de tarifs propose une comparaison côte à côte plus claire.
Mise en cache des réponses avec purge ciblée
- Mise en cache HTTP par étiquettes (optionnelle), servie depuis l'infrastructure de Canner au Québec — pas un réseau de périphérie étranger. Offerte sur tous les forfaits.
- Une publication depuis un CMS découplé peut purger exactement les pages touchées via un webhook par projet. Le taux de succès du cache est affiché sur chaque projet.
Isolation des compilations renforcée
- Chaque compilation s'exécute en isolation complète sous sa propre identité, avec les scripts d'installation et l'accès réseau verrouillés par défaut. Les journaux signalent maintenant clairement une compilation à court de mémoire plutôt qu'un échec générique.
Atelier de données — analytique SQL sur vos téléversements
- Téléversez du CSV, Parquet ou JSON et exécutez du SQL standard dessus en millisecondes, directement depuis le tableau de bord. Inclus sur tous les forfaits, avec limites de stockage et de requêtes par palier.
Téléversements par glisser-déposer et un outil en ligne de commande
- Déployez sans Git : glissez un dossier ou un .zip sur la page d'accueil, ou téléversez depuis le tableau de bord. Un site statique (un dossier avec un index.html) se déploie instantanément, sans étape de compilation.
- Nouveau @canner-ca/cli : exécutez npx @canner-ca/cli deploy depuis n'importe quel terminal — y compris dans Cursor — pour déployer le dossier courant.
Tarifs : Démarrage gratuit permanent, .com ajouté à l'offre de domaine
- Démarrage est maintenant un forfait gratuit permanent, et non plus un essai de 30 jours. Les ressources de Démarrage sont mutualisées entre les comptes gratuits et déprioritisées quand des compilations payantes sont en file.
- De base et Pro sont facturés immédiatement à l'inscription — fini l'essai de 30 jours. Ce que vous prenez est ce que vous payez dès le premier jour.
- Offre de domaine gratuit étendue au .com : De base inclut .com ou .ca au mensuel, plus .quebec à l'annuel; Pro inclut .com, .ca ou .quebec sur les deux intervalles.
Achat de domaine : formulaire CIRA CPR et reconnaissance Québec
- Nouveau formulaire d'inscrit sur la modale de paiement de domaine, avec menu déroulant CIRA CPR (Exigences de présence canadienne) pour les domaines .ca.
- Étape de reconnaissance Québec pour les domaines .quebec. Message convivial sur erreur 409 lorsque le nom vient d'être enregistré par un autre client.
Bascule de facturation annuelle + crédit .ca / .quebec gratuit
- La page de facturation propose maintenant les intervalles mensuel et annuel. L'annuel économise deux mois par rapport au mensuel.
- De base annuel et Pro (les deux intervalles) incluent l'enregistrement gratuit d'un domaine .ca ou .quebec, appliqué au paiement.
Démarrage à froid, réveil et prévisualisations plus fiables
- Les projets inactifs s'endorment et se réveillent automatiquement à la requête suivante — sans surprise au démarrage à froid. Les journaux d'exécution en direct et les prévisualisations sur demande de tirage fonctionnent maintenant de façon cohérente.
Métriques par projet, prévisualisations sur PR, systemd par locataire, page d'état publique
- Métriques de trafic horaires par projet avec répartition par statut, affichées en graphique sur la page du projet.
- Déploiements de prévisualisation sur les demandes de tirage. Chaque PR reçoit une exécution dédiée à <branche>--<slug>.app.canner.ca, démantelée à la fermeture.
- Chaque projet s'exécute maintenant sous son propre utilisateur système isolé, pour une meilleure séparation entre les locataires.
- Page d'état publique à canner.ca/status, rendue côté serveur avec un cache de 10 secondes côté plateforme.
Facturation Stripe, domaines personnalisés avec TLS auto, cadres logiciels génériques, jetons API
- Facturation Stripe intégrée de bout en bout. Ajoutez une carte et abonnez-vous à un forfait payant en quelques clics.
- Domaines personnalisés avec émission TLS Let's Encrypt automatique via Caddy. Pointez votre CNAME et le certificat apparaît en quelques secondes.
- Détection générique de cadre : Next.js, Vite (React, Vue, Svelte) et applications Node.js standard se compilent et s'exécutent sans configuration.
- Jetons API (cnr_…) pour l'accès programmatique. Points d'API de relance, annulation et retour en arrière sur chaque déploiement.
- Tableau de bord bilingue français / anglais. Suppression de compte (annule l'abonnement, supprime toutes les bases et exécutions locataires).