KaiOS — операційна система для кнопкових телефонів, заснована на веб-технологіях Boot to Gecko (B2G) від Mozilla. Розробка додатків ведеться на HTML5, CSS та JavaScript без необхідності вивчати нативні мови. KaiOS працює на пристроях з 256–512 МБ ОЗП та підтримує 4G VoLTE, GPS, Bluetooth. За даними KaiOS Technologies, у 2025 році налічувалося понад 200 млн активних пристроїв по всьому світу.
Головне
KaiOS — мобільна операційна система для кнопкових телефонів, розроблена компанією KaiOS Technologies. Система базується на відкритому проекті Boot to Gecko (B2G) від Mozilla, який спочатку створювався як веб-заміна Android для ультрабюджетних пристроїв. Перший комерційний реліз відбувся у 2017 році на телефоні Reliance JioPhone в Індії.
За даними Counterpoint Research (Q2 2025), KaiOS займає 2,8% світового ринку мобільних ОС, поступаючись Android (72%) та iOS (27%), але випереджаючи інші платформи. В Індії частка KaiOS досягає 14% завдяки програмі JioPhone. Середня ціна пристрою на KaiOS — 20-30 доларів США, що робить систему ключовою для ринків, що розвиваються.
Ключова особливість KaiOS — всі додатки є веб-додатками. Розробник пише код на HTML5, CSS та JavaScript, пакує в ZIP-архів з маніфестом та публікує в KaiStore. Система не підтримує встановлення нативних APK-файлів — тільки Open Web Apps за специфікацією W3C Widget.
KaiOS 2.5 (2018) — перша стабільна версія на ядрі Gecko 48, встановлена на JioPhone 1. KaiOS 2.5.3 (2021) — підтримка Google Assistant, Google Maps Go, YouTube Go. KaiOS 3.0 (2022) — Gecko 84, покращена продуктивність, WebGL 2.0, CSS Grid. KaiOS 3.1 (2024) — оптимізація під 256 МБ ОЗП, новий Web API Audio Channel, покращена безпека TLS 1.3.
| Версія KaiOS | Рік | Gecko | Ключова зміна |
|---|---|---|---|
| 2.5 | 2018 | 48 | Перший стабільний реліз, JioPhone 1 |
| 2.5.3 | 2021 | 48 | Google Apps, Assistant, покращена безпека |
| 3.0 | 2022 | 84 | ES2020, WebGL 2.0, CSS Grid, покращена продуктивність JS |
| 3.1 | 2024 | 84 | 256 МБ ОЗП, TLS 1.3, Audio Channel API |
Архітектура KaiOS складається з трьох ключових шарів: ядро Linux (Gonk), веб-рушій Gecko та інтерфейс користувача Gaia. Gonk — апаратно-залежний шар, що включає драйвери, HAL (Hardware Abstraction Layer), стек модема RIL (Radio Interface Layer) та підтримку сенсорів. На основі Android Open Source Project (AOSP) взято завантажувач, драйвери та деякі бібліотеки.
Gonk надає Gecko доступ до апаратури: камери, Bluetooth, Wi-Fi, GPS, аудіо, вібрації, датчиків. На відміну від Android, де додатки пишуться під Dalvik/ART, у KaiOS додатки звертаються до апаратури через Web API, які транслюються Gecko в Gonk IPC. Радіо-інтерфейс (RIL) забезпечує 4G VoLTE, SMS, USSD та управління SIM-картами.
Gecko в KaiOS — це не просто браузерний рушій, а повноцінне середовище виконання додатків. Всі HTML5-додатки працюють всередині Gecko Process Manager, який ізолює кожен додаток в окремий процес. Gecko реалізує специфікацію W3C Widget Packaging та розширення Mozilla для доступу до апаратури. Версія Gecko визначає, які Web API доступні розробнику.
Gaia — це веб-інтерфейс самої ОС: екран блокування, домашній екран (launcher), панель сповіщень, екран набору номера, контакти, SMS-клієнт. Всі системні додатки — це ті ж Open Web Apps. Розробник може замінити стандартну камеру або клавіатуру власним додатком, зареєструвавши відповідний обробник активності в маніфесті.
// Перевірка версії KaiOS та доступності 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 };
}
// Перевірка наявності Google Apps (тільки KaiOS 2.5.3+)
const systemInfo = checkKaiOSVersion();
console.log('KaiOS version:', systemInfo.version);
console.log('Available APIs:', JSON.stringify(systemInfo.features, null, 2));
// Використання вібрації з перевіркою доступності
function triggerHapticFeedback() {
if (navigator.vibrate) {
navigator.vibrate([200, 100, 200]); // вібрація, пауза, вібрація
}
}Функція checkKaiOSVersion читає User Agent для визначення версії KaiOS та перевіряє доступність ключових Web API. У версії 2.5 доступні mozMobileConnection, mozTelephony, mozSms — вони відсутні у звичайних браузерах та унікальні для KaiOS. Функція triggerHapticFeedback використовує Vibration API зі зворотною сумісністю.
Додаток KaiOS — це ZIP-архів (формат .zip, не .apk), що містить HTML-файли, CSS, JavaScript, зображення та маніфест. Структура мінімального додатку включає manifest.webapp (опис додатку), index.html (точка входу), style.css та icon.png (квадратна іконка 90×90 пікселів). Маніфест відповідає специфікації W3C Manifest for Web Apps.
Файл manifest.webapp — кореневий конфігураційний файл додатку KaiOS. Обов'язкові поля: name (назва), description (опис до 140 символів), launch_path (шлях до index.html), icons (іконки розміром 30×30, 60×60, 90×90, 120×120). Поле type: 'certified' (системні додатки), 'privileged' (доступ до Web API), 'web' (без спеціальних прав). Дозволи для privileged-додатків вказуються в масиві permissions.
// manifest.webapp — конфігурація додатку KaiOS
{
"name": "Ліхтарик",
"description": "Вмикає та вимикає спалах камери",
"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": "Потрібен для ввімкнення спалаху"
}
},
"default_locale": "ru",
"orientation": "portrait-primary",
"fullscreen": true
}Маніфест вказує, що додаток має тип privileged — це дає доступ до camera API через permissions. Розмір іконок строго 30×30, 60×60, 90×90 та 120×120 пікселів. Поле orientation обмежує портретну орієнтацію — на кнопкових телефонах зазвичай немає акселерометра для перевороту екрану. fullscreen: true приховує рядок стану.
HTML5-сторінка в KaiOS використовує стандартні теги з урахуванням обмеженого екрану (зазвичай 240×320 пікселів). Мета-тег viewport обов'язковий: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">. KaiOS не підтримує touch-події (немає сенсорного екрану на кнопкових телефонах), вся навігація йде через клавіші: ArrowUp, ArrowDown для переміщення, Enter для вибору, Back для повернення.
// index.html — простий додаток-ліхтарик для KaiOS
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Фонарик</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="app">
<div id="status" class="status-off">Выключен</div>
<div id="hint">Нажмите Enter для включения</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('Камера недоступна: ' + 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 ? 'Включен' : 'Выключен';
statusEl.className = isFlashOn ? 'status-on' : 'status-off';
} catch (e) {
showError('Ошибка: ' + e.message);
}
}
// Обробка апаратної кнопки Enter
document.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
toggleFlash();
}
});
initCamera();
</script>
</body>
</html>Додаток Ліхтарик використовує MozCamera API для керування спалахом камери. Користувач натискає апаратну кнопку Enter — спрацьовує обробник keydown, що перемикає flashMode між on та off. Статус відображається в текстовому блоці з класами status-on/status-off для візуальної індикації. MozCamera API доступний тільки для privileged-додатків з дозволом camera в маніфесті.
KaiOS Web API — набір JavaScript-інтерфейсів, що надають доступ до апаратних можливостей телефону. Більшість API є пропрієтарними розширеннями Mozilla (moz-префікс) та недоступні у звичайних браузерах. Для використання API додаток повинен мати тип privileged або certified в маніфесті.
MozMobileConnection — інформація про мережу: оператор, рівень сигналу, тип мережі (4G/3G/2G), IMEI, статус роумінгу. MozTelephony — керування дзвінками: набір номера, прийняття, завершення, конференц-зв'язок, статус виклику. MozSms — відправка та прийом SMS, MMS, керування повідомленнями в SIM. MozContacts — читання та запис телефонної книги. MozBluetooth — керування Bluetooth: виявлення пристроїв, сполучення, передача файлів. Push API — прийом push-сповіщень від сервера.
// Робота з контактами та дзвінками через Web API KaiOS
const TelephonyManager = {
// Здійснення виклику за номером
async makeCall(phoneNumber) {
if (!navigator.mozTelephony) {
throw new Error('Telephony API недоступен');
}
const call = navigator.mozTelephony.dial(phoneNumber);
call.onconnected = () => console.log('Звонок установлен');
call.ondisconnected = () => console.log('Звонок завершён');
return call;
},
// Отримання списку контактів з телефонної книги
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);
};
});
},
// Відправка SMS
async sendSms(phoneNumber, message) {
if (!navigator.mozSms) {
throw new Error('SMS API недоступен');
}
const request = navigator.mozSms.send(phoneNumber, message);
return new Promise((resolve, reject) => {
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
};
// Приклад використання
TelephonyManager.getContacts()
.then(contacts => console.log('Найдено контактов:', contacts.length))
.catch(err => console.error(err));Об'єкт TelephonyManager об'єднує три ключові API KaiOS: mozTelephony для дзвінків, mozContacts для телефонної книги та mozSms для повідомлень. getAll() з курсором — патерн для асинхронного читання великих обсягів даних (типово для контактів на 1000+ записів). Всі API повертають DOMRequest з обробниками onsuccess та onerror.
Web API KaiOS мають обмеження: API дзвінків та SMS доступні тільки на телефонах (не на планшетах), камера — тільки за наявності фізичної камери, Bluetooth — обмежений профіль HSP/HFP. Push API вимагає підтримки сервера Google Firebase (FCM) або власного сервера. API геолокації використовує A-GPS або Cell ID залежно від апаратної підтримки.
| API | Тип додатку | Доступність | Версія KaiOS |
|---|---|---|---|
| MozMobileConnection | privileged | Всі телефони | 2.5+ |
| MozTelephony | privileged | Тільки телефони | 2.5+ |
| MozSms | privileged | Тільки телефони | 2.5+ |
| MozContacts | privileged | Всі телефони | 2.5+ |
| MozBluetooth | certified | З Bluetooth-модулем | 2.5+ |
| Geolocation API | web | З GPS/Cell ID | 2.5+ |
| Push API | privileged | З інтернетом | 3.0+ |
| WebGL 2.0 | web | З GPU-прискоренням | 3.0+ |
Інтерфейс користувача KaiOS орієнтований на керування з клавіатури T9 та апаратних кнопок. Стандартна роздільна здатність екрану — 240×320 пікселів (QVGA) у більшості кнопкових телефонів. Відсутність сенсорного екрану означає, що вся навігація реалізується через keydown/keyup події: ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Enter, Back (або Escape).
KaiOS не підтримує CSS :focus у звичному вигляді — фокус керується через tabindex та JavaScript. Розробник повинен вручну відстежувати поточний вибраний елемент та переміщати фокус при натисканні клавіш. Рекомендується використовувати data-index на елементах списку для спрощення навігації. Вибраний елемент зазвичай підсвічується через клас .selected з CSS-властивістю background-color контрастного кольору.
// Фокусна навігація по списку для 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();
}
}
// Ініціалізація навігації для списку меню
const nav = new ListNavigation('#menu-list');
nav.container.addEventListener('itemselected', (e) => {
console.log('Выбран элемент:', e.detail.index);
});Клас ListNavigation реалізує повноцінну фокусну навігацію для KaiOS. ArrowUp/ArrowDown переміщують фокус циклічно по елементах з data-index. Enter викликає кастомну подію itemselected. Backspace/Escape повертають на попередній екран. scrollIntoView з block: nearest автоматично прокручує екран при виході за видиму область.
KaiOS 2.5 підтримує CSS 2.1 + частково CSS3 (border-radius, box-shadow, gradients). Flexbox підтримується в KaiOS 2.5 частково, в KaiOS 3.0 — повністю включаючи CSS Grid. Рекомендується використовувати float-верстку з фіксованою шириною для сумісності. Шрифт за замовчуванням — TizenSans або Noto Sans CJK для азійських ринків. Розмір тексту — 14-16 пікселів для основного контенту, 18-20 для заголовків.
KaiStore — офіційний магазин додатків для KaiOS, попередньо встановлений на всіх пристроях. Розробник реєструється в KaiOS Developer Portal (developer.kaiostech.com), завантажує підписаний ZIP-пакет та заповнює опис. Модерація перевіряє безпеку, стабільність та відповідність політиці контенту. Середній час перевірки — 3-5 робочих днів.
KaiOS вимагає цифрового підпису додатку через KaiOS Certificate. Розробник генерує пару ключів (приватний + публічний) через утиліту kaios-sign, відправляє публічний ключ в KaiOS Developer Portal та отримує сертифікат. Підписаний .zip-файл містить підпис у папці META-INF. Без підпису додаток встановлюється тільки на dev-пристроях.
KaiStore підтримує безкоштовні додатки, рекламу через KaiOS Ads SDK та in-app purchases через операторський білінг (Direct Carrier Billing). Комісія KaiStore — 30% від доходу. Альтернативний канал — попереднє встановлення через OEM-виробників (Jio, Nokia, Alcatel, Doro). Для попереднього встановлення потрібен прямий контракт з виробником пристроїв.
| Етап | Дія | Термін |
|---|---|---|
| Реєстрація | Створення облікового запису в KaiOS Developer Portal | 1 день |
| Підпис | Генерація ключа, отримання сертифіката | 1-2 дні |
| Збірка | Пакування .zip з маніфестом та підписом | 1 година |
| Завантаження | Завантаження пакета, заповнення опису | 1 день |
| Модерація | Перевірка безпеки та якості | 3-5 днів |
| Публікація | Реліз в KaiStore для всіх регіонів | 1 день |
KaiStore не підтримує платні додатки в ряді країн (оплата тільки через операторський білінг). Розмір додатку обмежений 10 МБ для завантаження через 2G/3G-мережі. Додаток не повинен використовувати більше 50 МБ оперативної пам'яті. Заборонено доступ до mozMobileConnection API без явного зазначення в маніфесті. Порушення політик призводить до блокування облікового запису розробника.
Часті запитання
KaiOS — операційна система для кнопкових телефонів на основі веб-рушія Gecko від Mozilla. Працює на пристроях з 256-512 МБ ОЗП, підтримує 4G VoLTE, GPS та Bluetooth. Додатки пишуться на HTML5, CSS та JavaScript. За даними Counterpoint Research, KaiOS встановлена на більш ніж 200 млн пристроїв.
Єдиний стек розробки — HTML5, CSS та JavaScript. KaiOS не підтримує нативні мови на кшталт C++ або Java. Всі додатки є Open Web Apps за специфікацією W3C. Для доступу до апаратних функцій використовуються Mozilla Web API з префіксом moz. Додаток пакується в ZIP-архів з manifest.webapp.
Офіційний магазин — KaiStore з реєстрацією в KaiOS Developer Portal. Додаток підписується сертифікатом розробника та завантажується у форматі .zip. Модерація займає 3-5 днів. Альтернативний канал — попереднє встановлення на нові пристрої через контракт з OEM-виробником. Комісія KaiStore — 30%.
KaiOS використовує веб-рушій Gecko для HTML5-додатків та потребує 256-512 МБ ОЗП. Android Go запускає нативні APK на Dalvik/ART та потребує 1-2 ГБ ОЗП. KaiOS працює на кнопкових телефонах ціною до $30, Android Go — на бюджетних смартфонах від $50. KaiOS споживає менше енергії та працює довше без підзарядки.
Основні API: MozMobileConnection (мережа), MozTelephony (дзвінки), MozSms (SMS), MozContacts (контакти), MozBluetooth (Bluetooth), Geolocation API, Vibration API, Push API, Notification API. Для доступу до camera API потрібен тип додатку privileged. Push API доступний починаючи з KaiOS 3.0.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.