Edit eXeLearning .elpx (and legacy .elp) projects directly from Google
Drive. The bundled static editor opens in the browser, the file stays in
your Drive — there is no backend, no server-side storage, and no refresh
tokens.
Live deploy: https://exelearning.github.io/gdrive-exelearning/
- Open with eXeLearning from Google Drive opens the project in an embedded eXeLearning editor and saves the result back to the same Drive file.
- Create new projects straight from Drive's "New" menu — the file
appears in the chosen folder with a unique
Untitled.elpx/Untitled (N).elpxname. - Legacy
.elpupgrade: opening a v2.elpproject loads it in the editor and the next save creates a fresh.elpxnext to the original (the legacy file is left untouched). - Drive thumbnails: after every save we publish the editor's
generated
screenshot.pngas the file's Drive thumbnail. - Conflict detection: if Drive changed the file between open and save, the user is offered "overwrite", "save as copy" or "cancel".
- Read-only fallback: if Drive reports
canEdit=false, the editor opens with the save button disabled.
After the Drive UI integration is enabled on the Google Cloud project, end users see eXeLearning right next to Google's own apps in Drive:
- Right-click a
.elpx(or.elp) → Open with → eXeLearning. - The first time, click Authorize and open; subsequent visits go straight to the editor.
- Edit the project. Use the Save to Drive button or
Ctrl/Cmd+S. - Drive metadata (
modifiedTime, thumbnail, custom mime type) is updated to reflect the new content.
To create a new project, pick New → eXeLearning from any Drive folder; the editor opens with a blank document and the file is created in the same folder.
- The app is static and runs entirely in the browser; there is no server-side token exchange or backend persistence.
- There is no collaborative editing.
- Large
.elpxfiles are constrained by browser memory and Drive upload limits.
To run your own deploy (Google Cloud project, OAuth client, Drive UI
integration), see SELF-HOSTING.md.
See AGENTS.md for the protocol details (postMessage
shape, hideUI, srcdoc/<base> trick, the REQUEST_SAVE patch for
v4.0.0). PRs welcome.