An AI-powered, open-source Google Sheets competitor built with Tambo AI.
Build and manipulate interactive spreadsheets with natural language, alongside graphs and visualizations.
- Edit with AI: Use natural language to interact with a spreadsheet.
- Cell Selection: Select cells to have the AI interact with.
- Multi-Modal: Attach Images along with Messages.
- Model Context Protocol (MCP): Connect external data sources and tools
- Voice Input: Use voice input in addition to typing.
- Formula Support: Spreadsheet formulas (SUM, AVERAGE, IF, VLOOKUP, etc.)
- Charts and Graphs: Create visualizations from your spreadsheet data
- Better Formatting: More visual options for tables (colors, borders, fonts, alignment)
- Import/Export: CSV, XLSX, and JSON support
-
Clone this repository
-
Navigate to the project directory:
-
Install dependencies:
-
Set up your environment variables:
Option A: Using Tambo CLI (Recommended)
This will interactively prompt you for your Tambo API key and create .env.local automatically.
Option B: Manual Setup
cp example.env.local .env.localThen edit .env.local and add your API key from tambo.co/dashboard.
-
Start the development server:
-
Open http://localhost:3000 in your browser to use the app!
This template shows how the AI reads and updates the spreadsheet through three ways:
Context Helpers (Read-only data)
- spreadsheetContextHelper - Gives the AI the current tab's data as a markdown table
- spreadsheetSelectionContextHelper - Tells the AI what's currently selected
- Runs automatically whenever you send a message
- See: src/lib/spreadsheet-context-helper.ts, src/lib/spreadsheet-selection-context.ts
Tools (Make changes)
- 10 tools the AI can use to change the spreadsheet
- Context helpers and interactables are read-only; tools make changes
- See: src/tools/spreadsheet-tools.ts
Interactables (Structured metadata)
- InteractableTabs - Sends tab info (names, IDs, active tab) to the AI
- Components wrapped with withInteractable HOC
- Keeps the AI in sync when tabs change
- See: `src/components/ui/interactable-tabs.tsx``
| updateCell | Update a single cell's value |
| updateRange | Update multiple cells at once |
| addColumn | Add a new column |
| removeColumn | Remove a column |
| addRow | Add a new row |
| removeRow | Remove a row |
| readCell | Read a single cell's value |
| readRange | Read multiple cells |
| clearRange | Clear cell values in a range |
| sortByColumn | Sort rows by column values |
Configuration
- src/lib/tambo.ts - Component and tool registration
- src/app/chat/page.tsx - Main chat interface with TamboProvider
Spreadsheet System
- src/components/ui/spreadsheet-tabs.tsx - Visual tab interface
- src/lib/spreadsheet-tabs-store.ts - Zustand store managing spreadsheet data
- src/lib/spreadsheet-utils.ts - Utility functions for data manipulation
State Management
- src/lib/canvas-storage.ts - Canvas/tab state management
- Powered by @silevis/reactgrid library and Zustand
Note on Dependencies: This project uses @silevis/[email protected] with legacy-peer-deps=true to work around React 19 peer dependency constraints. The library functions correctly despite the warning.
Register components in src/lib/tambo.ts that the AI can render inline in chat. Example structure:
See src/components/tambo/ for component examples and Tambo Components docs for detailed guidance.
Add tools in src/tools/ following this pattern:
Register in src/lib/tambo.ts tools array. See Tambo Tools docs for details.
Configure MCP servers via the settings modal to connect external data sources. Servers are stored in browser localStorage and wrapped with TamboMcpProvider in the chat interface.
Learn more about Tambo:
Built with Tambo AI - A framework for building AI-powered UIs. Tambo is open source: tambo-ai/tambo.
Contributions welcome! See CONTRIBUTING.md for guidelines.
MIT License
.png)
