Invisible state connector atom — no visual output. Initialises window._A2UI_STORE and dispatches "a2ui:store" CustomEvent. On GAS reads initial state from a Google Sheet at render time and writes back async via google.script.run. On web reads/writes localStorage keyed by course_id. All other LMS atoms read from and write to this shared store. Must appear before any stateful atom on the page.
| Field | Type | |
|---|---|---|
| course_id | string (required). Unique course identifier — scopes the Sheet and localStorage key. | required |
{
"type": "progress_store",
"course_id": "course-101"
}
{
"identifier": "urn:air:a2uicatalog.ai:atom:progress_store",
"displayName": "Progress Store",
"type": "application/vnd.a2ui.atom+json",
"url": "https://a2uicatalog.ai/atoms/progress_store",
"capabilities": [
"apps-script-web",
"meet-stage"
],
"description": "Invisible state connector atom \u2014 no visual output. Initialises window._A2UI_STORE and dispatches \"a2ui:store\" CustomEvent. On GAS reads initial state from a Google Sheet at render time and writes back async via google.script.run. On web reads/writes localStorage keyed by course_id. All other LMS atoms read from and write to this shared store. Must appear before any stateful atom on the page.",
"representativeQueries": [
"show a invisible LMS state connector \u2014 Sheet on GAS, localStorage on web; exposes window._A2UI_STORE",
"invisible state connector atom \u2014 no visual output. initialises window._a2ui_store and dispatches \"a2",
"render a progress store"
]
}
The renderer is open source. Deploy your own instance in 4 commands — you own the URL, no dependency on the demo endpoint.
git clone https://github.com/a2uicatalog/a2ui
cd apps-script-surface/gas-schema-renderer
clasp push && clasp deploy
Full deploy guide →