{"id":50884677,"url":"https://github.com/fayzkk889/openconvo","last_synced_at":"2026-06-15T16:03:15.131Z","repository":{"id":364617350,"uuid":"1268575222","full_name":"fayzkk889/openconvo","owner":"fayzkk889","description":"Open-source, local-first AI chat workspace with verified free OpenRouter models, BYOK, files, search, projects, memory, and hosted free mode.","archived":false,"fork":false,"pushed_at":"2026-06-13T19:42:34.000Z","size":657,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T20:12:29.581Z","etag":null,"topics":["ai","byok","chat","llm","local-first","nextjs","open-source","openrouter","self-hosted","vercel"],"latest_commit_sha":null,"homepage":"https://openconvo.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fayzkk889.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-13T17:36:18.000Z","updated_at":"2026-06-13T19:42:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fayzkk889/openconvo","commit_stats":null,"previous_names":["fayzkk889/openconvo"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/fayzkk889/openconvo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fayzkk889%2Fopenconvo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fayzkk889%2Fopenconvo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fayzkk889%2Fopenconvo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fayzkk889%2Fopenconvo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fayzkk889","download_url":"https://codeload.github.com/fayzkk889/openconvo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fayzkk889%2Fopenconvo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34369850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","byok","chat","llm","local-first","nextjs","open-source","openrouter","self-hosted","vercel"],"created_at":"2026-06-15T16:03:11.511Z","updated_at":"2026-06-15T16:03:15.113Z","avatar_url":"https://github.com/fayzkk889.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenConvo\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Ffayzkk889%2Fopenconvo\u0026env=OPENROUTER_API_KEY,OPENCONVO_HOSTED_FREE_DAILY_LIMIT,TAVILY_API_KEY,OPENCONVO_HOSTED_SEARCH_DAILY_LIMIT,NEXT_PUBLIC_GITHUB_URL\u0026envDescription=OpenConvo%20uses%20OpenRouter%20for%20hosted%20free%20mode%2C%20Tavily%20for%20optional%20search%2C%20and%20a%20public%20GitHub%20URL%20for%20landing%20page%20links.\u0026envLink=https%3A%2F%2Fgithub.com%2Ffayzkk889%2Fopenconvo%2Fblob%2Fmain%2FDEPLOYMENT.md)\n\nOpenConvo is a local-first, open-source AI chat workspace. It is designed for people who want a ChatGPT/Claude-style interface they can run themselves, with free OpenRouter models, optional web search, file context, projects, prompt snippets, memory, and exportable local data.\n\nRepository: https://github.com/fayzkk889/openconvo\n\nThe public site has two surfaces:\n\n- `/` is the landing page for users, contributors, and deployment links.\n- `/app` is the actual AI chat workspace.\n- `/privacy` and `/security` explain the hosted privacy and security model.\n\n## Features\n\n- Local-first conversations, projects, settings, prompt snippets, memory, and artifacts stored in browser IndexedDB.\n- Free-model-first OpenRouter integration with dynamic model discovery, `:free` filtering, and request-level zero-price enforcement.\n- Streaming chat with fallback across curated free models when a provider is temporarily rate limited.\n- Hosted free mode with server-side shared OpenRouter capacity and a daily per-visitor limit.\n- Optional Tavily web search and deeper research mode.\n- File uploads for text, markdown, code, JSON, CSV, and PDF context.\n- Projects with custom instructions and optional project default models.\n- Conversation title generation based on the first exchange.\n- Canvas/artifact panel for extracted assistant code blocks.\n- Import/export for conversations, projects, messages, artifacts, and safe settings.\n- Prompt library, local memory, pinned/archived chats, command palette, and collapsible sidebar.\n\n## Privacy Model\n\nOpenConvo does not require user accounts. By default, chat data is stored locally in your browser.\n\nAPI keys can be supplied in either place:\n\n- In `.env.local` on the server for a personal/local deployment.\n- In Settings inside the app for local browser use.\n\nExported backups intentionally exclude API keys.\n\n## Free Model Safety\n\nOpenConvo is intentionally conservative:\n\n- The model API only returns OpenRouter models whose ids end in `:free`.\n- Dynamic model pricing must report zero prompt and completion price.\n- Chat/title requests send OpenRouter provider routing options with max prompt, completion, request, and image price set to `0`.\n- Old saved/imported/stale model ids are repaired to a known free model.\n\nFree OpenRouter providers can still be rate limited upstream. In that case OpenConvo will try another free fallback model, then show an error if none are available.\n\n## Requirements\n\n- Node.js 18.18 or newer.\n- npm.\n- OpenRouter API key from [openrouter.ai/keys](https://openrouter.ai/keys).\n- Tavily API key from [tavily.com](https://tavily.com), optional and only needed for web search.\n\n## Quick Start\n\n```bash\nnpm install\ncp .env.example .env.local\nnpm run dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000).\n\nThe chat workspace is available at [http://localhost:3000/app](http://localhost:3000/app).\n\nOn Windows PowerShell:\n\n```powershell\nCopy-Item .env.example .env.local\nnpm run dev\n```\n\nEdit `.env.local` if you want server-side keys. You can also leave it blank and add keys in the app Settings.\n\n## Environment Variables\n\n```env\nOPENROUTER_API_KEY=sk-or-v1-your-key\nOPENCONVO_HOSTED_FREE_DAILY_LIMIT=20\nTAVILY_API_KEY=tvly-your-key\nOPENCONVO_HOSTED_SEARCH_DAILY_LIMIT=5\nNEXT_PUBLIC_GITHUB_URL=https://github.com/your-name/openconvo\nNEXT_PUBLIC_SITE_URL=https://openconvo.vercel.app\n```\n\n`OPENROUTER_API_KEY` is required for chat unless supplied in Settings. `TAVILY_API_KEY` is optional.\nWhen `OPENROUTER_API_KEY` is set on a public deployment, visitors without their own key can use hosted free mode. `OPENCONVO_HOSTED_FREE_DAILY_LIMIT` controls the per-visitor daily limit for that shared mode.\nWhen `TAVILY_API_KEY` is set on a public deployment, visitors can try hosted web search. `OPENCONVO_HOSTED_SEARCH_DAILY_LIMIT` controls the per-visitor daily search limit. Users who add their own Tavily key in Settings bypass the hosted search cap.\n`NEXT_PUBLIC_GITHUB_URL` is optional and only controls the GitHub link on the landing page.\n`NEXT_PUBLIC_SITE_URL` controls canonical social preview URLs and should match your production domain.\n\n## Scripts\n\n```bash\nnpm run dev        # Start local development server\nnpm run build      # Create a production build\nnpm run start      # Start production server after build\nnpm run lint       # TypeScript strict check\nnpm run test       # Launch-safety checks\nnpm run check:env  # Validate deployment environment shape\nnpm run typecheck  # Same as lint\n```\n\nBefore opening a release, run:\n\n```bash\nnpm run test\nnpm run lint\nnpm run check:env\nnpm run build\n```\n\n## Self-Hosting\n\nOpenConvo has no database server. Deploy it like a regular Next.js app and configure environment variables in your host.\n\nFor public deployments, OpenConvo protects shared server-side OpenRouter and Tavily keys with lightweight in-memory daily limits. This is enough for an early launch, but high-traffic deployments should add persistent rate limiting at the hosting edge. The safest open-source path remains personal/local self-hosting where each user supplies their own keys.\n\nFor a public launch, point your domain at the deployed app and set `NEXT_PUBLIC_GITHUB_URL` after the repository is public. Keep `/app` as the product route so the root domain can explain the project before users enter the workspace.\n\nSee [DEPLOYMENT.md](./DEPLOYMENT.md) for the Vercel launch steps.\n\n## Roadmap\n\nSee [ROADMAP.md](./ROADMAP.md) for current priorities, later ideas, and non-goals.\n\n## Contributing\n\nIssues and pull requests are welcome. Please read [CONTRIBUTING.md](./CONTRIBUTING.md) before opening a PR.\n\nFor GitHub repository metadata, topics, and release setup, see [GITHUB_SETUP.md](./GITHUB_SETUP.md).\n\n## Troubleshooting\n\n**OpenRouter 429 or provider rate limited**\n\nFree providers can be temporarily rate limited. Wait and retry, choose another free model, or add your own OpenRouter key in Settings.\n\n**Search unavailable**\n\nAdd `TAVILY_API_KEY` in `.env.local` or Settings.\n\n**Models look stale**\n\nOpenConvo caches server-side model results briefly. Refresh after a few minutes or restart the dev server.\n\n**Local data disappeared**\n\nData lives in the browser profile for the current origin. Changing browser, profile, domain, or localhost port can show a fresh workspace. Use Export Data before major changes.\n\n## Launch Checklist\n\n- `npm run test` passes.\n- `npm run lint` passes.\n- `npm run build` passes.\n- Manually test new chat, streaming, stop, retry/regenerate, model switching, fallback error display, title generation, sidebar collapse, projects, settings, import/export, file upload, search, research mode, artifacts, and mobile layout.\n- Confirm `.env.example` is current.\n- Confirm API keys are not committed.\n- Confirm exported backup does not contain API keys.\n- Confirm public deployments have rate limiting if server-side keys are configured.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffayzkk889%2Fopenconvo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffayzkk889%2Fopenconvo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffayzkk889%2Fopenconvo/lists"}