MCPcopy
hub / github.com/standardagents/arrow-js

github.com/standardagents/arrow-js @v1.0.6 sqlite

repository ↗ · DeepWiki ↗ · release v1.0.6 ↗
1,110 symbols 2,895 edges 190 files 10 documented · 1%
README

ArrowJS

test badge size badge npm version

The UI framework for coding agents

ArrowJS is a tiny, blazing-fast, type-safe reactive UI runtime built around platform primitives that coding agents deeply understand: JavaScript modules, template literals, and the DOM.

Use @arrow-js/core when you want direct reactive DOM updates with minimal API surface. Add @arrow-js/framework, @arrow-js/ssr, and @arrow-js/hydrate when you need async components, server-side rendering, and client-side hydration on top of the same component model.

Documentation · API Reference · Playground · Discord

Core Package

  • @arrow-js/core: reactive state, tagged-template rendering, components, pick() / props(), and nextTick()

Framework Packages

  • @arrow-js/framework: async component runtime, boundary(), render(), toTemplate(), and document rendering helpers
  • @arrow-js/ssr: renderToString() and serializePayload() for server output
  • @arrow-js/hydrate: hydrate() and readPayload() for adopting SSR output in the browser
  • @arrow-js/sandbox: QuickJS/WASM-backed sandbox runtime for executing Arrow code off the host window realm while rendering into the real DOM
  • @arrow-js/vite-plugin-arrow: Vite integration package included in the monorepo

Install

Scaffold a complete Vite 8 Arrow app with SSR, hydration, and the full framework stack:

pnpm create arrow-js@latest arrow-app

Agent skill: Equip your preferred coding agent to add Arrow to an existing project:

npx @arrow-js/skill

Core-only:

npm install @arrow-js/core

Full SSR + hydration stack:

pnpm add @arrow-js/core @arrow-js/framework @arrow-js/ssr @arrow-js/hydrate

No build step is required for the core runtime. You can also import it directly in the browser:

<script type="module">
  import { html, reactive } from 'https://esm.sh/@arrow-js/core'
</script>

Core Example

import { component, html, reactive } from '@arrow-js/core'

const Counter = component(() => {
  const state = reactive({ count: 0 })

  return html`<button @click="${() => state.count++}">
    Clicked ${() => state.count} times
  </button>`
})

html`${Counter()}`(document.body)

Async Components, SSR, and Hydration

Async components use the same component() API, but they require the async runtime from @arrow-js/framework, @arrow-js/ssr, or @arrow-js/hydrate to be imported before rendering.

The current project structure keeps that layering explicit:

  • @arrow-js/core stays DOM-first and framework-agnostic.
  • @arrow-js/framework adds async render tracking and boundaries.
  • @arrow-js/ssr renders HTML and serializes async payloads on the server.
  • @arrow-js/hydrate adopts existing SSR HTML instead of replacing it on the client.

Editor Support

Install the official ArrowJS Syntax extension for VSCode to get syntax highlighting and autocomplete inside html template literals.

Community

  • Discord — ask questions, share what you're building, and connect with other Arrow developers
  • GitHub Issues — report bugs and request features
  • Follow @jpschroeder on X for updates and releases

Monorepo Development

  • pnpm dev: run the docs app locally
  • pnpm test: run Vitest
  • pnpm test:e2e: run Playwright tests
  • pnpm typecheck: run TypeScript across the workspace

Extension points exported contracts — how you extend this code

VmRunner (Interface)
(no doc) [1 implementers]
packages/sandbox/src/host/quickjs.ts
HydrationStats (Interface)
(no doc)
packages/hydrate/src/reconcile.ts
ArrowHtmlRegion (Interface)
(no doc)
packages/highlight/src/index.ts
RenderOptions (Interface)
(no doc)
packages/framework/src/render.ts
ArrowTemplate (Interface)
(no doc)
packages/core/src/html.ts
Page (Interface)
(no doc)
packages/create-arrow-js/template/src/page.ts
PackedWorkspacePackageEntry (Interface)
(no doc)
tests/helpers/packed-workspace-packages.ts
Env (Interface)
(no doc)
docs/worker/src/index.ts

Core symbols most depended-on inside this repo

html
called by 399
packages/core/src/html.ts
reactive
called by 192
packages/core/src/reactive.ts
nextTick
called by 169
packages/core/src/common.ts
get
called by 102
docs/worker/src/index.ts
component
called by 87
packages/core/src/component.ts
extractBlock
called by 36
docs/src/components/typeReferenceSnippets.ts
push
called by 31
packages/highlight/src/index.ts
destroy
called by 31
packages/sandbox/src/index.spec.ts

Shape

Function 905
Interface 140
Method 51
Class 14

Languages

TypeScript100%

Modules by API surface

docs/play/index.js66 symbols
packages/core/src/html.ts58 symbols
packages/sandbox/src/vm/runtime/runtime.ts45 symbols
packages/sandbox/src/host/quickjs.ts44 symbols
packages/sandbox/src/host/instance.ts34 symbols
docs/src/character-rain/engine.ts32 symbols
packages/highlight/src/index.ts29 symbols
packages/sandbox/src/index.spec.ts26 symbols
packages/core/src/reactive.ts26 symbols
docs/src/pages/home/scenarios.ts24 symbols
docs/play/arrow-types.d.ts24 symbols
packages/sandbox/src/host/renderer.ts22 symbols

Dependencies from manifests, versioned

@arrow-js/coreworkspace:* · 1×
@arrow-js/frameworkworkspace:* · 1×
@arrow-js/highlightworkspace:* · 1×
@arrow-js/hydrate__ARROW_HYDRATE__ · 1×
@arrow-js/sandboxworkspace:* · 1×
@arrow-js/ssr__ARROW_SSR__ · 1×
@arrow-js/vite-plugin-arrowworkspace:* · 1×
@clack/prompts1.1.0 · 1×
@playwright/test1.58.2 · 1×
@rollup/plugin-typescript12.1.4 · 1×
@shikijs/engine-oniguruma4.0.2 · 1×
@shikijs/twoslash4.0.2 · 1×

For agents

$ claude mcp add arrow-js \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact