Open edX mobile · iOS and Android

One app.
Every campus
you run.

The Open edX mobile app can now serve several Open edX platforms from one iOS and one Android build. Learners pick their school, stay signed in to more than one, and switch without signing in again. Each school keeps its own branding, data and session.

This demo lists every LMS added here, so you can see the picker with real platforms in it.

One build. Several learning sites.
01 / iOS
iOS Learning Sites with Verawood North selected and Verawood South also signed in.
02 / Android
Android Learning Sites with Verawood North selected and Verawood South also signed in.
Pick a site. Switch. Stay signed in.
Real app screens. Verawood North/South are two test platforms running on a local Open edX.

How it works

Where multi-tenant fits.

01 / Today

Single site

One app per platform. Every Open edX site that wants a mobile app builds, signs and publishes its own.

02 / This project

Multi-tenant

One provider, one app,
several platforms.

A university with faculties on separate Open edX sites, or a company running academies for different clients, ships one app. The provider decides the list: compiled into the build, or fetched from a URL they host.

03 / Next

Universal

One app for everyone, the way Moodle and Canvas work. Learners find their school in a public directory. Multi-tenant is the first step: the app already holds many sites at once.

What stays separate

  • Sign-in and tokens
  • Branding (color, logo, header)
  • Downloaded videos and cached courses
  • Push registration

Switching keeps you signed in to the site you left.

About this demo

Why you'll see
other people's platforms.

A real multi-tenant app lists only its provider's platforms. This demo does the opposite on purpose: every LMS added here goes into one shared list, and both demo apps read it. It is the quickest way to try the picker, switching and per-site branding with a platform you know.

  • Your LMS appears for everyone who installs the demo.
  • You can remove it at any time from your workspace.
  • The apps pick up changes the next time they are opened.
A platform's own branding
Verawood South's iOS learning dashboard with pink accents and the Open edX Demo Course.
Verawood South · iOS · local Open edX test platform.

Three ways in

Try it.

A / Start with your platform

Add your LMS

  1. Create an account.
  2. Run the wizard: your platform's address and a mobile OAuth client. The wizard checks both live.
  3. Open the demo app; your platform is in the list.

B / On your phone

Install the demo app

Install links appear here once each build is approved.

iOS: open the TestFlight link on your iPhone; you need Apple's TestFlight app.

Android: your phone asks to allow installs from the browser; the APK is signed by Raccoon Gang and is not on Google Play.

Live catalog

In the demo right now.

The live catalog loads with JavaScript. You can also read the catalog JSON.

The app shows the site picker once the list has at least two platforms; with one, it opens straight to that platform's sign-in.

For developers

The catalog format.

Both apps read the same schema from two places: INSTANCES in the build's config.yaml (keys in UPPER_SNAKE_CASE) and a JSON file at INSTANCES_CATALOG_URL (keys in snake_case).

JSON

{
  "instances": [
    {
      "key": "north",
      "name": "North Campus",
      "api_host_url": "https://lms.north.example.edu",
      "oauth_client_id": "mobile-north",
      "color": "#1F5FBF",
      "theme": {
        "light": { "accent_color": "#1F5FBF" },
        "dark": { "accent_color": "#7FA8FF" },
        "logo_url": "https://cdn.example.edu/north-logo.png"
      }
    },
    {
      "key": "south",
      "name": "South Campus",
      "api_host_url": "https://lms.south.example.edu",
      "oauth_client_id": "mobile-south"
    }
  ]
}

config.yaml

API_HOST_URL: 'https://lms.north.example.edu'
OAUTH_CLIENT_ID: 'mobile-north'
INSTANCES_CATALOG_URL: 'https://example.edu/instances.json'
INSTANCES:
  - KEY: 'north'
    NAME: 'North Campus'
    API_HOST_URL: 'https://lms.north.example.edu'
    OAUTH_CLIENT_ID: 'mobile-north'
Catalog fields · JSON keys
KeyRequiredMeaning
keyNo, but set itIdentifies the platform on the device; the learner's selection and session are stored under it. Never change it for a live platform, and never give a removed platform's key to another one. Falls back to a slug of the name.
nameYesShown in the site list.
api_host_urlYesThe platform's https address.
oauth_client_idYesThe public OAuth client the app signs in with.
instance_nameNoLocalized display names, e.g. {"en": "...", "uk": "..."}.
colorNoAccent color when the theme sets none.
theme.light / theme.darkNoPalette overrides; field names such as accent_color, text_primary, background.
theme.logo_url,
theme.header_background_url
NoRemote images (or a bundled asset name).
sso_url,
sso_url_successful_login
NoSSO sign-in for that platform.
PLATFORM_NAMENoSent in upper case; defaults to the display name.

A few rules for the list

  • An entry without name, api_host_url or oauth_client_id is skipped; the rest still load.
  • The apps fetch the URL on every launch. A failed or empty answer keeps the last good list.
  • One platform: the app behaves like a single-site app. Two or more: the Learning Sites screen.
  • The file is public. Put nothing in it you wouldn't show anyone.
  • Need a hosted file for your own build? Point it at this demo's URL to start, then host your own.

Open source

Follow the source.

Good to know

A few answers.

Do the platforms see each other's data?

No. Each platform has its own sign-in, tokens, cached courses and downloads on the device, and a token is only ever sent to the platform that issued it.

How do I remove my LMS?

Sign in, open your workspace and remove it. The apps stop listing it the next time they open.

My LMS doesn't show up.

It needs an https address and a public OAuth client with the password grant. Close the app completely and open it again.

How do learners sign in?

With their normal account on that platform, through the standard Open edX mobile sign-in.

Who runs this?

Raccoon Gang, as a public demo. It is not an official Open edX service.