Voici le détail des évolutions
Javascript
jQuery
- Mise à jour de jQuery en version 3.2 (dans SPIP 3.1 c’est jQuery 1.12). https://jquery.com/upgrade-guide/3.0
 -  intégration de 
jQuery-migrate-3.0.1.jspour faciliter les migrations des scripts utilisant jQuery. https://github.com/jquery/jquery-migrate/#README 
Note importante : Ces changements impliquent qu’il est fortement conseillé de mettre à jour les scripts utilisant jQuery. Cela concerne principalement les modifications suivantes :
- bind() => on()
 - unbind() => off()
 - load() => on(’load’, ...)
 - unload() => on(’unload’, ...)
 - jQuery.isArray() => Array.isArray()
 
jQuery UI
-  Mise à jour de jQuery UI en version 1.12 (dans SPIP 3.0 c’est jQuery UI 1.11). http://jqueryui.com/upgrade-guide/1.12/ .  Changement d’implémentation au passage :
- tout jQuery UI est chargé dans l’espace privé par défaut.
 - Dans l’espace public, dès lors qu’un élément de jQuery UI est demandé via le pipeline "jqueryui_plugins", tout le JS / CSS de jQuery UI est également chargé.
 
 
Note importante : Ces changements impliquent que les usages de javascript qui chargeaient des modules de jQuery UI avec
$.getScript()ne fonctionneront plus. Vous pouvez soit charger globalement jQuery UI dans votre squelette, ou via le pipelinejqueryui_pluginspour un plugin, soit utiliser$.getScript()sur le chemin du fichier "jquery-ui.js" directement.Ainsi :
$.getScript("#CHEMIN{prive/javascript/ui/core.js}", function(){ $.getScript("#CHEMIN{prive/javascript/ui/widget.js}", function(){ $.getScript("#CHEMIN{prive/javascript/ui/mouse.js}", function(){ $.getScript("#CHEMIN{prive/javascript/ui/sortable.js}", function(){ // ... })})})});Pourrait devenir :
$.getScript("#CHEMIN{prive/javascript/ui/jquery-ui.js}", function(){ // ... });
JS Cookie
- La librairie JS Cookies est intégrée en version 2.1.4. Elle remplace jQuery.cookie. https://github.com/js-cookie/js-cookie
 -  L’ancienne écriture 
$.cookie()fonctionne encore dans la plupart des usages mais il est conseillé de migrer :-  
$.cookie(key)devientCookies.get(key) -  
$.cookie(key, value)devientCookies.set(key, value) -  
$.cookie(key, value, options)devientCookies.set(key, value, options) 
 -  
 
PHP
- Nombreuses notices PHP enlevées encore.
 - Compatibilité PHP 7.4 maximum
 
Core
Tri des items de navigation & entrées favorites
Le fonctionnement du plugin « Menu privé alphabétique » est intégré :
- les sous-menus de navigation (au survol des menus « Édition », « Publication », « Activité », ...) sont maintenant triés par ordre alphabétique [1].
 - dans ses préférences personnelles, il est maintenant possible de cocher des entrées de menus « favorites », qui s’afficheront alors en tête dans les sous-menus de navigation concernés.
 - si un sous-menu contient plus de 20 entrées, il est alors affiché en 2 colonnes.
 
Simplification du « cookie de correspondance »
Le bouton pour activer ce cookie dans l’espace privé n’était pas explicite. Par ailleurs, le cookie se désactivait à terme si un auteur se connectait régulièrement sur un même site. La solution retenue est de supprimer la notion (et le bouton) de « cookie de correspondance », et de créer le cookie (dit d’admin) systématiquement lorsqu’un auteur se loge et a les droits d’accès à l’espace privé. Le cookie d’admin est renouvelé en même temps que le cookie de session. Et s’enlève en se déconnectant.
Tickets associés : #1740,  #1710.
Dépendances des plugins à des extensions PHP
Il est maintenant possible d’indiquer dans un paquet.xml qu’un plugin a besoin d’une extension PHP pour fonctionner. Ticket #3829. Une erreur sera affichée dans le cas contraire à l’activation du plugin. Syntaxe :
<necessite nom="php:curl" />
<necessite nom="php:xdebug" compatibilite="[2.0.0;]" />
Formulaire
La balise #FORMULAIRE_INSCRIPTION s’enrichie de deux nouvelles possibilités :
- elle accepte un 3e argument pour indiquer la page vers laquelle on redirige la personne lorsqu’elle confirme son inscription ;
 - Il est possible de forcer l’utilisation du lien de confirmation contenu dans l’email.
 
Les explications détaillées dans l’article FORMULAIRE_INSCRIPTION
Critères
-  le critère 
{par champ}a été réécrit et tolère mieux les noms de champs provenant de tables de jointures, en harmonisant avec{par num champ}et{par multi champ}le fonctionnement. Des expressions{par expr champ}peuvent maintenant être créées sans surcharger tout le critère, à toutes fins utiles. -  ajout de 
{par sinum champ}qui met en premier les éléments ayant des numéros (hors0.). Ainsi{par sinum titre, num titre, titre}mettra les titres avec des numéros avant ceux n’en ayant pas (contrairement à{par num titre, titre}), puis triera par numéro. Et contrairement à{par titre, num titre}, le numéro 100 sera bien placé après le numéro 20. 
Pipelines
- formulaire_receptionner : pipeline appelé au moment où un formulaire est posté par un visiteur, mais avant l’analyse des données postées par la fonction de vérification. https://core.spip.net/projects/spip/repository/revisions/23308
 
Divers tickets
-  Inclusions, connect & pagination (Tickets #3823 et #3899) : les paginations ajax prennent en compte le paramètre 
connectqui était utilisé. Leconnectexplicité sur une inclusion est prioritaire sur celui provenant de l’URL. - Limiter le nombre de fichiers de session d’un auteur (Ticket #3807)
 - Permettre d’envoyer un nouveau mot de passe à un auteur depuis l’interface privée (Ticket #2250)
 
Fichiers supprimés
- ecrire/inc/aider.php (déplacé dans plugins-dist/aide/inc/aide.php)
 - ecrire/inc/pclzip.php (déplacé dans plugins-dist/archiviste/inc/pclzip.php)
 
Déplacements
- les filtres de dates sont maintenant dans inc/filtres_dates.php (déplacés depuis inc/filtres.php) (Ticket #3583).
 
Suppression
-  les fonctions dépréciées 
afficher_plus(),debut_cadre_couleur_foncee(),fin_cadre_couleur_foncee()sont passées dans le plugin Grenier. 
Plugins
Aide
- Nouveau plugin qui intègre la gestion de l’aide en ligne (fonctions déplacées depuis le Core ou plugin SVP)
 
Archiviste
- Nouveau plugin qui intègre la gestion des archives zip et tar (fonctions déplacées depuis le Core)
 
Filtres Images
- Suppression des fonctions et fichiers dépréciés depuis SPIP 2.1 (Ticket #3601). Les éléments ont été déplacés dans le plugin Grenier.
 
Grenier
- Accueil des fonctions dépréciées du plugin Filtres images.
 - Accueil des fonctions dépréciées du Core
 
Médias
- Intégration du plugin Minidoc dans le plugin médias. Il permet différents affichages des listes de documents attachés aux objets éditoriaux. Ticket #3888
 - Modification également de la présentation par défaut de ces listes documents attachés
 -  Intégration du plugin Ordoc dans le plugin médias. Ticket #3887. Il permet d’ordonner les listes de documents joints aux objets éditoriaux [2], et ajoute un champ "rang_lien" dans la table spip_documents_liens. Il devient alors possible d’utiliser des boucles telle que :
<BOUCLE_docs(DOCUMENTS){id_article}{par rang_lien, num titre, titre, date}>.
 -  Changement de structure du code HTML attendu en retour du pipeline 
afficher_metas_document, qui par ailleurs envoie le code HTML des détails affichés pour le document plutôt que rien par défaut, ce qui permet de compléter la balise<table>utilisée. 
Mots
- Ajout d’une administration avancée sur les mots pour permettre de les fusionner ou de créer des associations/dissociations par rapport à un autre mot clé Commit 100448
 
Organiseur
- Mise à jour de la librairie FullCalendar en version 3.5.1 (auparavant en version 1.6). Pour migrer si vous utilisiez cette librairie dans l’espace public, se reporter à https://fullcalendar.io/wiki/Upgrading-to-v2/ ou https://fullcalendar.io/docs/
 - Intégration de la librairie Moment.js (nécessaire à FullCalendar)
 
Sites
- Permettre de rechercher dans les articles syndiqués sur un site. Ticket #3859
 
SVP - Gestion des plugin
- Prise en compte de l’affichage des erreurs de dépendances sur les extensions PHP. Ticket #3819.
 - Affichage plus compréhensible des versions sur les erreurs de dépendances.
 - On peut maintenant télécharger un plugin sans l’activer. Dans ce cas on reste sur la page de recherche de plugin. Ticket #3471
 - Afficher une barre de progression lors d’actions multiples (évite des erreurs de redirections). Ticket #3473
 - Correction de l’absence de confirmation des actions lorsque des actions supplémentaires sont ajoutées automatiquement par SVP (par exemple activer ou désactiver des dépendances).
 -  
inc/pcltar.phpetlib/pcltar/déplacés dans le plugin Archiviste. 
URL Étendues
Les URLs Arborescentes (principalement) peuvent gérer du multilinguisme (champs multis sur les rubriques par exemple) et des parents multiples (polyhiérarchie).
- Tolérer plusieurs parents pour un objet. Commit 100814
 -  Ajout d’un champ 
languesur la tablespip_urls. Commit 100835 -  Il est possible de définir une URL spécifique pour une certaine langue langue sur un objet éditorial en éditant l’URL. Pour ce faire, dans le champ de saisie, indiquer 
[code langue]:[url propre]tel queen:moviesetfr:videos. Commit 100835 -  La déclaration du « type » préfixant éventuellement l’URL d’un objet dans les URLs arborescentes (exemple : ’mot’ dans 
mot/titre_du_mot) peut recevoir une écriture à base de balise multi pour que le terme soit traduit en fonction de la langue Commit 100836 -  Les URLs arborescentes peuvent gérer du multilinguisme, en ajoutant le code de langue dans l’URL, activable par la constante 
_url_arbo_multilang. Commit 100844.