# Open-SEO Package.json Dependencies: Complete Runtime and DevDependency Guide

> Explore open-seo's package.json dependencies. Discover runtime and dev dependencies for AI, Cloudflare Workers, React 19, and Drizzle ORM.

- Repository: [Every App/open-seo](https://github.com/every-app/open-seo)
- Tags: api-reference
- Published: 2026-08-16

---

**The open-seo [`package.json`](https://github.com/every-app/open-seo/blob/main/package.json) manages 43 runtime dependencies and 26 development dependencies across AI integration, Cloudflare Workers, React 19 frontend, and Drizzle ORM data layers.**

This guide breaks down every dependency listed in the root [`package.json`](https://github.com/every-app/open-seo/blob/main/package.json) of the [every-app/open-seo](https://github.com/every-app/open-seo) repository, explaining what each library does and how the project uses it. Whether you're auditing the tech stack, troubleshooting installs, or planning contributions, this reference covers the dependencies defined at lines 75–148.

---

## Runtime Dependencies in Open-SEO

The **`dependencies`** object (lines 75–117) powers the application's production behavior. These packages ship with every deployment.

### AI and Model Context Protocol

| Package | Version | Purpose |
|---------|---------|---------|
| `ai` | ^6.0.199 | Core AI utilities from Vercel |
| `@ai-sdk/react` | ^3.0.211 | React hooks for streaming AI responses |
| `@openrouter/ai-sdk-provider` | ^2.9.0 | OpenRouter integration for the AI SDK |
| `@cloudflare/ai-chat` | ^0.8.4 | Cloudflare Workers AI chat API wrapper |
| `@cloudflare/think` | 0.12.1 | Server-side Cloudflare utilities |
| `@modelcontextprotocol/sdk` | 1.29.0 | Model Context Protocol client implementation |
| `agents` | 0.17.3 | Agent framework for orchestrating AI workflows |

The AI stack centers on the Vercel AI SDK with Cloudflare Workers as the runtime. The `@cloudflare/think` package provides server-side primitives, while `agents` enables multi-step AI workflows.

### Cloudflare and Edge Infrastructure

| Package | Version | Purpose |
|---------|---------|---------|
| `cloudflare` | ^5.2.0 | Official Cloudflare API client |
| `@cloudflare/workers-oauth-provider` | ^0.4.0 | OAuth provider implementation for Workers |
| `@every-app/sdk` | ^1.14 | Core SDK for Every-App platform services |

These dependencies lock the application to the Cloudflare ecosystem. The `cloudflare` package manages API calls, while `@cloudflare/workers-oauth-provider` handles authentication flows at the edge.

### Data and ORM Layer

| Package | Version | Purpose |
|---------|---------|---------|
| `drizzle-orm` | ^0.45.2 | Type-safe ORM supporting SQLite and PostgreSQL |
| `postgres` | ^3.4.9 | Native PostgreSQL driver |
| `dataforseo-client` | ^2.0.19 | Official client for DataForSEO API |
| `papaparse` | ^5.5.3 | CSV parsing library |
| `fast-xml-parser` | ^5.4.1 | XML parsing for SEO data feeds |
| `robots-parser` | ^3.0.1 | Robots.txt parsing |
| `tldts` | ^7.0.25 | Top-level domain extraction |

Drizzle ORM serves as the primary data access layer. The project uses the same schema definitions across SQLite (Cloudflare D1) and PostgreSQL adapters. SEO-specific parsing relies on `robots-parser`, `tldts`, and `fast-xml-parser` for technical SEO analysis.

### React 19 Frontend Stack

| Package | Version | Purpose |
|---------|---------|---------|
| `react` / `react-dom` | ^19.0.0 | UI library (React 19) |
| `@tanstack/react-query` | ^5.101.2 | Server state management |
| `@tanstack/react-router` | ^8.21.3 | Type-safe routing |
| `@tanstack/react-table` | ^8.21.3 | Headless table components |
| `@tanstack/react-start` | ^8.21.3 | Full-stack React framework |

The frontend runs React 19 with TanStack's complete ecosystem. `react-start` provides the framework layer, while `react-query` handles caching and synchronization.

### UI Components and Styling

| Package | Version | Purpose |
|---------|---------|---------|
| `tailwindcss` | ^4.1.16 | Utility-first CSS framework |
| `daisyui` | ^5.5.5 | Component library built on Tailwind |
| `lucide-react` | ^0.542.0 | Icon library |
| `recharts` | ^3.7.0 | Data visualization |
| `sonner` | ^2.0.7 | Toast notifications |
| `react-markdown` | ^10.1.0 | Markdown rendering |
| `remark-gfm` | ^4.0.1 | GitHub-Flavored Markdown support |

DaisyUI extends Tailwind with pre-built component classes. Markdown rendering supports AI-generated content and documentation.

### Authentication and Security

| Package | Version | Purpose |
|---------|---------|---------|
| `better-auth` | ^1.6.22 | Authentication primitives |
| `jose` | ^6.0.12 | JWT signing and verification |

### Analytics and Utilities

| Package | Version | Purpose |
|---------|---------|---------|
| `posthog-js` / `posthog-node` | ^1.395.0 / ^5.38.6 | Product analytics |
| `remeda` | ^2.33.6 | Functional programming utilities |
| `autumn-js` | ^1.2.33 | Utility library |
| `cheerio` | ^1.2.0 | Server-side HTML parsing (jQuery-like) |
| `zod` | ^4.1.12 | Schema validation |

Zod validates all external data at runtime, from API responses to user inputs.

---

## Development Dependencies in Open-SEO

The **`devDependencies`** object (lines 118–148) contains tools for building, testing, and maintaining the codebase. These don't ship to production.

### Build and Bundling Tools

| Package | Version | Purpose |
|---------|---------|---------|
| `vite` | ^7.3.6 | Build tool and dev server |
| `@cloudflare/vite-plugin` | ^1.42.3 | Cloudflare Workers integration for Vite |
| `@tailwindcss/vite` | ^4.1.11 | Tailwind CSS processing in Vite |
| `@vitejs/plugin-react` | ^4.6.0 | React Fast Refresh support |
| `vite-tsconfig-paths` | ^5.1.4 | TypeScript path alias resolution |

Vite serves as the primary build tool. The `@cloudflare/vite-plugin` enables local Workers development with HMR.

### TypeScript and Type Definitions

| Package | Version | Purpose |
|---------|---------|---------|
| `typescript` | ^5.9.3 | TypeScript compiler |
| `tsx` | ^4.22.4 | TypeScript execution without compilation |
| `@types/node` / `@types/react` / `@types/react-dom` / `@types/papaparse` | ^22–^19 | Type definitions |

### Database and Deployment

| Package | Version | Purpose |
|---------|---------|---------|
| `drizzle-kit` | ^0.31.10 | Database migrations and schema management |
| `@libsql/client` | ^0.15.15 | SQLite client for Cloudflare D1 development |
| `wrangler` | ^4.105.0 | Cloudflare Workers CLI |
| `alchemy` | 2.0.0-beta.61 | Infrastructure-as-code deployment |
| `@distilled.cloud/cloudflare` | 0.28.2 | Cloudflare deployment helpers |

Drizzle Kit generates and runs migrations. Wrangler manages local Workers simulation and production deployment.

### Testing Framework

| Package | Version | Purpose |
|---------|---------|---------|
| `vitest` | ^3.2.6 | Unit testing framework |
| `@playwright/test` | ^1.59.1 | End-to-end browser testing |

The project uses **Vitest** for fast unit tests and **Playwright** for full browser automation.

### Code Quality and Linting

| Package | Version | Purpose |
|---------|---------|---------|
| `oxlint` / `oxlint-tsgolint` | ^1.50.0 / ^0.15.0 | High-performance JavaScript/TypeScript linter |
| `knip` | ^5.88.1 | Detect unused code and dependencies |
| `prettier` | ^3.6.2 | Code formatting |

Oxlint replaces ESLint for faster linting. Knip identifies dead code before it ships.

### TanStack Development Tools

| Package | Version | Purpose |
|---------|---------|---------|
| `@tanstack/react-query-devtools` | ^0.10.8 | Query inspection and debugging |
| `@tanstack/devtools-vite` | ^6.1 | Vite plugin for TanStack devtools |

### Effect-TS Ecosystem

| Package | Version | Purpose |
|---------|---------|---------|
| `effect` | 4.0.0-beta.93 | Functional effect system |
| `@effect/platform-node` | 4.0.0-beta.93 | Node.js platform layer for Effect |

Effect-TS provides typed error handling and concurrency primitives for complex server-side operations.

### Utilities

| Package | Version | Purpose |
|---------|---------|---------|
| `chalk` | ^5.6.2 | Terminal string styling |
| `portless` | ^5.2 | Process manager for Vite dev server |

---

## Working with Key Open-SEO Dependencies

### Query Data with TanStack React Query

```typescript
import { useQuery } from '@tanstack/react-query';

function useSeoProjects() {
  return useQuery({
    queryKey: ['projects'],
    queryFn: async () => {
      const res = await fetch('/api/projects');
      if (!res.ok) throw new Error('Failed to fetch');
      return res.json();
    },
  });
}

```

This pattern appears throughout `src/client/tanstack-db/`, providing cached server state with automatic background updates.

### Call DataForSEO API

```typescript
import { DataForSeoClient } from 'dataforseo-client';

const client = new DataForSeoClient({
  apiKey: process.env.DATAFORSEO_API_KEY!,
  apiSecret: process.env.DATAFORSEO_API_SECRET!,
});

const serpResults = await client.serpTask.postTask({
  data: [{ keyword: 'open source seo tools', location_code: 2840 }],
});

```

The `dataforseo-client` dependency wraps the DataForSEO REST API with typed methods.

### Define Database Schema with Drizzle ORM

```typescript
// src/db/schema.ts
import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core';

export const projects = pgTable('projects', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
  domain: text('domain').notNull(),
  createdAt: timestamp('created_at').defaultNow(),
});

```

Drizzle Kit (`drizzle-kit generate`) produces migration files from these schema definitions.

### Render Markdown with React

```tsx
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';

function AiResponse({ content }: { content: string }) {
  return (
    <ReactMarkdown remarkPlugins={[remarkGfm]}>
      {content}
    </ReactMarkdown>
  );
}

```

`react-markdown` with `remark-gfm` renders AI-generated content with tables and strikethrough support.

---

## Summary

- **43 runtime dependencies** power production: React 19, TanStack suite, Drizzle ORM, Cloudflare Workers SDK, and AI SDK integration
- **26 devDependencies** handle building, testing, and code quality: Vite, Vitest, Playwright, Oxlint, and Drizzle Kit
- **AI stack** combines Vercel's AI SDK with Cloudflare's edge infrastructure via `@cloudflare/ai-chat` and `agents`
- **Data layer** uses Drizzle ORM with dual SQLite/PostgreSQL support, accessed through `drizzle-orm` and `postgres`
- **SEO-specific tools** include `dataforseo-client`, `robots-parser`, `tldts`, `fast-xml-parser`, and `cheerio`
- **All versions pinned** with caret (`^`) or exact specs for reproducible installs

---

## Frequently Asked Questions

### What package manager does open-seo use?

The project uses **pnpm** as its package manager. While the [`package.json`](https://github.com/every-app/open-seo/blob/main/package.json) itself doesn't specify the runner, the repository structure and lockfile behavior indicate pnpm usage. Install dependencies with `pnpm install` after cloning.

### Can I use npm or yarn instead of pnpm?

Technically possible, but not recommended. The pinned versions in [`package.json`](https://github.com/every-app/open-seo/blob/main/package.json) work across package managers, but you may encounter resolution differences with peer dependencies—particularly around React 19 and the TanStack ecosystem. Stick with pnpm for consistent behavior.

### Why are some dependencies pinned to exact versions while others use caret ranges?

Exact versions (like `@cloudflare/think@0.12.1`) indicate packages where even minor updates caused issues or where the API is unstable. Caret ranges (`^`) allow patch and minor updates that follow semantic versioning. The mix reflects practical stability requirements versus maintenance ease.

### How do I update dependencies safely in open-seo?

Run `pnpm outdated` to identify available updates. For Drizzle ORM and Cloudflare packages, review their changelogs carefully—these touch critical infrastructure. Use `knip` (already in devDependencies) to detect unused packages before removing anything. Always run `pnpm test` and `pnpm build` before committing updates.