Skip to content

thesysdev/appless

Repository files navigation

AppLess · a phone with no apps. just ask.

Every screen is generated the moment you ask, streamed live, and rendered in real native UI: Cupertino on iOS, Material 3 on Android.

openui.com  ·  Demo  ·  Quick start  ·  How it works

Expo SDK 54 React Native License: MIT


Demo

AppLess demo

There are no apps to install, no menus to learn, no home screen full of icons. You open AppLess and ask for what you want, and the screen for it is generated on the spot: a weather dashboard, a restaurant list with live search, a booking form, a chat thread. Tap anything and the next screen is generated too, already prefetched so it appears instantly.

It is a demo of what a generative UI operating system feels like, built entirely on OpenUI, the open standard for LLM-generated interfaces. The model does not return JSON or hand-written screens; it writes openui-lang, a compact streaming-first UI language that the OpenUI renderer turns into live, interactive native components.

Warning

AppLess is an experiment by the creators of OpenUI to push the boundaries of Generative UI, with no real integrations behind it. Screen content is generated by the model: turn on the optional web and image tools and it can be grounded in real data (real places, prices, news, photos); without them it is plausible fiction. The actions are always simulated, though. "Order placed", "flight booked", "payment sent", and live health stats do nothing and reflect no real state, because nothing is wired up yet. It is a glimpse of what a generative-UI OS could feel like, not a working replacement for your apps, at least until someone makes it real.

Quick start

git clone https://github.com/thesysdev/appless.git
cd appless
npm install            # postinstall applies the react-lang patch
npm run ios            # or: npm run android, or npm start for Expo Go

On first launch the app asks for a free Cerebras API key and stores it on-device (Keychain / Keystore). Generation runs straight from the phone to the model. There is no backend to deploy.

To skip the key prompt during development, or to turn on optional tools, drop a .env.local in the project root:

EXPO_PUBLIC_CEREBRAS_API_KEY=csk-...    # skip the first-launch key screen
# EXPO_PUBLIC_EXA_API_KEY=              # enable the web_search tool (Exa)
# EXPO_PUBLIC_UNSPLASH_ACCESS_KEY=      # real semantic photos (else LoremFlickr)
# EXPO_PUBLIC_GENOS_MODEL=gemma-4-31b
# EXPO_PUBLIC_CEREBRAS_BASE_URL=        # any OpenAI-compatible endpoint

Expo SDK 54 is pinned to match the Expo Go build on the App Store and Play Store. If your Expo Go reports a different SDK, run npx expo install expo@^<version> && npx expo install --fix.

How it works

flowchart LR
  A["ui/contract.tsx<br/>(one contract)"] --> B["system prompt<br/>(generated)"]
  B --> C["Cerebras LLM<br/>(streaming)"]
  C --> D["openui-lang<br/>(the DSL)"]
  D --> E["Renderer<br/>(react-lang)"]
  E --> F["native UI<br/>(Cupertino / Material)"]
Loading

One contract, ui/contract.tsx, is the single source of truth for every component the model can use: its name, its props, and a description. That contract generates the system prompt, so the model always knows exactly the UI vocabulary the app can render. As tokens stream back, the OpenUI <Renderer> parses openui-lang incrementally and paints real native components, live, before the response has even finished.

Two design systems implement that one contract, so the same generated screen renders as Cupertino on iOS and Material 3 on Android with no change to the prompt. Tapping a row, chip, or button streams the next screen; the app speculatively prefetches likely destinations so navigation feels instant.

Real tools, in the app. When a screen needs live facts (news, prices, real places), the model calls a web_search tool (Exa) mid-stream and composes the screen from the results, sources cited. Images are referenced as semantic queries the app resolves on-device.

Packages

AppLess is a thin, native shell over the OpenUI runtime. The heavy lifting is the OpenUI stack:

Package Role
@openuidev/react-lang The OpenUI runtime: parses streaming openui-lang and renders it through a pluggable component library. The core of the whole app.
@openuidev/cli Generates the system prompt from the component contract (npm run generate:prompt).
expo / react-native The native app runtime (Expo SDK 54, New Architecture).
react-native-svg Chart geometry shared across both design systems.
react-native-webview Keyless Google Maps embed for MapView.
expo-linear-gradient Card and hero gradients.
lucide-react-native / phosphor-react-native Icon sets for generated rows and the home shell.
expo-secure-store On-device storage for the user's API key (Keychain / Keystore).
zod Prop schemas in the component contract.
@react-native-community/slider Native slider input for forms.

Screens are generated by Cerebras; live search is powered by Exa. Both are bring-your-own-key.

Design systems

The model-facing contract and the design languages are deliberately separate so platforms can look native without ever drifting the prompt:

  • ui/contract.tsx - component names, prop schemas, and descriptions. The single source that generates the system prompt.
  • ui/cupertino/ - iOS renderers: inset grouped lists, icon badges, segmented tabs, iOS switch.
  • ui/material/ - Android renderers: Material 3 tonal surfaces, ripple, filter chips, underline tabs, native switch.
  • ui/shared/ - chart, map, form, and image logic shared by every design system.

Tests

npm test    # renders exemplar generated screens through the full
            # parser -> Renderer -> native component pipeline (jest-expo,
            # headless), for both Cupertino and Material renderer sets

Fork it and make it yours

The actions and state are simulated only because nothing is wired to a real service yet, and that missing piece is usually just one integration. We would love for you to fork AppLess and make it real:

  • Real food ordering - wire in the DoorDash or Uber Eats API and the food screens order you actual dinner.
  • A real Yelp - add the Google Places API so "restaurants nearby" returns real venues, hours, photos, and reviews.
  • A real wallet - connect Plaid and the banking screens show your real balance and transactions.
  • A real day - hook up the Google Calendar API and "what does my day look like" becomes actually your day.
  • Real music - drop in the Spotify API and the player controls real playback.

Pick a screen, give the model a tool that returns real data and somewhere to send the action, and the demo turns into a working app. Open a PR - we would love to see what you build.

Learn more

AppLess is one of many things you can build on OpenUI. To use the same generative-UI stack in your own product, start at openui.com and the OpenUI repository.

Telemetry

AppLess sends one anonymous appless_app_launched event to PostHog on startup, so we can see how many people build and run the experiment. It carries only an anonymous per-device id and your platform (iOS / Android / web). No prompts, screen content, API keys, or personal data are ever collected. Opt out any time:

EXPO_PUBLIC_POSTHOG_DISABLED=1   # or the standard DO_NOT_TRACK=1

License

MIT. See LICENSE.

About

What if your phone had no apps

Topics

Resources

License

Stars

161 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors