What APIs are supported on CloudMosa's Cloud Phone?

Posted by Tom Barrasso on

How Cloud Phone Works

Cloud Phone Architecture

Cloud Phone is a remote browser with two key components: a thin client application that renders a proprietary vector graphics language on device, and a sandboxed server running Chrome to translate websites comprised of HTML, CSS, and JavaScript into a vector graphics language. Cloud Phone is based on the Puffin web browser and uses the proprietary Puffin Vector Graphics Language. This greatly reduces the hardware requirements and bandwidth for running the thin client, allowing it to work effectively on devices like budget feature phones.

This three-tiered architecture also means that the Cloud Phone client needs to directly integrate with device hardware running on the Mocor/ ThreadX real time operating system (RTOS), and share that information with the Puffin web server, in order to read certain data like the battery level. Support for new Web APIs that need device integration requires an over-the-air (OTA) update to the Cloud Phone client in order for existing users to benefit from new features.

Here’s a quick look at the Web APIs that are, and are not, supported today on Cloud Phone.

Web API Support

Networking

All requests made by a website occur between the Puffin servers and web servers. As a result, Cloud Phone has strong support for protocols, including:

  • XMLHttpRequest (XHR)
  • Fetch, including Streams
  • WebSockets
  • Server-Sent Events
  • Beacon
  • WebTransport (untested)
  • Web Push (unsupported)

WebTransport support hasn’t been confirmed, but likely aligns with the Chromium version corresponding to deployed Puffin servers. Web Push is not available, but support is planned for future Cloud Phone client updates.

Storage

Cloud Phone allows websites to use the most common storage APIs, like:

Websites can persist data using LocalStorage or IndexedDB, as well as temporarily store data in memory using SessionStorage. However, there is no ability to download or access local files, or to request permission for Persistent Storage. Additionally, CacheStorage and other forms of persisted cache are not useful on Cloud Phone because the cache is not persisted across users, or between user sessions.

Computation

Modern websites have access to significant resources to perform computation, and this is true for Cloud Phone as well. Cloud Phone supports:

  • WebWorker
  • WakeLock
  • WebAssembly
  • WebGPU (not available)

Rendering

Surprisingly, Cloud Phone supports common rendering APIs. Cloud Phone was designed to render at 15 frames per second (fps), and has been observed as high as 20 fps. However, real-world performance depends on many factors including network conditions, CPU usage, battery charge, and more.

  • Canvas
  • WebGL

Connectivity

Cloud Phone does not offer access to device hardware for local connectivity or positioning. The following APIs are unsupported on Cloud Phone:

  • Geolocation
  • Web Bluetooth
  • Near Field Communication (NFC)

Moreover, it’s not possible to access information about MediaDevices, device capabilities, or to use WebUSB.

Device Information

The following APIs are available on Cloud Phone, but return values that are either fixed or correspond to the Puffin server, not the client.

  • Network Information
  • Battery
  • Device Memory

Warning: these APIs are present on Cloud Phone, but return incorrect information. For instance, the Battery API always returns level = 1 and charging = true, and navigator.deviceMemory always returns the maximum value of 8. These data likely correspond to the Puffin server, and not end-user device.

Note: it’s not possible to confirm if the Network Information API works correctly on Cloud Phone because devices running Cloud Phone only support one network type: 4G. Valid values for down/uplink speeds are not returned.

Miscellaneous

Here’s a compatibility list of other Web APIs on Cloud Phone:

  • Crypto
  • Fullscreen (not relevant)
  • Vibrate
  • Clipboard
  • Selection
  • Popover
  • WebHID
  • Picture-in-Picture (PiP)
  • Contacts
  • Badging (noop)
  • Screen Orientation
  • Barcode
  • Media Session (available, noop)
  • Encrypted Media (available, no key systems)

The Screen Orientation API is available, but orientation is fixed in portrait-primary and attempts to set an orientation lock throw this error: screen.orientation.lock() is not available on this device.. Encrypted Media is also available, but support for Widevine, Primetime, PlayReady is missing. navigator.setAppBadge is available, but is a no operation (noop). Finally, the Fullscreen API is available but effectively useless since all Cloud Phone widgets run in fullscreen already. Similarly, Picture-in-Picture would not make sense on devices with QQVGA and QVGA screens.

Summary

Cloud Phone is an exciting platform that allows budget feature phone users to access many important services using standard web technology. However, Cloud Phone developers should be aware of which features are and are not supported. Moreover, developers should make use of runtime feature detection to maximize compatibility and support graceful degradation. Finally, it’s always important to validate your widgets on real-world hardware.

Questions?

Join the Community!

Cloud Phone is an emerging platform bringing rich experiences to feature phone users around the world. The author is among the earliest Cloud Phone developers, adapting the first podcast app, PodLP, for Cloud Phone. If you are excited about the possibilities and would like to learn how to bring your service to Cloud Phone, contact the author from the About page.