INI

Qu’est-ce qu’un fichier INI ?

Des sections et des paires clé-valeur. Le plus ancien format de configuration encore utilisé tous les jours.

Ce qu’est INI

INI est un format texte que n’importe quel éditeur ouvre. Il est utilisé pour la retouche.

L’extension est .ini et le nom complet INI Configuration. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.

D’où vient INI

Il remonte à 1985.

À un format resté lisible aussi longtemps, on peut confier quelque chose qu’on veut retrouver dans dix ans.

La spécification est publique

Elle est publiée intégralement : n’importe qui peut l’implémenter à partir du document plutôt qu’en l’observant, et c’est pourquoi ce format apparaît dans tant de programmes et pourquoi des fichiers écrits il y a vingt ans s’ouvrent encore. Une spécification publiée n’est pas pour autant libre de redevances : quand un format enveloppe un codec, les brevets sont une question à part, que la norme ne tranche pas.

C’est un format hérité

Il s’ouvre encore partout et les anciens logiciels l’écrivent toujours, mais plus rien de neuf ne se construit autour. Convertissez ce que vous voulez garder, et ne le choisissez pas pour un projet qui commence aujourd’hui.

On peut y laisser des notes

INI a une syntaxe de commentaires, et c’est la différence entre un fichier qu’une personne entretient et un fichier qu’un programme écrit. Les commentaires sont la première chose perdue en convertissant vers un format qui n’en a pas, et rien ne vous prévient.

Ce qui ouvre INI

Notepad et Visual Studio Code le lisent, comme la plupart des programmes du même genre.

Quand un fichier ne s’ouvre pas, le format est rarement en cause : le plus souvent, c’est le programme qui est plus ancien que lui. Convertir vers quelque chose de plus ancien est le contournement fiable, et c’est à cela que sert le reste de ce site.

L’ouvrir dans un navigateur

Aucun navigateur ne le lit.

C’est de loin la raison la plus fréquente de le convertir : non pas que le format soit mauvais, mais que l’endroit où vous voulez montrer le fichier ne sache pas le lire.

C’est un format de travail

INI est fait pour être ouvert et modifié. Gardez le fichier dans ce format tant que le travail dure, et exportez depuis lui chaque fois qu’une version finie est nécessaire.

Il n’y a pas de spécification, et c’est toute l’histoire

INI est issu des débuts de Windows, où il contenait les paramètres du système et de chaque application. Il n’a jamais été normalisé — aucun document ne le définit, aucun comité n’en est propriétaire, et chaque programme qui en lit un implémente son propre dialecte.

Le cœur est universel : des en-têtes de section entre crochets, et des lignes clé égale valeur en dessous. Tout ce qui dépasse ce cœur tient du tirage au sort. Si un point-virgule ou un dièse commence un commentaire. Si une valeur peut être entre guillemets, et ce qui arrive aux guillemets. Si les clés sont sensibles à la casse. Si une valeur peut passer sur une seconde ligne. Si les sections peuvent s’imbriquer, ce que la plupart des dialectes interdisent. Deux programmes lisant le même fichier peuvent diverger en toute légitimité, et les deux ont raison.

Tout est chaîne jusqu’à ce que quelqu’un l’interprète

Écrivez timeout=30 et le fichier contient les caractères 3 et 0. Que cela devienne un nombre, et que cela signifie des secondes ou des millisecondes, est entièrement décidé par le programme qui le lit. Il en va de même pour true, yes, on et 1 — toutes les manières courantes d’écrire un booléen, aucune définie par le format, et chaque bibliothèque en accepte un sous-ensemble différent.

C’est la différence pratique avec JSON, YAML ou TOML, qui ont des types. C’est pourquoi les fichiers de configuration INI s’accompagnent habituellement d’une documentation ou de commentaires expliquant ce que signifient les valeurs, et pourquoi déplacer un fichier de configuration entre deux implémentations du même programme est plus dangereux qu’il n’y paraît.

Où l’on en croise encore un

Windows, encore, à certains endroits : desktop.ini contrôlant l’affichage d’un dossier, la configuration de démarrage et des pilotes, et une longue traîne d’applications qui n’ont jamais eu de raison de changer. Les jeux sont une source particulièrement riche — un nombre considérable de jeux PC conservent leurs paramètres graphiques et d’entrée dans un INI, ce qui explique pourquoi les guides de tweakage sont remplis d’instructions pour en éditer un.

Ailleurs, le format survit dans des outils antérieurs aux alternatives modernes : php.ini de PHP, la configuration de Git, setup.cfg et les outils d’empaquetage de Python, les fichiers d’unités systemd, et quantité de petits utilitaires. Les nouveaux projets choisissent TOML ou YAML, mais rien dans les installations existantes ne va être réécrit.

Éditer un INI en sécurité

N’importe quel éditeur de texte. Deux règles couvrent la plupart des dégâts : copiez le fichier avant de le modifier, et changez une chose à la fois — un programme qui ne démarre pas à cause d’un mauvais fichier de configuration dit rarement à quelle ligne il a objecté.

Puis les détails qui provoquent réellement des échecs. Enregistrez en UTF-8 sans marque d’ordre d’octet, parce que les octets invisibles au début du fichier cassent le premier en-tête de section dans beaucoup de parseurs. N’ajoutez pas d’espaces autour du signe égal à moins de savoir que le lecteur les rogne, car certains ne le font pas et votre valeur devient une espace initiale suivie du texte. Et ne touchez pas aux guillemets : si les valeurs existantes ne sont pas entre guillemets, en ajouter peut ajouter deux caractères à la valeur au lieu de la délimiter.

Ce en quoi INI est réellement bon

Être évident. Une personne qui n’a jamais vu le fichier peut l’ouvrir, trouver le paramètre fullscreen, changer false en true, et avoir raison. C’est une propriété réelle et c’est pourquoi le format a survécu à tout ce qui a été conçu pour le remplacer dans les années 1990.

Il échoue aussi avec grâce dans le cas simple : une clé inconnue est en général ignorée plutôt que fatale, de sorte qu’un fichier de configuration écrit pour une version plus récente d’un programme fonctionne généralement avec une version plus ancienne. Les alternatives sont plus strictes, ce qui est mieux pour la correction et pire pour la personne qui édite les paramètres d’un jeu au milieu de la nuit.

Quand passer à TOML

Quand la configuration a dépassé le stade de sections plates de chaînes. Structure imbriquée, listes, dates, nombres qui doivent être des nombres, ou toute valeur où la différence entre la chaîne « false » et le booléen false compte — voilà où INI cesse d’aider et commence à cacher des bogues.

TOML a été conçu comme la réponse à précisément cela : il ressemble à INI, donc personne n’a à apprendre une nouvelle forme, et il possède une spécification, des types véritables et une imbrication définie. YAML est l’autre cible courante et est plus puissant et considérablement plus facile à utiliser de travers. Si un fichier est sur le point de grandir, TOML est le plus petit pas, et celui qui conserve la lisibilité qui faisait qu’INI valait la peine d’être utilisé.

Les données, au même endroit

Identifiants et origine du format INI.
Extension.ini, .cfg, .conf
Type de médiatext/plain
Première publication1985

Fichiers INI : questions courantes

Comment ouvrir et éditer un fichier INI ?

Avec n’importe quel éditeur de texte. Copiez d’abord le fichier, modifiez un paramètre à la fois, et enregistrez en UTF-8 sans marque d’ordre d’octet — ces octets invisibles au début du fichier cassent le premier en-tête de section dans beaucoup de parseurs.

Les commentaires doivent-ils commencer par un point-virgule ou un dièse ?

Cela dépend du programme, parce qu’il n’y a pas de spécification. Le point-virgule est l’ancienne convention Windows et le dièse est courant dans les outils d’influence Unix. Adoptez ce que les commentaires existants du fichier utilisent.

Les fichiers INI peuvent-ils avoir des sections imbriquées ?

Pas vraiment. La plupart des implémentations traitent un en-tête comme [database.primary] comme une seule section dont le nom contient par hasard un point, plutôt que comme une imbrication. Si votre configuration a réellement besoin de structure, c’est le moment de passer à TOML.

Dois-je mettre des guillemets autour des valeurs ?

En général non, et en ajouter peut être activement préjudiciable — certains parseurs traitent les guillemets comme faisant partie de la valeur plutôt que comme délimiteurs. Faites comme les entrées existantes du fichier.

Quelle est la différence entre INI et TOML ?

TOML ressemble à INI et possède ce qui manque à INI : une spécification, de vrais types de données, une imbrication définie, des tableaux et des dates. Les valeurs INI sont toujours des chaînes jusqu’à ce qu’un programme en décide autrement, ce qui est la source de la plupart des bogues de configuration.

Pourquoi mon programme ignore-t-il un paramètre que j’ai changé ?

Les causes courantes sont l’édition d’un fichier que le programme ne lit pas réellement — beaucoup d’applications conservent une copie utilisateur séparément de celle installée — une faute de frappe dans l’en-tête de section, ou le programme qui tournait pendant que vous enregistriez. Vérifiez d’abord l’existence d’une seconde copie du fichier.