KaiOS est un système d'exploitation pour téléphones à clavier, basé sur les technologies web Boot to Gecko (B2G) de Mozilla. Le développement d'applications se fait avec HTML5, CSS et JavaScript sans avoir besoin d'apprendre des langages natifs. KaiOS fonctionne sur des appareils avec 256–512 Mo de RAM et prend en charge la 4G VoLTE, le GPS, le Bluetooth. Selon KaiOS Technologies, il y avait plus de 200 millions d'appareils actifs dans le monde en 2025.
Points Clés
KaiOS est un système d'exploitation mobile pour téléphones à clavier développé par KaiOS Technologies. Le système est basé sur le projet open source Boot to Gecko (B2G) de Mozilla, qui a été initialement créé comme un remplacement web d'Android pour les appareils ultra-bon marché. La première version commerciale a eu lieu en 2017 sur le téléphone Reliance JioPhone en Inde.
Selon Counterpoint Research (T2 2025), KaiOS détient 2,8 % du marché mondial des OS mobiles, derrière Android (72 %) et iOS (27 %), mais devant les autres plateformes. En Inde, la part de KaiOS atteint 14 % grâce au programme JioPhone. Le prix moyen d'un appareil KaiOS est de 20 à 30 dollars, ce qui le rend essentiel pour les marchés émergents.
La caractéristique clé de KaiOS est que toutes les applications sont des applications web. Le développeur écrit du code en HTML5, CSS et JavaScript, le package dans une archive ZIP avec un manifeste et le publie sur KaiStore. Le système ne prend pas en charge l'installation de fichiers APK natifs — seulement les Open Web Apps selon la spécification W3C Widget.
KaiOS 2.5 (2018) — première version stable sur noyau Gecko 48, livrée sur JioPhone 1. KaiOS 2.5.3 (2021) — prise en charge de Google Assistant, Google Maps Go, YouTube Go. KaiOS 3.0 (2022) — Gecko 84, performances améliorées, WebGL 2.0, CSS Grid. KaiOS 3.1 (2024) — optimisation pour 256 Mo de RAM, nouvelle Web API Audio Channel, sécurité TLS 1.3 améliorée.
| Version KaiOS | Année | Gecko | Changement Clé |
|---|---|---|---|
| 2.5 | 2018 | 48 | Première version stable, JioPhone 1 |
| 2.5.3 | 2021 | 48 | Google Apps, Assistant, sécurité améliorée |
| 3.0 | 2022 | 84 | ES2020, WebGL 2.0, CSS Grid, performances JS améliorées |
| 3.1 | 2024 | 84 | 256 Mo RAM, TLS 1.3, Audio Channel API |
L'architecture de KaiOS se compose de trois couches principales : le noyau Linux (Gonk), le moteur web Gecko et l'interface utilisateur Gaia. Gonk est la couche dépendante du matériel, comprenant les pilotes, la HAL (Hardware Abstraction Layer), la pile modem RIL (Radio Interface Layer) et la prise en charge des capteurs. Le chargeur d'amorçage, les pilotes et certaines bibliothèques sont tirés de l'Android Open Source Project (AOSP).
Gonk fournit à Gecko l'accès au matériel : appareil photo, Bluetooth, Wi-Fi, GPS, audio, vibration, capteurs. Contrairement à Android, où les applications sont écrites pour Dalvik/ART, dans KaiOS les applications accèdent au matériel via des Web API traduites par Gecko en Gonk IPC. L'interface radio (RIL) fournit la 4G VoLTE, les SMS, l'USSD et la gestion des cartes SIM.
Gecko dans KaiOS n'est pas seulement un moteur de navigateur mais un environnement d'exécution complet pour les applications. Toutes les applications HTML5 s'exécutent dans le Gecko Process Manager, qui isole chaque application dans un processus séparé. Gecko implémente la spécification W3C Widget Packaging et les extensions Mozilla pour l'accès au matériel. La version de Gecko détermine quelles Web API sont disponibles pour le développeur.
Gaia est l'interface web de l'OS lui-même : écran de verrouillage, écran d'accueil (lanceur), panneau de notifications, composeur, contacts, client SMS. Toutes les applications système sont les mêmes Open Web Apps. Un développeur peut remplacer l'appareil photo ou le clavier standard par sa propre application en enregistrant le gestionnaire d'activité correspondant dans le manifeste.
// Vérification de la version KaiOS et disponibilité des API
function checkKaiOSVersion() {
const ua = navigator.userAgent;
let version = 'unknown';
if (ua.includes('KAIOS/2.5')) {
version = '2.5';
} else if (ua.includes('KAIOS/3')) {
version = '3.0';
}
const features = {
geolocation: 'geolocation' in navigator,
vibration: 'vibrate' in navigator,
mozMobileConnection: 'mozMobileConnection' in navigator,
mozTelephony: 'mozTelephony' in navigator,
mozSms: 'mozSms' in navigator,
bluetooth: 'bluetooth' in navigator
};
return { version, features };
}
// Vérification de disponibilité de Google Apps (KaiOS 2.5.3+ uniquement)
const systemInfo = checkKaiOSVersion();
console.log('KaiOS version:', systemInfo.version);
console.log('Available APIs:', JSON.stringify(systemInfo.features, null, 2));
// Utilisation de la vibration avec vérification de disponibilité
function triggerHapticFeedback() {
if (navigator.vibrate) {
navigator.vibrate([200, 100, 200]); // vibration, pause, vibration
}
}La fonction checkKaiOSVersion lit le User Agent pour déterminer la version de KaiOS et vérifie la disponibilité des Web API clés. Dans la version 2.5, mozMobileConnection, mozTelephony, mozSms sont disponibles — ils sont absents dans les navigateurs normaux et propres à KaiOS. La fonction triggerHapticFeedback utilise l'API Vibration avec rétrocompatibilité.
Une application KaiOS est une archive ZIP (format .zip, pas .apk) contenant des fichiers HTML, CSS, JavaScript, des images et un manifeste. La structure minimale de l'application comprend manifest.webapp (description de l'application), index.html (point d'entrée), style.css et icon.png (icône carrée 90×90 pixels). Le manifeste suit la spécification W3C Manifest for Web Apps.
Le fichier manifest.webapp est le fichier de configuration racine d'une application KaiOS. Champs obligatoires : name (nom), description (description jusqu'à 140 caractères), launch_path (chemin vers index.html), icons (tailles d'icône 30×30, 60×60, 90×90, 120×120). Le champ type : 'certified' (applications système), 'privileged' (accès aux Web API), 'web' (sans permissions spéciales). Les permissions pour les applications privileged sont spécifiées dans le tableau permissions.
// manifest.webapp — configuration d'application KaiOS
{
"name": "Lampe torche",
"description": "Allume et éteint le flash de l'appareil photo",
"launch_path": "/index.html",
"icons": {
"30": "/icons/icon-30.png",
"60": "/icons/icon-60.png",
"90": "/icons/icon-90.png",
"120": "/icons/icon-120.png"
},
"type": "privileged",
"permissions": {
"camera": {
"description": "Nécessaire pour activer le flash"
}
},
"default_locale": "ru",
"orientation": "portrait-primary",
"fullscreen": true
}Le manifeste spécifie que l'application est de type privileged — cela donne accès à l'API de l'appareil photo via les permissions. Les tailles d'icône sont strictement 30×30, 60×60, 90×90 et 120×120 pixels. Le champ orientation restreint le mode portrait — les téléphones à clavier n'ont généralement pas d'accéléromètre pour la rotation d'écran. fullscreen : true masque la barre d'état.
Une page HTML5 dans KaiOS utilise des balises standard en tenant compte de l'écran limité (généralement 240×320 pixels). La balise meta viewport est obligatoire : <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">. KaiOS ne prend pas en charge les événements tactiles (pas d'écran tactile sur les téléphones à clavier) ; toute la navigation se fait via les touches : ArrowUp, ArrowDown pour se déplacer, Enter pour sélectionner, Back pour revenir.
// index.html — application lampe torche simple pour KaiOS
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Lampe de poche</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="app">
<div id="status" class="status-off">Éteint</div>
<div id="hint">Appuyez sur Entrée pour allumer</div>
</div>
<script>
const statusEl = document.getElementById('status');
const hintEl = document.getElementById('hint');
let isFlashOn = false;
let camera = null;
async function initCamera() {
try {
camera = navigator.mozCameras.getListOfCameras()[0];
const cameraControl = await
navigator.mozCameras.getCamera(camera, { mode: 'picture' });
return cameraControl;
} catch (e) {
showError('Caméra indisponible : ' + e.message);
}
}
async function toggleFlash() {
const cam = await initCamera();
if (!cam) return;
isFlashOn = !isFlashOn;
try {
await cam.setConfiguration({
mode: 'picture',
flashMode: isFlashOn ? 'on' : 'off'
});
statusEl.textContent = isFlashOn ? 'Allumé' : 'Éteint';
statusEl.className = isFlashOn ? 'status-on' : 'status-off';
} catch (e) {
showError('Erreur : ' + e.message);
}
}
// Gestion du bouton Enter physique
document.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
toggleFlash();
}
});
initCamera();
</script>
</body>
</html>L'application Lampe torche utilise l'API MozCamera pour contrôler le flash de l'appareil photo. L'utilisateur appuie sur le bouton Enter physique — le gestionnaire keydown se déclenche, basculant flashMode entre on et off. Le statut est affiché dans un bloc de texte avec les classes status-on/status-off pour l'indication visuelle. L'API MozCamera est disponible uniquement pour les applications privileged avec permission d'appareil photo dans le manifeste.
KaiOS Web API est un ensemble d'interfaces JavaScript fournissant un accès aux capacités matérielles du téléphone. La plupart des API sont des extensions propriétaires de Mozilla (préfixe moz) et ne sont pas disponibles dans les navigateurs normaux. Pour utiliser l'API, l'application doit être de type privileged ou certified dans le manifeste.
MozMobileConnection — informations réseau : opérateur, puissance du signal, type de réseau (4G/3G/2G), IMEI, état d'itinérance. MozTelephony — gestion des appels : composition, acceptation, fin, conférence, état d'appel. MozSms — envoi et réception de SMS, MMS, gestion des messages SIM. MozContacts — lecture et écriture du répertoire téléphonique. MozBluetooth — gestion Bluetooth : découverte d'appareils, appairage, transfert de fichiers. Push API — réception de notifications push du serveur.
// Travailler avec les contacts et les appels via les Web API KaiOS
const TelephonyManager = {
// Passer un appel par numéro
async makeCall(phoneNumber) {
if (!navigator.mozTelephony) {
throw new Error('API Telephony indisponible');
}
const call = navigator.mozTelephony.dial(phoneNumber);
call.onconnected = () => console.log('Appel établi');
call.ondisconnected = () => console.log('Appel terminé');
return call;
},
// Obtenir la liste des contacts du répertoire
async getContacts() {
const cursor = navigator.mozContacts.getAll({
sortBy: 'familyName',
sortOrder: 'ascending'
});
const contacts = [];
return new Promise((resolve, reject) => {
cursor.onsuccess = function() {
if (this.result) {
contacts.push(this.result);
this.continue();
} else {
resolve(contacts);
}
};
cursor.onerror = function() {
reject(this.error);
};
});
},
// Envoyer un SMS
async sendSms(phoneNumber, message) {
if (!navigator.mozSms) {
throw new Error('API SMS indisponible');
}
const request = navigator.mozSms.send(phoneNumber, message);
return new Promise((resolve, reject) => {
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
};
// Exemple d'utilisation
TelephonyManager.getContacts()
.then(contacts => console.log('Contacts trouvés :', contacts.length))
.catch(err => console.error(err));L'objet TelephonyManager combine trois API clés de KaiOS : mozTelephony pour les appels, mozContacts pour le répertoire et mozSms pour les messages. getAll() avec un curseur est un modèle pour la lecture asynchrone de grands volumes de données (typique pour les contacts de 1000+ entrées). Toutes les API retournent un DOMRequest avec des gestionnaires onsuccess et onerror.
Les Web API de KaiOS ont des limitations : les API d'appels et SMS sont disponibles uniquement sur les téléphones (pas sur les tablettes), l'appareil photo — seulement si un appareil photo physique est présent, Bluetooth — profil HSP/HFP limité. La Push API nécessite la prise en charge du serveur Google Firebase (FCM) ou un serveur personnalisé. L'API de géolocalisation utilise A-GPS ou Cell ID selon la prise en charge matérielle.
| API | Type d'App | Disponibilité | Version KaiOS |
|---|---|---|---|
| MozMobileConnection | privileged | Tous les téléphones | 2.5+ |
| MozTelephony | privileged | Téléphones uniquement | 2.5+ |
| MozSms | privileged | Téléphones uniquement | 2.5+ |
| MozContacts | privileged | Tous les téléphones | 2.5+ |
| MozBluetooth | certified | Avec module Bluetooth | 2.5+ |
| Geolocation API | web | Avec GPS/Cell ID | 2.5+ |
| Push API | privileged | Avec internet | 3.0+ |
| WebGL 2.0 | web | Avec accélération GPU | 3.0+ |
L'interface utilisateur de KaiOS est conçue pour le contrôle par clavier T9 et boutons physiques. La résolution d'écran standard est de 240×320 pixels (QVGA) sur la plupart des téléphones à clavier. L'absence d'écran tactile signifie que toute la navigation est implémentée via des événements keydown/keyup : ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Enter, Back (ou Escape).
KaiOS ne prend pas en charge CSS :focus de la manière habituelle — le focus est géré via tabindex et JavaScript. Le développeur doit suivre manuellement l'élément actuellement sélectionné et déplacer le focus lors des pressions sur les touches. L'utilisation de data-index sur les éléments de liste est recommandée pour simplifier la navigation. L'élément sélectionné est généralement surligné avec une classe .selected avec un background-color CSS contrastant.
// Navigation par focus dans une liste pour KaiOS
class ListNavigation {
constructor(containerSelector) {
this.container = document.querySelector(containerSelector);
this.items = this.container.querySelectorAll('[data-index]');
this.currentIndex = 0;
this.init();
}
init() {
this.updateFocus();
document.addEventListener('keydown', (e) => {
switch (e.key) {
case 'ArrowUp':
e.preventDefault();
this.moveFocus(-1);
break;
case 'ArrowDown':
e.preventDefault();
this.moveFocus(1);
break;
case 'Enter':
e.preventDefault();
this.selectItem();
break;
case 'Backspace':
case 'Escape':
e.preventDefault();
this.goBack();
break;
}
});
}
moveFocus(direction) {
this.items[this.currentIndex].classList.remove('selected');
this.currentIndex = (this.currentIndex + direction + this.items.length) % this.items.length;
this.updateFocus();
}
updateFocus() {
const el = this.items[this.currentIndex];
el.classList.add('selected');
el.scrollIntoView({ block: 'nearest' });
}
selectItem() {
const el = this.items[this.currentIndex];
const event = new CustomEvent('itemselected', {
detail: { index: this.currentIndex, element: el }
});
this.container.dispatchEvent(event);
}
goBack() {
history.back();
}
}
// Initialisation de la navigation pour une liste de menu
const nav = new ListNavigation('#menu-list');
nav.container.addEventListener('itemselected', (e) => {
console.log('Élément sélectionné :', e.detail.index);
});La classe ListNavigation implémente la navigation par focus complète pour KaiOS. ArrowUp/ArrowDown déplacent le focus cycliquement à travers les éléments avec data-index. Enter déclenche un événement personnalisé itemselected. Backspace/Escape retourne à l'écran précédent. scrollIntoView avec block : nearest fait défiler automatiquement l'écran lorsqu'on sort de la zone visible.
KaiOS 2.5 prend en charge CSS 2.1 + partiellement CSS3 (border-radius, box-shadow, gradients). Flexbox est partiellement pris en charge dans KaiOS 2.5, complètement pris en charge y compris CSS Grid dans KaiOS 3.0. Il est recommandé d'utiliser une mise en page basée sur float avec largeur fixe pour la compatibilité. La police par défaut est TizenSans ou Noto Sans CJK pour les marchés asiatiques. La taille du texte est de 14-16 pixels pour le contenu principal, 18-20 pour les titres.
KaiStore est la boutique officielle d'applications pour KaiOS, préinstallée sur tous les appareils. Les développeurs s'inscrivent sur le KaiOS Developer Portal (developer.kaiostech.com), téléchargent un paquet ZIP signé et remplissent la description. La modération vérifie la sécurité, la stabilité et la conformité à la politique de contenu. Le délai de révision moyen est de 3 à 5 jours ouvrables.
KaiOS nécessite la signature numérique de l'application via un KaiOS Certificate. Le développeur génère une paire de clés (privée + publique) à l'aide de l'utilitaire kaios-sign, envoie la clé publique au KaiOS Developer Portal et reçoit un certificat. Le fichier .zip signé contient la signature dans le dossier META-INF. Sans signature, l'application ne peut être installée que sur des appareils de développement.
KaiStore prend en charge les applications gratuites, la publicité via le KaiOS Ads SDK et les achats intégrés via la facturation opérateur (Direct Carrier Billing). La commission de KaiStore est de 30 % des revenus. Un canal alternatif est la préinstallation via les fabricants OEM (Jio, Nokia, Alcatel, Doro). La préinstallation nécessite un contrat direct avec le fabricant de l'appareil.
| Étape | Action | Délai |
|---|---|---|
| Inscription | Créer un compte sur KaiOS Developer Portal | 1 jour |
| Signature | Générer une clé, obtenir un certificat | 1-2 jours |
| Compilation | Packager .zip avec manifeste et signature | 1 heure |
| Téléchargement | Télécharger le paquet, remplir la description | 1 jour |
| Révision | Vérification de sécurité et qualité | 3-5 jours |
| Publication | Sortie sur KaiStore pour toutes les régions | 1 jour |
KaiStore ne prend pas en charge les applications payantes dans certains pays (paiement uniquement par facturation opérateur). La taille de l'application est limitée à 10 Mo pour le téléchargement via les réseaux 2G/3G. L'application ne doit pas utiliser plus de 50 Mo de RAM. L'accès à l'API mozMobileConnection est interdit sans déclaration explicite dans le manifeste. Les violations de politique entraînent la suspension du compte développeur.
Foire aux questions
KaiOS est un système d'exploitation pour téléphones à clavier basé sur le moteur web Gecko de Mozilla. Il fonctionne sur des appareils avec 256-512 Mo de RAM, prend en charge la 4G VoLTE, le GPS et le Bluetooth. Les applications sont écrites en HTML5, CSS et JavaScript. Selon Counterpoint Research, KaiOS est installé sur plus de 200 millions d'appareils.
La seule stack de développement est HTML5, CSS et JavaScript. KaiOS ne prend pas en charge les langages natifs comme C++ ou Java. Toutes les applications sont des Open Web Apps selon la spécification W3C. Les Web API de Mozilla avec le préfixe moz sont utilisées pour accéder aux fonctions matérielles. L'application est packagée comme une archive ZIP avec manifest.webapp.
La boutique officielle est KaiStore avec inscription sur le KaiOS Developer Portal. L'application est signée avec un certificat développeur et téléchargée au format .zip. La modération prend 3 à 5 jours. Un canal alternatif est la préinstallation sur de nouveaux appareils via un contrat avec le fabricant OEM. La commission de KaiStore est de 30 %.
KaiOS utilise le moteur web Gecko pour les applications HTML5 et nécessite 256-512 Mo de RAM. Android Go exécute des APK natifs sur Dalvik/ART et nécessite 1-2 Go de RAM. KaiOS fonctionne sur des téléphones à clavier jusqu'à 30 dollars, Android Go sur des smartphones économiques à partir de 50 dollars. KaiOS consomme moins d'énergie et dure plus longtemps sur une seule charge.
API principales : MozMobileConnection (réseau), MozTelephony (appels), MozSms (SMS), MozContacts (contacts), MozBluetooth (Bluetooth), Geolocation API, Vibration API, Push API, Notification API. L'accès à l'API de l'appareil photo nécessite le type d'application privileged. La Push API est disponible à partir de KaiOS 3.0.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi