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. Разработчик может заменить стандартную камеру или клавиатуру собственным приложением, зарегистрировав соответствующие activity handler в манифесте.
// Проверка версии 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' (без специальных прав). Permissions для 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-prefixed) и недоступны в обычных браузерах. Для использования 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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также