π Copilot Textarea: AI-assisted text generation + editing + autocompletions.
π Copilot Chatbot: in-app-chatbot with support for injecting app state (frontend + backend), funneling executions to frontend functions (in-app actions) and backend functions (auth-enabled), executing arbitrary chains, Cursor-style @document-fetching, and 3rd-party context via plugins (e.g. Dropbox, Salesforce, Shopify, etc).
Use OpenAI's assistants api or bring your own model.
Explore the docs Β»
Join our Discord
Β·
Website
Β·
Report Bug
Β·
Request Feature
- β
A drop-in
<textarea />replacement. Supports all textarea customizations. - β
AI editing β¨ - "list the client's top 3 pain points from the last call
@GongTranscript" - β autocompletions β¨ - Context-aware autocompletions (like in GitHub Copilot / Gmail)
- β
App context & 3rd party context with
useMakeCopilotReadableanduseMakeCopilotDocumentReadable - π§ First draft β¨ - automatically populate the initial content.
- π§ Bold + italics support.
- β
propagate application state into the chatbot with
useMakeCopilotReadableanduseMakeCopilotDocumentReadable - β
frontend actions:
useMakeCopilotActionable - β User-referenced context using @someContext (including 3rd party)
- β Bring your own model
- π§ propagate backend state
- π§ backend actions (auth enabled)
- π§ OpenAI assistants api
CopilotKit in action.
2-min showcase + 2-min implementation tutorial:
copilot_full_demo_nxxpbr.3.mp4
npm i @copilotkit/react-core @copilotkit/react-ui @copilotkit/react-textareaSee quickstart in the docs
You can easily use any backend/LLM - just provide the URL of any OpenAI-comaptible endpoint. E.g. see this example implementation for a NextJS app.
Then reference this URL in your CopilotProvider instantiation:
<CopilotProvider chatApiEndpoint="/api/copilotkit/chat"> {/* Global state & copilot logic. Put this around the entire app */}
{/* ... */}
</CopilotProvider>A drop-in <textarea /> replacement with context-aware Copilot autocompletions.
- Customizable
purposeprompt. - Provide arbitrary context to inform autocompletions using
useMakeCopilotReadable - Works with any backend/LLM, using
ChatlikeApiEndpoint - Supports all
<textarea />customizations
import "@copilotkit/react-textarea/styles.css"; // add to the app-global css
import { CopilotTextarea } from "@copilotkit/react-textarea";
import { CopilotProvider } from "@copilotkit/react-core";
// call ANYWHERE in your app to provide external context (make sure you wrap the app with a <CopilotProvider >):
// See below for more features (parent/child hierarchy, categories, etc.)
useMakeCopilotReadable(relevantInformation)
useMakeCopilotDocumentReadable(document)
return (
<CopilotProvider chatApiEndpoint="/api/copilotkit/chat"> {/* Global state & copilot logic. Put this around the entire app */}
<CopilotTextarea
className="p-4 w-1/2 aspect-square font-bold text-3xl bg-slate-800 text-white rounded-lg resize-none"
placeholder="A CopilotTextarea!"
autosuggestionsConfig={{
purposePrompt: "A COOL & SMOOTH announcement post about CopilotTextarea. Be brief. Be clear. Be cool.",
forwardedParams: { // additional arguments to customize autocompletions
max_tokens: 25,
stop: ["\n", ".", ","],
},
}}
/>
</CopilotProvider>
);import "@copilotkit/react-ui/styles.css"; // add to the app-global css
import { CopilotProvider } from "@copilotkit/react-core";
import { CopilotSidebarUIProvider } from "@copilotkit/react-ui";
export default function App(): JSX.Element {
return (
<CopilotProvider chatApiEndpoint="/api/copilotkit/chat"> {/* Global state & copilot logic. Put this around the entire app */}
<CopilotSidebarUIProvider> {/* A built-in Copilot UI (or bring your own UI). Put around individual pages, or the entire app. */}
<YourContent />
</CopilotSidebarUIProvider>
</CopilotProvider>
);
}- Batteries included. Add 2 React components, and your Copilot is live.
- Customize the built-in
CopilotSidebarUIProviderUI -- or bring your own UI component. - Extremely hackable. Should the need arise, you can define 1st-class extensions just as powerful as
useMakeCopilotReadable,useMakeCopilotActionable, etc.
- Propagate useful information & granular app-state to the Copilot
- Easily maintain the hierarchical structure of information with
parentId - One call to rule them all:
useMakeCopilotReadableworks both with the sidekick, and with CopilotTextarea.- Use the
contextCategories: string[]param to route information to different places.
- Use the
import { useMakeCopilotReadable } from "@copilotkit/react-core";
function Employee(props: EmployeeProps): JSX.Element {
const { employeeName, workProfile, metadata } = props;
// propagate any information copilot
const employeeContextId = useMakeCopilotReadable(employeeName);
// Pass a parentID to maintain a hiearchical structure.
// Especially useful with child React components, list elements, etc.
useMakeCopilotReadable(workProfile.description(), employeeContextId);
useMakeCopilotReadable(metadata.description(), employeeContextId);
return (
// Render as usual...
);
}import { useMakeCopilotActionable } from "@copilotkit/react-core";
function Department(props: DepartmentProps): JSX.Element {
// ...
// Let the copilot take action on behalf of the user.
useMakeCopilotActionable(
{
name: "setEmployeesAsSelected",
description: "Set the given employees as 'selected'",
argumentAnnotations: [
{
name: "employeeIds",
type: "array", items: { type: "string" }
description: "The IDs of employees to set as selected",
required: true
}
],
implementation: async (employeeIds) => setEmployeesAsSelected(employeeIds),
},
[]
);
// ...
}- Plain typescript actions. Edit a textbox, navigate to a new page, or anythign you can think of.
- Specify arbitrary input types.
- β
useMakeCopilotReadable: give static information to the copilot, in sync with on-screen state - β
useMakeCopilotActionable: Let the copilot take action on behalf of the user - π§
useMakeCopilotAskable: let the copilot ask for additional information when needed (coming soon) - π§
useEditCopilotMessage: edit the (unsent) typed user message to the copilot (coming soon) - π§ copilot-assisted navigation: go to the best page to achieve some objective.
- π§ CopilotCloudKit: integrate arbitrary LLM logic / chains / RAG, using plain code.
- β
<CopilotSidebarUIProvider>: Built in, hackable Copilot UI (optional - you can bring your own UI). - β
<CopilotTextarea />: drop-in<textarea />replacement with Copilot autocompletions.
- β Vercel AI SDK
- β OpenAI APIs
- π§ Langchain
- π§ Additional LLM providers
- β React
- π§ Vue
- π§ Svelte
- π§ Swift (Mac + iOS)
Contributions are welcome! π


