{"id":51291342,"url":"https://github.com/mqhe2007/a-at-ui","last_synced_at":"2026-06-30T10:30:46.103Z","repository":{"id":359051291,"uuid":"1243329880","full_name":"mqhe2007/a-at-ui","owner":"mqhe2007","description":"A@UI is a protocol specification and frontend runtime for AI Agents. Any backend only needs to output a JSON command stream according to the protocol; the frontend is responsible for registering the manifest and components, and consuming the command stream to complete the rendering.","archived":false,"fork":false,"pushed_at":"2026-05-29T06:55:03.000Z","size":175,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T07:28:41.486Z","etag":null,"topics":["a2ui","agent-protocol","agent-tools","agent-ui","ai-ui","ui-protocol","ui-skill"],"latest_commit_sha":null,"homepage":"https://a-at-ui.mengqinghe.com/","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mqhe2007.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-19T08:41:40.000Z","updated_at":"2026-05-29T06:55:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mqhe2007/a-at-ui","commit_stats":null,"previous_names":["mqhe2007/a-at-ui"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mqhe2007/a-at-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqhe2007%2Fa-at-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqhe2007%2Fa-at-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqhe2007%2Fa-at-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqhe2007%2Fa-at-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mqhe2007","download_url":"https://codeload.github.com/mqhe2007/a-at-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mqhe2007%2Fa-at-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34963632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-30T02:00:05.919Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2ui","agent-protocol","agent-tools","agent-ui","ai-ui","ui-protocol","ui-skill"],"created_at":"2026-06-30T10:30:45.302Z","updated_at":"2026-06-30T10:30:46.092Z","avatar_url":"https://github.com/mqhe2007.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A@UI\n\n[中文](./README.zh-CN.md)\n\n[![npm version](https://img.shields.io/npm/v/a-at-ui)](https://www.npmjs.com/package/a-at-ui)\n[![release](https://img.shields.io/github/v/tag/mqhe2007/a-at-ui?sort=semver\u0026label=release)](https://github.com/mqhe2007/a-at-ui/releases)\n[![license](https://img.shields.io/github/license/mqhe2007/a-at-ui)](https://github.com/mqhe2007/a-at-ui/blob/main/LICENSE)\n[![CI](https://github.com/mqhe2007/a-at-ui/actions/workflows/test.yml/badge.svg)](https://github.com/mqhe2007/a-at-ui/actions/workflows/test.yml)\n[![skills.sh](https://skills.sh/b/mqhe2007/a-at-ui)](https://skills.sh/mqhe2007/a-at-ui)\n[![docs](https://img.shields.io/badge/docs-online-0A7C66)](https://a-at-ui.mengqinghe.com)\n\n**A protocol specification and lightweight frontend runtime for AI Agent-driven interfaces.**\n\nAny backend emits a JSON command stream following the protocol. The frontend registers manifests and components, then consumes the stream to render real UI. No backend SDK, no tight coupling, no arbitrary code execution.\n\n\u003e [!WARNING]\n\u003e A@UI is under active development and should be treated as unstable until a stable release. Protocol details, runtime APIs, manifest shapes, and command semantics may change.\n\u003e\n\u003e If adopting in production: pin an exact version, validate manifests against the schema assets in this repository, read release notes before upgrading, and keep graceful fallbacks for unknown commands or rendering behavior.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"1138\" height=\"574\" alt=\"A@UI Demo\" src=\"https://github.com/user-attachments/assets/8076afec-584a-4bd5-8704-7b8cccffddd7\" /\u003e\n\u003c/p\u003e\n---\n\n## Why A@UI\n\nBuilding AI-driven interfaces today means either:\n\n- **Giving the agent full DOM/Canvas access** — powerful but unsafe and unpredictable.\n- **Using a document-generation approach** — rich text, not real interactive components.\n- **Adopting a heavy protocol** — multi-component catalogs, transport negotiation, schema registries on both ends.\n\nA@UI takes a different route: **three commands, one JSON stream, zero backend dependencies.**\n\n```text\nrender   → Create a component instance with initial data\nupdate   → Patch its props in-place\ndestroy  → Remove it cleanly\n```\n\nThe backend simply emits these commands over any transport (SSE, WebSocket, HTTP Polling). The frontend runtime does the rest — widget lifecycle, DOM management, event wiring. No backend SDK, no catalog registration, no extra metadata.\n\n## How It Works\n\n```\n┌─────────────┐     render/update/destroy      ┌───────────────┐\n│  AI Agent   │ ────────── JSON ──────────▶    │  A@UI Runtime │\n│  (any lang) │                                 │  (frontend)   │\n└─────────────┘                                 └───────┬───────┘\n                                                         │\n                                                 props / events\n                                                         │\n                                                  ┌──────▼──────┐\n                                                  │  UI Widgets │\n                                                  │  (Vue, etc.)│\n                                                  └─────────────┘\n```\n\n- **Transport-agnostic**: WebSocket, SSE, or HTTP Polling — the protocol doesn't care.\n- **Language-agnostic backend**: Python, Go, Node.js, Rust — just emit valid JSON.\n- **Framework-flexible frontend**: Use the official Vue adapter, or extend to other stacks.\n\n## Quick Start\n\n### 1. Install\n\n```bash\nnpm install a-at-ui\n```\n\n### 2. Register components and install the plugin\n\n```ts\nimport { createApp } from 'vue'\nimport { createAAtUIPlugin } from 'a-at-ui/runtime/vue'\nimport manifest from './a-at-ui.manifest.json'\nimport SearchBox from './SearchBox.vue'\nimport ArticleList from './ArticleList.vue'\n\nconst app = createApp(App)\napp.component('SearchBox', SearchBox)\napp.component('ArticleList', ArticleList)\napp.use(createAAtUIPlugin({ manifest }))\napp.mount('#app')\n```\n\n### 3. Emit commands from the backend\n\n```js\nimport http from 'node:http'\n\nhttp.createServer((req, res) =\u003e {\n  res.writeHead(200, {\n    'Content-Type': 'text/event-stream',\n    'Cache-Control': 'no-cache',\n    'Connection': 'keep-alive',\n  })\n\n  const commands = [\n    { type: 'render', component: 'SearchBox', params: { placeholder: 'Search projects' } },\n    { type: 'render', component: 'ArticleList', params: { items: [] } },\n  ]\n\n  for (const cmd of commands) {\n    res.write(`data: ${JSON.stringify(cmd)}\\n\\n`)\n  }\n\n  res.write('data: [DONE]\\n\\n')\n  res.end()\n}).listen(3000)\n```\n\nThat's it. No backend SDK, no transport negotiation, no catalog registration.\n\n## Full Documentation\n\nDocumentation site: [a-at-ui.mengqinghe.com](https://a-at-ui.mengqinghe.com)\n\n- [Vue Frontend Guide](https://a-at-ui.mengqinghe.com/docs/guides/frontend-vue)\n- [Node.js Backend Guide](https://a-at-ui.mengqinghe.com/docs/guides/backend-nodejs)\n- [Component Manifest](https://a-at-ui.mengqinghe.com/docs/guides/component-manifest)\n- [Command Protocol](https://a-at-ui.mengqinghe.com/docs/protocol/commands)\n- [Event Protocol](https://a-at-ui.mengqinghe.com/docs/protocol/events)\n- [Lifecycle \u0026 Error Strategy](https://a-at-ui.mengqinghe.com/docs/protocol/lifecycle)\n\n## Agent Skill\n\nA@UI ships three installable skills for different roles:\n\n```bash\nnpx skills add mqhe2007/a-at-ui --skill a-at-ui-manifest\nnpx skills add mqhe2007/a-at-ui --skill a-at-ui-setup\nnpx skills add mqhe2007/a-at-ui --skill a-at-ui-protocol\n```\n\n- `a-at-ui-manifest` — for component library authors creating manifests\n- `a-at-ui-setup` — for developers wiring the frontend runtime\n- `a-at-ui-protocol` — for backend agents emitting protocol-compliant commands\n\n## Comparison with A2UI\n\n[A2UI](https://a2ui.org/) is a protocol for agent-driven interfaces backed by Google. Both projects share similar high-level goals. The key differences:\n\n| Dimension | A@UI | A2UI |\n|-----------|------|------|\n| **Backend surface** | Zero dependencies — any language emits plain JSON | Requires catalog setup, transport negotiation, message routing |\n| **Command surface** | 3 commands: render, update, destroy | Multiple message types: surfaces, components, catalogs, actions, data binding |\n| **Frontend adapters** | Lightweight runtime adapter (Vue), designed for extensibility | Full renderers (Angular, Flutter, Lit, React) |\n| **Transport** | Transport-agnostic — SSE, WebSocket, HTTP Polling | A2A extension, plus basic SSE |\n| **Governance** | Open source, individual maintainer | Google + CopilotKit + community |\n| **License** | MIT | Apache 2.0 |\n| **Stability** | Pre-stable (0.x) | v0.8 stable, v0.9 draft |\n\nA@UI prioritizes **radical simplicity on the backend side** — any service that can emit JSON can drive the UI. If you want a richer protocol with formal transport negotiation and multiple renderers out of the box, A2UI may be a better fit.\n\n## Repository Contents\n\n| Directory | Purpose |\n|-----------|---------|\n| `packages/a-at-ui/` | Core frontend runtime package (npm) |\n| `apps/website/` | Documentation site (Nuxt) |\n| `skills/a-at-ui/` | Agent skill definitions and JSON Schema assets |\n\n## Live Example\n\nA production site built with the A@UI architecture: [mengqinghe.com](https://mengqinghe.com)\n\n## Contributing\n\nContributions are welcome — bug reports, feature proposals, documentation improvements, and pull requests.\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for the full workflow.\n\n```bash\n# install dependencies\nbun install\nbun website:dev    # start docs site\nbun run test       # run tests\nbun run schema:test  # validate JSON Schema\n```\n\n### Commit Convention\n\n[Conventional Commits](https://www.conventionalcommits.org/):\n\n```text\nfeat(runtime): add streaming render support for the frontend adapter\nfix(schema): correct a required field in the commands schema\ndocs: expand the backend integration guide\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmqhe2007%2Fa-at-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmqhe2007%2Fa-at-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmqhe2007%2Fa-at-ui/lists"}