{"id":13457173,"url":"https://github.com/miurla/morphic","last_synced_at":"2026-02-07T04:04:04.593Z","repository":{"id":232226250,"uuid":"782539945","full_name":"miurla/morphic","owner":"miurla","description":"An AI-powered search engine with a generative UI","archived":false,"fork":false,"pushed_at":"2026-01-31T06:57:14.000Z","size":8267,"stargazers_count":8523,"open_issues_count":53,"forks_count":2320,"subscribers_count":60,"default_branch":"main","last_synced_at":"2026-01-31T19:39:52.604Z","etag":null,"topics":["deepseek-r1","generative-ai","generative-ui","nextjs","ollama","react","redis","searxng","shadcn-ui","tailwindcss","tavily","typescript","upstash","vercel-ai-sdk"],"latest_commit_sha":null,"homepage":"https://morphic.sh","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miurla.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"miurla"}},"created_at":"2024-04-05T13:55:29.000Z","updated_at":"2026-01-31T16:56:24.000Z","dependencies_parsed_at":"2024-04-14T20:23:43.362Z","dependency_job_id":"89f4b8c5-e40f-46bd-9b5a-ae3c34aee4f7","html_url":"https://github.com/miurla/morphic","commit_stats":{"total_commits":283,"total_committers":23,"mean_commits":"12.304347826086957","dds":"0.25795053003533563","last_synced_commit":"baf0a1aaf57d0a07dd23a5507ff412cce5c28398"},"previous_names":["miurla/morphic"],"tags_count":74,"template":false,"template_full_name":null,"purl":"pkg:github/miurla/morphic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miurla%2Fmorphic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miurla%2Fmorphic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miurla%2Fmorphic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miurla%2Fmorphic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miurla","download_url":"https://codeload.github.com/miurla/morphic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miurla%2Fmorphic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29186055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T03:35:06.566Z","status":"ssl_error","status_checked_at":"2026-02-07T03:34:57.604Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["deepseek-r1","generative-ai","generative-ui","nextjs","ollama","react","redis","searxng","shadcn-ui","tailwindcss","tavily","typescript","upstash","vercel-ai-sdk"],"created_at":"2024-07-31T08:01:34.850Z","updated_at":"2026-02-07T04:04:04.587Z","avatar_url":"https://github.com/miurla.png","language":"TypeScript","readme":"\u003cdiv align=\"center\"\u003e\n\n# Morphic\n\nAn AI-powered search engine with a generative UI.\n\n[![DeepWiki](https://img.shields.io/badge/DeepWiki-miurla%2Fmorphic-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/miurla/morphic) [![GitHub stars](https://img.shields.io/github/stars/miurla/morphic?style=flat\u0026colorA=000000\u0026colorB=000000)](https://github.com/miurla/morphic/stargazers) [![GitHub forks](https://img.shields.io/github/forks/miurla/morphic?style=flat\u0026colorA=000000\u0026colorB=000000)](https://github.com/miurla/morphic/network/members)\n\n\u003ca href=\"https://vercel.com/oss\"\u003e\n  \u003cimg alt=\"Vercel OSS Program\" src=\"https://vercel.com/oss/program-badge.svg\" /\u003e\n\u003c/a\u003e\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n\u003ca href=\"https://trendshift.io/repositories/9207\" target=\"_blank\"\u003e\u003cimg src=\"https://trendshift.io/api/badge/repositories/9207\" alt=\"miurla%2Fmorphic | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/\u003e\u003c/a\u003e\n\n\u003cimg src=\"./public/screenshot-2026-02-07.png\" /\u003e\n\n\u003c/div\u003e\n\n## 🗂️ Overview\n\n- 🛠 [Features](#-features)\n- 🧱 [Stack](#-stack)\n- 🚀 [Quickstart](#-quickstart)\n- 🌐 [Deploy](#-deploy)\n- 👥 [Contributing](#-contributing)\n- 📄 [License](#-license)\n\n📝 Explore AI-generated documentation on [DeepWiki](https://deepwiki.com/miurla/morphic)\n\n## 🛠 Features\n\n### Core Features\n\n- AI-powered search with GenerativeUI\n- Natural language question understanding\n- Multiple search providers support (Tavily, Brave, SearXNG, Exa)\n- Search modes: Quick, Planning, and Adaptive\n- Model type selection: Speed vs Quality\n- Inspector panel for tool execution and AI processing details\n\n### Authentication\n\n- User authentication powered by [Supabase Auth](https://supabase.com/docs/guides/auth)\n\n### Guest Mode\n\n- Allow users to try the app without creating an account\n- No chat history stored for guests (ephemeral sessions)\n- Optional daily rate limit per IP address\n- Enable with `ENABLE_GUEST_CHAT=true`\n\n### Chat \u0026 History\n\n- Chat history automatically stored in PostgreSQL database\n- Share search results with unique URLs\n- Message feedback system\n- File upload support\n\n### AI Providers\n\n- OpenAI (Default)\n- Anthropic Claude\n- Google Gemini\n- Vercel AI Gateway\n- Ollama\n\nModels are configured in `config/models/*.json` with profile-based settings. When using non-OpenAI providers, update the model configuration files with compatible model IDs. See [Configuration Guide](docs/CONFIGURATION.md) for details.\n\n### Search Capabilities\n\n- URL-specific search\n- Content extraction with Tavily or Jina\n- Citation tracking and display\n- Self-hosted search with SearXNG support\n\n### Additional Features\n\n- Docker deployment ready\n- Browser search engine integration\n- LLM observability with Langfuse (optional)\n- Todo tracking for complex tasks\n\n## 🧱 Stack\n\n### Core Framework\n\n- [Next.js](https://nextjs.org/) - React framework with App Router\n- [TypeScript](https://www.typescriptlang.org/) - Type-safe development\n- [Vercel AI SDK](https://ai-sdk.dev) - TypeScript toolkit for building AI-powered applications\n\n### Authentication \u0026 Authorization\n\n- [Supabase](https://supabase.com/) - User authentication and backend services\n\n### AI \u0026 Search\n\n- [OpenAI](https://openai.com/) - Default AI provider (Optional: Google AI, Anthropic)\n- [Tavily AI](https://tavily.com/) - AI-optimized search with context\n- [Brave Search](https://brave.com/search/api/) - Traditional web search results\n- Tavily alternatives:\n  - [SearXNG](https://docs.searxng.org/) - Self-hosted search\n  - [Exa](https://exa.ai/) - Meaning-based search powered by embeddings\n  - [Firecrawl](https://firecrawl.dev/) - Web, news, and image search with crawling, scraping, LLM-ready extraction, and [open source](https://github.com/firecrawl/firecrawl).\n\n### Data Storage\n\n- [PostgreSQL](https://www.postgresql.org/) - Primary database (supports Neon, Supabase, or standard PostgreSQL)\n- [Drizzle ORM](https://orm.drizzle.team/) - Type-safe database ORM\n- [Cloudflare R2](https://developers.cloudflare.com/r2/) - File storage (optional)\n\n### UI \u0026 Styling\n\n- [Tailwind CSS](https://tailwindcss.com/) - Utility-first CSS framework\n- [shadcn/ui](https://ui.shadcn.com/) - Re-usable components\n- [Radix UI](https://www.radix-ui.com/) - Unstyled, accessible components\n- [Lucide Icons](https://lucide.dev/) - Beautiful \u0026 consistent icons\n\n## 🚀 Quickstart\n\n### 1. Fork and Clone repo\n\nFork the repo to your Github account, then run the following command to clone the repo:\n\n```bash\ngit clone git@github.com:[YOUR_GITHUB_ACCOUNT]/morphic.git\n```\n\n### 2. Install dependencies\n\n```bash\ncd morphic\nbun install\n```\n\n### 3. Configure environment variables\n\n```bash\ncp .env.local.example .env.local\n```\n\nFill in the required environment variables in `.env.local`:\n\n```bash\nDATABASE_URL=your_database_url\nOPENAI_API_KEY=your_openai_key\nTAVILY_API_KEY=your_tavily_key\n```\n\n**Note**: Authentication is disabled by default (`ENABLE_AUTH=false`).\n\nFor optional features (alternative search providers, authentication, alternative AI providers, etc.), see [CONFIGURATION.md](./docs/CONFIGURATION.md)\n\n### 4. Run database migrations\n\n```bash\nbun run migrate\n```\n\nThis command will create the necessary database tables.\n\n### 5. Run app locally\n\n#### Using Bun\n\n```bash\nbun dev\n```\n\n#### Using Docker\n\n1. Configure environment variables for Docker:\n\n```bash\ncp .env.local.example .env.local\n```\n\nEdit `.env.local` and set the required variables:\n\n```bash\nDATABASE_URL=postgresql://morphic:morphic@postgres:5432/morphic\nOPENAI_API_KEY=your_openai_key\nTAVILY_API_KEY=your_tavily_key\nBRAVE_SEARCH_API_KEY=your_brave_key\n```\n\n**Note**: Authentication is disabled by default (`ENABLE_AUTH=false` in `.env.local.example`).\n\n**Optional**: Customize PostgreSQL credentials by setting environment variables in `.env.local`:\n\n```bash\nPOSTGRES_USER=morphic      # Default: morphic\nPOSTGRES_PASSWORD=morphic  # Default: morphic\nPOSTGRES_DB=morphic        # Default: morphic\nPOSTGRES_PORT=5432         # Default: 5432\n```\n\n2. Start the Docker containers:\n\n```bash\ndocker compose up -d\n```\n\nThe application will:\n\n- Start PostgreSQL 17 with health checks\n- Start Redis for SearXNG search caching\n- Wait for the database to be ready\n- Run database migrations automatically\n- Start the Morphic application\n- Start SearXNG (optional search provider)\n\n3. Visit http://localhost:3000 in your browser.\n\n**Note**: Database data is persisted in a Docker volume. To reset the database, run:\n\n```bash\ndocker compose down -v  # This will delete all data\n```\n\n## 🌐 Deploy\n\nHost your own live version of Morphic with Vercel or Docker.\n\n### Vercel\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fmiurla%2Fmorphic\u0026env=DATABASE_URL,OPENAI_API_KEY,TAVILY_API_KEY,BRAVE_SEARCH_API_KEY)\n\n**Note**: For Vercel deployments, set `ENABLE_AUTH=true` and configure Supabase authentication to secure your deployment.\n\n### Docker\n\n#### Using Prebuilt Image\n\nPrebuilt Docker images are automatically built and published to GitHub Container Registry:\n\n```bash\ndocker pull ghcr.io/miurla/morphic:latest\n```\n\nYou can use it with docker-compose by setting the image in your `docker-compose.yaml`:\n\n```yaml\nservices:\n  morphic:\n    image: ghcr.io/miurla/morphic:latest\n    env_file: .env.local\n    environment:\n      DATABASE_URL: postgresql://morphic:morphic@postgres:5432/morphic\n      DATABASE_SSL_DISABLED: 'true'\n      ENABLE_AUTH: 'false'\n    ports:\n      - '3000:3000'\n    depends_on:\n      - postgres\n      - redis\n```\n\n**Note**: The prebuilt image runs in **anonymous mode only** (`ENABLE_AUTH=false`). Supabase authentication cannot be enabled because `NEXT_PUBLIC_*` environment variables are embedded at build time by Next.js. To enable authentication or customize model configurations, you need to build from source — see [CONFIGURATION.md](./docs/CONFIGURATION.md) for details.\n\n#### Building from Source\n\nOr use Docker Compose for a complete setup with PostgreSQL, Redis, and SearXNG. See the [Using Docker](#using-docker) section under Quickstart for detailed instructions.\n\n## 👥 Contributing\n\nWe welcome contributions to Morphic! Whether it's bug reports, feature requests, or pull requests, all contributions are appreciated.\n\nPlease see our [Contributing Guide](CONTRIBUTING.md) for details on:\n\n- How to submit issues\n- How to submit pull requests\n- Commit message conventions\n- Development setup\n\n## 📄 License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n","funding_links":["https://github.com/sponsors/miurla"],"categories":["TypeScript","\u003cimg src=\"./assets/satellite.svg\" width=\"16\" height=\"16\" style=\"vertical-align: middle;\"\u003e Satellites","A01_文本生成_文本对话","Repos","typescript","Table of Contents","📋 Contents"],"sub_categories":["大语言对话模型及数据","Search Engine","🖥️ 12. User Interfaces \u0026 Self-hosted Platforms"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiurla%2Fmorphic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiurla%2Fmorphic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiurla%2Fmorphic/lists"}