What Dependencies Are Managed by the package.json File in Open-SEO?
The package.json file in the every-app/open-seo repository manages 36 runtime dependencies for production functionality and 29 development dependencies for build tooling, testing, and local development.
This Node.js project manifest serves as the single source of truth for the package manager (pnpm), defining every library required to run the Open-SEO platform—from AI integrations and Cloudflare Workers to React 19 frontend components. All versions are pinned with caret ranges or exact versions to ensure reproducible installs while allowing non-breaking upgrades.
Runtime Dependencies in open-seo package.json
The dependencies section (lines 75–117 in package.json) powers the application's core functionality across three domains: server-side data processing, AI model orchestration, and frontend user interface.
AI and Model Context Dependencies
Open-SEO integrates multiple AI providers through a unified abstraction layer:
ai(^6.0.199) — Core AI utilities for streaming responses and structured outputs@ai-sdk/react(^3.0.211) — React hooks for AI model integrations@openrouter/ai-sdk-provider(^2.9.0) — OpenRouter AI provider adapter@modelcontextprotocol/sdk(1.29.0) — Model-context protocol client for MCP-compatible services@cloudflare/ai-chat(^0.8.4) — Cloudflare AI chat API wrapper@cloudflare/think(0.12.1) — Server-side utilities for Cloudflare Workers AI
The agents package (0.17.3) provides the agent framework that orchestrates multi-step AI workflows in the application.
Data and API Integration Dependencies
Three categories of data handling libraries enable SEO research and storage:
External API Clients:
dataforseo-client(^2.0.19) — Official client for DataForSEO API (SERP data, keyword research)cloudflare(^2.0.19) — Cloudflare API client for infrastructure management
Data Parsing and Validation:
cheerio(^1.2.0) — Server-side HTML parsing for web scrapingfast-xml-parser(^5.4.1) — XML parsing for sitemap processingpapaparse(^5.5.3) — CSV parsing for data exportsrobots-parser(^3.0.1) — Robots.txt parsing for crawler rulestldts(^7.0.25) — Top-level domain parsingzod(^4.1.12) — Runtime schema validation with TypeScript inference
Database and ORM:
drizzle-orm(^0.45.2) — Type-safe ORM supporting both SQLite (Cloudflare D1) and PostgreSQLpostgres(^3.4.9) — Native PostgreSQL driver
Frontend UI Dependencies
The React 19-based interface relies on this component stack:
react/react-dom(^19.0.0) — UI library with concurrent features@tanstack/react-query(^5.101.2) — Server state management with caching@tanstack/react-router(^8.21.3) — Type-safe routing with preload support@tanstack/react-table(^8.21.2) — Headless table utilities for data gridstailwindcss(^4.1.16) — Utility-first CSS frameworkdaisyui(^5.5.5) — Component library extending Tailwind with pre-built UI patternslucide-react(^0.542.0) — Icon setrecharts(^3.7.0) — Charting library for analytics visualizationsreact-markdown(^10.1.0) /remark-gfm(^4.0.1) — Markdown rendering with GitHub-flavored extensionssonner(^2.0.7) — Toast notification system
Authentication and Analytics
better-auth(^1.6.22) — Authentication framework with multiple provider supportjose(^6.0.12) — JWT signing and verification@cloudflare/workers-oauth-provider(^0.4.0) — OAuth 2.0 provider implementation for Workersposthog-js(^1.395.0) /posthog-node(^5.38.6) — Product analytics and event tracking
Platform SDK
@every-app/sdk(^0.1.14) — Core SDK for Every-App platform servicesremeda(^2.33.6) — Functional utility library (Ramda alternative with better TypeScript)autumn-js(^1.2.33) — General utility functions
Development Dependencies in open-seo package.json
The devDependencies section (lines 118–148) configures the build pipeline, testing infrastructure, and developer tooling.
Build and Bundling Tools
vite(^7.3.6) — Next-generation frontend build tool@cloudflare/vite-plugin(^1.42.3) — Vite plugin for Cloudflare Workers builds (replaces Wrangler bundler for dev)@vitejs/plugin-react(^4.6.0) — Fast React HMR and JSX transformation@tailwindcss/vite(^4.1.11) — Tailwind CSS integration for Vitevite-tsconfig-paths(^5.1.4) — TypeScript path alias resolution in Vite
TypeScript and Execution
typescript(^5.9.3) — TypeScript compilertsx(^4.22.4) — TypeScript execution engine for scripts and CLI tools@types/*— Type definitions for Node.js, React, PapaParse
Database and ORM Tooling
drizzle-kit(^0.31.10) — Migration CLI and schema management for Drizzle ORM@libsql/client(^0.15.15) — SQLite client for local D1 emulation
Testing Framework
vitest(^3.2.6) — Unit testing framework with Vite integration@playwright/test(^1.59.1) — End-to-end browser testing
Code Quality and Linting
oxlint(^1.50.0) /oxlint-tsgolint(^0.15.0) — High-performance JavaScript/TypeScript linter (Rust-based)prettier(^3.6.2) — Code formattingknip(^5.88.1) — Unused dependency and code detection
Deployment and Infrastructure
wrangler(^4.105.0) — Cloudflare Workers CLI for deployment and secrets managementalchemy(2.0.0-beta.61) — Infrastructure-as-code orchestration for Cloudflare@distilled.cloud/cloudflare(0.28.2) — Deployment helpers from Distilled Cloud
Development Utilities
@tanstack/react-query-devtools(^0.10.8) — Query inspection and debugging@tanstack/router-devtools(^0.6.1) — Route visualization for React Routerportless(^0.5.2) — Process manager for Vite dev serverchalk(^5.6.2) — Terminal string styling for CLI output
Effect-TS Ecosystem
effect(4.0.0-beta.93) — Functional effect system for TypeScript@effect/platform-node(4.0.0-beta.93) — Node.js platform modules for Effect
How Key Dependencies Are Used in Open-SEO
TanStack Query for Data Fetching
import { useQuery } from '@tanstack/react-query';
function useProjects() {
return useQuery({
queryKey: ['projects'],
queryFn: async () => {
const res = await fetch('/api/projects');
return res.json();
},
});
}
This pattern provides automatic caching, background refetching, and stale-while-revalidate behavior for all API data.
DataForSEO Client Integration
import { DataForSeoClient } from 'dataforseo-client';
const client = new DataForSeoClient({
apiKey: process.env.DATAFORSEO_API_KEY!,
});
// Fetch SERP data for keyword research
await client.getSerp({ keyword: 'open source seo tools' });
The official client handles authentication, rate limiting, and response parsing for the DataForSEO API.
Drizzle ORM Schema Definition
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(),
});
The same schema works with both SQLite (Cloudflare D1) and PostgreSQL through Drizzle's database-agnostic design.
DaisyUI Component Classes
<button className="btn btn-primary gap-2">
<PlusIcon className="w-4 h-4" />
Create Project
</button>
DaisyUI extends Tailwind with semantic component classes like btn, card, modal, and alert.
Dependency Version Strategy in package.json
Open-SEO uses a mixed pinning strategy visible throughout package.json:
^caret ranges — For stable dependencies where minor updates are trusted (most common)- Exact versions — For packages where any change carries risk (
@cloudflare/think0.12.1,agents0.17.3,@modelcontextprotocol/sdk1.29.0) - Beta versions — For cutting-edge dependencies in the Effect-TS ecosystem
This approach balances reproducibility with the ability to receive security patches and non-breaking features.
Summary
- The
package.jsonfile in every-app/open-seo defines 65 total dependencies across runtime and development categories - Runtime dependencies (36) power AI integration, Cloudflare Workers, database access, and React 19 frontend
- Development dependencies (29) configure Vite, TypeScript, testing with Vitest/Playwright, and deployment via Wrangler
- Key architectural pillars: TanStack Query/Router for state and routing, Drizzle ORM for data, DataForSEO client for SEO research, and Cloudflare-native packages for edge deployment
- Version pinning uses caret ranges for flexibility with exact pins for critical or unstable packages
Frequently Asked Questions
What package manager does Open-SEO use?
Open-SEO uses pnpm as its package manager. While package.json is compatible with npm and Yarn, the repository's lock file and CI configuration are designed for pnpm's performance and disk space efficiency.
Why are some dependencies pinned to exact versions instead of using caret ranges?
Exact versions (0.12.1 instead of ^0.12.1) are used for packages where any version change carries integration risk. In Open-SEO, this applies to Cloudflare-internal packages (@cloudflare/think), the Model Context Protocol SDK, and the agents framework—these move quickly and may introduce breaking changes in minor versions.
How does Open-SEO handle database compatibility between local development and production?
The drizzle-orm dependency supports both SQLite and PostgreSQL dialects. Local development uses @libsql/client with SQLite files or Cloudflare D1, while production can target PostgreSQL via the postgres driver—all using the same schema definitions in src/db/.
What testing tools are configured in the package.json devDependencies?
Open-SEO configures Vitest (^3.2.6) for unit and integration testing with Vite-native integration, and Playwright (^1.59.1) for end-to-end browser testing. This dual-layer approach covers component logic and full user workflows.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →