KaiOS: що це таке, архітектура системи та веб-додатки

Автор: IT Sectr Опубліковано: 2026-02-07 Час читання: 13 хв

KaiOS — операційна система для кнопкових телефонів, заснована на веб-технологіях Boot to Gecko (B2G) від Mozilla. Розробка додатків ведеться на HTML5, CSS та JavaScript без необхідності вивчати нативні мови. KaiOS працює на пристроях з 256–512 МБ ОЗП та підтримує 4G VoLTE, GPS, Bluetooth. За даними KaiOS Technologies, у 2025 році налічувалося понад 200 млн активних пристроїв по всьому світу.

Головне

  • KaiOS — веб-орієнтована ОС для кнопкових телефонів на рушієві Gecko від Mozilla
  • HTML5/CSS/JS — стек розробки, що не вимагає вивчення нативних мов програмування
  • KaiStore — офіційний магазин додатків з модерацією та підписанням пакетів
  • Web API — MozMobileConnection, MozTelephony, MozSms для доступу до апаратних функцій телефону
  • Gecko — версія 48 (KaiOS 2.5) або 84 (KaiOS 3.0) визначає доступність API

Що таке KaiOS?

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

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.5201848Перший стабільний реліз, JioPhone 1
2.5.3202148Google Apps, Assistant, покращена безпека
3.0202284ES2020, WebGL 2.0, CSS Grid, покращена продуктивність JS
3.1202484256 МБ ОЗП, TLS 1.3, Audio Channel API

Архітектура KaiOS: ядро Linux та рушій Gecko

Архітектура KaiOS складається з трьох ключових шарів: ядро Linux (Gonk), веб-рушій Gecko та інтерфейс користувача Gaia. Gonk — апаратно-залежний шар, що включає драйвери, HAL (Hardware Abstraction Layer), стек модема RIL (Radio Interface Layer) та підтримку сенсорів. На основі Android Open Source Project (AOSP) взято завантажувач, драйвери та деякі бібліотеки.

Gonk — апаратний шар

Gonk надає Gecko доступ до апаратури: камери, Bluetooth, Wi-Fi, GPS, аудіо, вібрації, датчиків. На відміну від Android, де додатки пишуться під Dalvik/ART, у KaiOS додатки звертаються до апаратури через Web API, які транслюються Gecko в Gonk IPC. Радіо-інтерфейс (RIL) забезпечує 4G VoLTE, SMS, USSD та управління SIM-картами.

Gecko — веб-рушій

Gecko в KaiOS — це не просто браузерний рушій, а повноцінне середовище виконання додатків. Всі HTML5-додатки працюють всередині Gecko Process Manager, який ізолює кожен додаток в окремий процес. Gecko реалізує специфікацію W3C Widget Packaging та розширення Mozilla для доступу до апаратури. Версія Gecko визначає, які Web API доступні розробнику.

Gaia — інтерфейс користувача

Gaia — це веб-інтерфейс самої ОС: екран блокування, домашній екран (launcher), панель сповіщень, екран набору номера, контакти, SMS-клієнт. Всі системні додатки — це ті ж Open Web Apps. Розробник може замінити стандартну камеру або клавіатуру власним додатком, зареєструвавши відповідний обробник активності в маніфесті.

javascript
// Перевірка версії 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: структура та маніфест

Додаток KaiOS — це ZIP-архів (формат .zip, не .apk), що містить HTML-файли, CSS, JavaScript, зображення та маніфест. Структура мінімального додатку включає manifest.webapp (опис додатку), index.html (точка входу), style.css та icon.png (квадратна іконка 90×90 пікселів). Маніфест відповідає специфікації W3C Manifest for Web Apps.

Маніфест manifest.webapp

Файл 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.

javascript
// 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 приховує рядок стану.

Структура HTML-сторінки

HTML5-сторінка в KaiOS використовує стандартні теги з урахуванням обмеженого екрану (зазвичай 240×320 пікселів). Мета-тег viewport обов'язковий: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">. KaiOS не підтримує touch-події (немає сенсорного екрану на кнопкових телефонах), вся навігація йде через клавіші: ArrowUp, ArrowDown для переміщення, Enter для вибору, Back для повернення.

javascript
// 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 в маніфесті.

Web API KaiOS: робота з телефоном та апаратурою

KaiOS Web API — набір JavaScript-інтерфейсів, що надають доступ до апаратних можливостей телефону. Більшість API є пропрієтарними розширеннями Mozilla (moz-префікс) та недоступні у звичайних браузерах. Для використання API додаток повинен мати тип privileged або certified в маніфесті.

Основні Web API

MozMobileConnection — інформація про мережу: оператор, рівень сигналу, тип мережі (4G/3G/2G), IMEI, статус роумінгу. MozTelephony — керування дзвінками: набір номера, прийняття, завершення, конференц-зв'язок, статус виклику. MozSms — відправка та прийом SMS, MMS, керування повідомленнями в SIM. MozContacts — читання та запис телефонної книги. MozBluetooth — керування Bluetooth: виявлення пристроїв, сполучення, передача файлів. Push API — прийом push-сповіщень від сервера.

javascript
// Робота з контактами та дзвінками через 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

Web API KaiOS мають обмеження: API дзвінків та SMS доступні тільки на телефонах (не на планшетах), камера — тільки за наявності фізичної камери, Bluetooth — обмежений профіль HSP/HFP. Push API вимагає підтримки сервера Google Firebase (FCM) або власного сервера. API геолокації використовує A-GPS або Cell ID залежно від апаратної підтримки.

APIТип додаткуДоступністьВерсія KaiOS
MozMobileConnectionprivilegedВсі телефони2.5+
MozTelephonyprivilegedТільки телефони2.5+
MozSmsprivilegedТільки телефони2.5+
MozContactsprivilegedВсі телефони2.5+
MozBluetoothcertifiedЗ Bluetooth-модулем2.5+
Geolocation APIwebЗ GPS/Cell ID2.5+
Push APIprivilegedЗ інтернетом3.0+
WebGL 2.0webЗ GPU-прискоренням3.0+

UI та навігація: T9, кнопки та екран 240×320

Інтерфейс користувача 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 контрастного кольору.

javascript
// Фокусна навігація по списку для 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 автоматично прокручує екран при виході за видиму область.

CSS для KaiOS

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 та публікація додатків

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 Portal1 день
ПідписГенерація ключа, отримання сертифіката1-2 дні
ЗбіркаПакування .zip з маніфестом та підписом1 година
ЗавантаженняЗавантаження пакета, заповнення опису1 день
МодераціяПеревірка безпеки та якості3-5 днів
ПублікаціяРеліз в KaiStore для всіх регіонів1 день

Обмеження KaiStore

KaiStore не підтримує платні додатки в ряді країн (оплата тільки через операторський білінг). Розмір додатку обмежений 10 МБ для завантаження через 2G/3G-мережі. Додаток не повинен використовувати більше 50 МБ оперативної пам'яті. Заборонено доступ до mozMobileConnection API без явного зазначення в маніфесті. Порушення політик призводить до блокування облікового запису розробника.

Часті запитання

Що таке KaiOS?

KaiOS — операційна система для кнопкових телефонів на основі веб-рушія Gecko від Mozilla. Працює на пристроях з 256-512 МБ ОЗП, підтримує 4G VoLTE, GPS та Bluetooth. Додатки пишуться на HTML5, CSS та JavaScript. За даними Counterpoint Research, KaiOS встановлена на більш ніж 200 млн пристроїв.

Які мови використовуються для розробки під KaiOS?

Єдиний стек розробки — HTML5, CSS та JavaScript. KaiOS не підтримує нативні мови на кшталт C++ або Java. Всі додатки є Open Web Apps за специфікацією W3C. Для доступу до апаратних функцій використовуються Mozilla Web API з префіксом moz. Додаток пакується в ZIP-архів з manifest.webapp.

Як поширювати додатки KaiOS?

Офіційний магазин — KaiStore з реєстрацією в KaiOS Developer Portal. Додаток підписується сертифікатом розробника та завантажується у форматі .zip. Модерація займає 3-5 днів. Альтернативний канал — попереднє встановлення на нові пристрої через контракт з OEM-виробником. Комісія KaiStore — 30%.

Чим KaiOS відрізняється від Android Go?

KaiOS використовує веб-рушій Gecko для HTML5-додатків та потребує 256-512 МБ ОЗП. Android Go запускає нативні APK на Dalvik/ART та потребує 1-2 ГБ ОЗП. KaiOS працює на кнопкових телефонах ціною до $30, Android Go — на бюджетних смартфонах від $50. KaiOS споживає менше енергії та працює довше без підзарядки.

Які API доступні розробникам 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.

Підсумки

  • KaiOS — веб-ОС для кнопкових телефонів на Gecko (B2G), що підтримує HTML5-додатки з 256-512 МБ ОЗП
  • Архітектура складається з Gonk (ядро Linux + драйвери), Gecko (веб-рушій) та Gaia (UI на HTML5)
  • Розробка ведеться на HTML5/CSS/JS, додаток — ZIP з manifest.webapp та цифровим підписом
  • Web API включають MozTelephony, MozSms, MozContacts, MozMobileConnection, MozBluetooth, Geolocation
  • Навігація по апаратних кнопках (Arrow, Enter, Back) реалізується через keydown/keyup події
  • KaiStore — магазин додатків з модерацією 3-5 днів, комісією 30% та операторським білінгом
  • KaiOS 3.0 додає Gecko 84, ES2020, WebGL 2.0, CSS Grid, Push API та покращену продуктивність

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також