KaiOS — операционна система за телефони с клавиши, базирана на уеб технологиите Boot to Gecko (B2G) от Mozilla. Разработката на приложения се извършва на HTML5, CSS и JavaScript, без необходимост от изучаване на родни езици. KaiOS работи на устройства с 256–512 MB RAM и поддържа 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 MB RAM, ново Web API Audio Channel, подобрена сигурност TLS 1.3.
| Версия на KaiOS | Година | Gecko | Ключова промяна |
|---|---|---|---|
| 2.5 | 2018 | 48 | Първо стабилно издание, JioPhone 1 |
| 2.5.3 | 2021 | 48 | Google Apps, Асистент, подобрена сигурност |
| 3.0 | 2022 | 84 | ES2020, WebGL 2.0, CSS Grid, подобрена JS производителност |
| 3.1 | 2024 | 84 | 256 MB RAM, 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) са взети bootloader, драйвери и някои библиотеки.
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' (без специални права). Разрешенията за 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 не поддържа сензорни събития (няма сензорен екран на телефони с клавиши), цялата навигация става чрез клавиши: 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.kaiostech.com), качва подписания ZIP пакет и попълва описанието. Модерирането проверява сигурността, стабилността и съответствието с политиката за съдържание. Средното време за проверка — 3-5 работни дни.
KaiOS изисква цифров подпис на приложението чрез KaiOS Certificate. Разработчикът генерира чифт ключове (частен + публичен) чрез помощната програма kaios-sign, изпраща публичния ключ до портала за разработчици на KaiOS и получава сертификат. Подписаният .zip файл съдържа подписа в папка META-INF. Без подпис приложението се инсталира само на устройства за разработка.
KaiStore поддържа безплатни приложения, реклама чрез KaiOS Ads SDK и покупки в приложението чрез операторско фактуриране (Direct Carrier Billing). Комисионната на KaiStore — 30% от приходите. Алтернативен канал — предварително инсталиране чрез OEM производители (Jio, Nokia, Alcatel, Doro). За предварително инсталиране е необходим пряк договор с производителя на устройства.
| Етап | Действие | Срок |
|---|---|---|
| Регистрация | Създаване на акаунт в портала за разработчици на KaiOS | 1 ден |
| Подпис | Генериране на ключ, получаване на сертификат | 1-2 дни |
| Изграждане | Опаковане на .zip с манифест и подпис | 1 час |
| Качване | Качване на пакет, попълване на описание | 1 ден |
| Модериране | Проверка на сигурността и качеството | 3-5 дни |
| Публикуване | Издание в KaiStore за всички региони | 1 ден |
KaiStore не поддържа платени приложения в някои държави (плащане само чрез операторско фактуриране). Размерът на приложението е ограничен до 10 MB за изтегляне чрез 2G/3G мрежи. Приложението не трябва да използва повече от 50 MB RAM. Достъпът до API mozMobileConnection без изрично посочване в манифеста е забранен. Нарушаването на политиките води до блокиране на акаунта на разработчика.
Често задавани въпроси
KaiOS — операционна система за телефони с клавиши, базирана на уеб двигателя Gecko от Mozilla. Работи на устройства с 256-512 MB RAM, поддържа 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. Приложението се подписва със сертификат на разработчик и се качва във формат .zip. Модерирането отнема 3-5 дни. Алтернативен канал — предварително инсталиране на нови устройства чрез договор с OEM производител. Комисионната на KaiStore — 30%.
KaiOS използва уеб двигателя Gecko за HTML5 приложения и изисква 256-512 MB RAM. Android Go стартира родни APK на Dalvik/ART и изисква 1-2 GB RAM. KaiOS работи на телефони с клавиши на цена до 30 USD, Android Go — на бюджетни смартфони от 50 USD. 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също