{ "name": "reccado", "description": "Self-hosted, edge-native email inbox on Cloudflare Workers — receive and reply from your own domains.", "private": true, "type": "module", "license": "MIT", "author": "Santi Gamo", "repository": { "type": "git", "url": "git+https://github.com/santigamo/reccado.git" }, "homepage": "https://github.com/santigamo/reccado#readme", "bugs": { "url": "https://github.com/santigamo/reccado/issues" }, "keywords": [ "email", "cloudflare", "workers", "durable-objects", "self-hosted", "mcp", "inbox", "hono", "r2", "d1" ], "engines": { "node": ">=22.15.0" }, "packageManager": "pnpm@11.1.1", "imports": { "#/*": "./src/*" }, "scripts": { "predev": "pnpm run ensure:dev-vars && pnpm run d1:migrate:local && tsx scripts/seed-dev-d1.ts --apply-local", "dev": "vite dev --port 3000", "ensure:dev-vars": "tsx scripts/ensure-dev-vars.ts", "doctor": "tsx scripts/doctor.ts", "doctor:json": "tsx scripts/doctor.ts --json", "onboard": "tsx scripts/onboard.ts", "operator": "tsx scripts/operator.ts", "setup:cloud": "tsx scripts/setup-cloud.ts", "setup:domain": "tsx scripts/setup-domain.ts", "setup:mailbox": "tsx scripts/setup-mailbox.ts", "setup:mcp-claim": "tsx scripts/setup-mcp-claim.ts", "setup:auth": "tsx scripts/setup-auth.ts", "setup:routing": "tsx scripts/setup-routing.ts", "setup:sending": "tsx scripts/setup-sending.ts", "smoke:routing": "tsx scripts/smoke-routing.ts", "smoke:transactional": "tsx scripts/smoke-transactional.ts", "smoke:telegram": "tsx scripts/smoke-telegram.ts", "generate-routes": "tsr generate", "build": "vite build", "preview": "pnpm run build && vite preview", "test": "vitest run", "test:coverage": "vitest run --coverage", "typecheck": "tsc --noEmit", "lint": "biome lint .", "format": "biome format --write .", "format:check": "biome format .", "check": "pnpm typecheck && pnpm lint && pnpm test", "clean": "rm -rf dist .wrangler .tanstack .tmp", "deploy": "tsx scripts/deploy.ts", "deploy:dev": "tsx scripts/deploy.ts --env dev", "generate:large-mime": "tsx scripts/generate-large-mime.ts", "smoke:ws": "tsx scripts/smoke-ws.ts", "smoke:email:large": "tsx scripts/smoke-large-email-local.ts", "smoke:email:local": "tsx scripts/smoke-email-local.ts", "verify:cf": "tsx scripts/verify-cloudflare-bindings.ts", "reingest:mailbox": "tsx scripts/reingest-mailbox.ts", "verify:mailbox-rebuild": "tsx scripts/verify-mailbox-rebuild.ts", "d1:migrate:local": "wrangler d1 migrations apply INDEX_DB --local", "d1:migrate:dev": "sh -c 'wrangler d1 migrations apply \"${D1_DB_NAME_DEV:-inbox-mcp-index-dev-eu}\" --remote --env dev'", "d1:migrate:prod": "sh -c 'wrangler d1 migrations apply \"${D1_DB_NAME_PROD:-inbox-mcp-index}\" --remote'", "seed:dev-id": "tsx scripts/seed-dev-d1.ts", "cf-typegen": "wrangler types" }, "dependencies": { "@better-auth/mcp": "1.7.2", "@modelcontextprotocol/sdk": "^1.29.0", "@tailwindcss/vite": "^4.3.2", "@tanstack/react-devtools": "^0.10.8", "@tanstack/react-router": "^1.170.16", "@tanstack/react-router-devtools": "^1.167.0", "@tanstack/react-router-ssr-query": "^1.167.1", "@tanstack/react-start": "^1.168.26", "@tanstack/router-plugin": "^1.132.0", "agents": "^0.17.3", "better-auth": "1.7.2", "clsx": "^2.1.1", "hono": "^4.9.6", "lucide-react": "^1.22.0", "mimetext": "^3.0.28", "postal-mime": "^2.7.5", "react": "^19.2.0", "react-dom": "^19.2.0", "tailwind-merge": "^3.6.0", "tailwindcss": "^4.3.2", "uqr": "^0.1.3", "zod": "^4.4.3" }, "devDependencies": { "@biomejs/biome": "^2.5.2", "@cloudflare/vite-plugin": "^1.54.3", "@cloudflare/vitest-pool-workers": "^0.17.0", "@tailwindcss/typography": "^0.5.16", "@tanstack/devtools-vite": "^0.8.1", "@tanstack/router-cli": "^1.132.0", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^16.3.0", "@types/node": "^26.1.0", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^6.0.1", "@vitest/coverage-istanbul": "^4.1.9", "jsdom": "^29.1.1", "tsx": "^4.20.3", "typescript": "^6.0.2", "vite": "^8.1.2", "vitest": "^4.1.5", "wrangler": "^4.128.0" }, "pnpm": { "onlyBuiltDependencies": [ "esbuild", "lightningcss", "core-js-pure" ] } }