(noyaux-isoles)=

# Noyaux isolés

```{admonition} Utilisateurs de Capytale
:class: seealso

Si vous utilisez Basthon dans Capytale, vous devriez consulter la
[documentation de Capytale sur les noyaux isolés](https://capytale.forge.apps.education.fr/basthon/basthon-capytale/parts/noyaux-isoles.html).
```

Depuis mai 2026, les noyaux de Basthon sont **isolés**. Cela signifie que le code est exécuté dans un environnement séparé de celui qui exécute et rend la page web. Ceci permet :

- une sécurité accrue : le code exécuté n'a pas accès aux données d'authentifications de l'utilisateur sur Capytale et il ne peut donc pas faire des requêtes sur le serveur à son insu ;
- une parallélisation : l'exécution d'un long calcul ne bloque pas la page, le noyau peut être interrompu ;
- un rendu plus fluide : les interactions avec l'utilisateur (`print` et `input` en Python) sont affichées en temps réel ;
- mais avec quelques limitations : par exemple, certaines fonctionnalités du module `p5` en Python ne sont pas encore disponibles (voir ci-dessous).

## Quels noyaux sont isolés ?

Tous : Python, OCaml, JS, SQL, XCAS et C.

## Cas particulier de l'utilisation du module `p5`

Le module `p5` **fonctionne avec les noyaux isolés**. Le dessin est calculé
dans le noyau puis affiché dans un cadre isolé de la page, qui transmet au
noyau les interactions (souris, clavier, écran tactile).

Quelques différences sont à connaître :

- pour que le dessin réagisse au clavier, il faut d'abord cliquer dessus (un
  contour coloré indique qu'il reçoit les touches) ;
- `loadImage` charge les images du système de fichiers local : fichiers
  ouverts dans Basthon, créés par Python ou, pour les exemples de la galerie,
  fichiers auxiliaires. Un chemin relatif (`loadImage("image.png")`) désigne
  un fichier de ce système de fichiers ;
- les éléments HTML (`createButton`, `createSlider`, `createInput`,
  `createSelect`, `createCheckbox`, `createRadio`, `createP`...) sont
  affichés sous le dessin (ou à la position donnée par `position(x, y)`,
  relative au coin supérieur gauche du dessin) mais leur taille et leur
  position effectives ne peuvent pas être lues (`size()` et `position()`
  sans argument renvoient 0) ;
- certaines fonctionnalités ne sont pas encore disponibles : la vidéo et la
  webcam (`createCapture`, `createVideo`...), le son (`p5.sound`) et le
  chargement de bibliothèques (`load_library`).

Pour utiliser ces fonctionnalités, reportez-vous à la section
{ref}`noyaux-legacy`.

## Cas particulier de l'utilisation du module `matplotlib`

Le module `matplotlib` **fonctionne avec les noyaux isolés**, figures
interactives comprises. La figure est calculée dans le noyau puis affichée
dans un cadre isolé de la page : affichage des coordonnées sous la souris,
zoom, déplacement, historique des vues, événements souris et clavier
(`mpl_connect`), animations et export de la figure (PNG, SVG, PDF...) via le
bouton de téléchargement après avoir choisi le format.

Comme pour `p5`, pour que la figure réagisse au clavier, il faut d'abord
cliquer dessus.

(noyaux-legacy)=

## Comment retrouver les noyaux non isolés ?

Ces noyaux sont dits **legacy**. Il suffit d'ajouter le suffix `-legacy` au paramètre d'URL
`kernel=`. Ainsi, par exemple,
<https://console.basthon.fr/?kernel=python3-legacy> permet d'utiliser le noyau Python non isolé.

Seul le noyau Python dispose d'un mode legacy, conservé pour les
fonctionnalités historiques de `p5` et `matplotlib`. Les noyaux OCaml, JS,
SQL, XCAS et C n'existent qu'en version isolée.
