{"id":18523601,"url":"https://github.com/mongoosejs/studio","last_synced_at":"2026-05-03T00:01:47.270Z","repository":{"id":144861639,"uuid":"529972472","full_name":"mongoosejs/studio","owner":"mongoosejs","description":"A Mongoose-native MongoDB UI with schema-aware autocomplete, AI-assisted queries, and dashboards that understand your models - not just your data.","archived":false,"fork":false,"pushed_at":"2026-04-26T23:51:26.000Z","size":1930,"stargazers_count":19,"open_issues_count":26,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-27T01:24:33.236Z","etag":null,"topics":["mongodb","mongodb-gui","mongodb-orm","mongoose","mongoose-plugin"],"latest_commit_sha":null,"homepage":"https://mongoosestudio.app","language":"JavaScript","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/mongoosejs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2022-08-28T20:29:58.000Z","updated_at":"2026-04-23T14:22:18.000Z","dependencies_parsed_at":"2026-02-12T19:04:26.598Z","dependency_job_id":null,"html_url":"https://github.com/mongoosejs/studio","commit_stats":null,"previous_names":[],"tags_count":181,"template":false,"template_full_name":null,"purl":"pkg:github/mongoosejs/studio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongoosejs%2Fstudio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongoosejs%2Fstudio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongoosejs%2Fstudio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongoosejs%2Fstudio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mongoosejs","download_url":"https://codeload.github.com/mongoosejs/studio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongoosejs%2Fstudio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32550968,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T21:31:48.061Z","status":"ssl_error","status_checked_at":"2026-05-02T21:31:46.574Z","response_time":132,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["mongodb","mongodb-gui","mongodb-orm","mongoose","mongoose-plugin"],"created_at":"2024-11-06T17:36:27.746Z","updated_at":"2026-05-03T00:01:47.264Z","avatar_url":"https://github.com/mongoosejs.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mongoose Studio\n\nA sleek, powerful MongoDB UI with built-in dashboarding and auth, seamlessly integrated with your Express, Vercel, or Netlify app.\n\n![NPM Version](https://img.shields.io/npm/v/@mongoosejs/studio)\n\n## Getting Started\n\nMongoose Studio is meant to run as a [sidecar](https://learn.microsoft.com/en-us/azure/architecture/patterns/sidecar) to your Node.js application, using the same Mongoose connection config.\nIf your app runs on `acme.app`, Studio will be on `acme.app/studio` or whichever path you prefer.\nFor local dev, if your app runs on `localhost:3000`, Studio will be on `localhost:3000/studio`.\n\nBy default, Mongoose Studio does **not** provide any authentication or authorization.\nYou can use Mongoose Studio for free for local development, but we recommend [Mongoose Studio Pro](https://studio.mongoosejs.io/#pricing) for when you want to go into production.\nWhen you omit an API key, Mongoose Studio only accepts localhost connections by default.\n\nFirst, `npm install @mongoosejs/studio`.\n\n### Express\n\nMongoose Studio can be mounted as Express middleware as follows.\n\n```javascript\nconst mongoose = require('mongoose');\nconst studio = require('@mongoosejs/studio/express');\n\n// Mount Mongoose Studio on '/studio'\n// If your models are registered on a different connection, pass in the connection instead of `mongoose`\napp.use('/studio', await studio('/studio/api', mongoose));\n````\n\nIf you have a Mongoose Studio Pro API key, you can set it as follows:\n\n```javascript\nconst opts = process.env.MONGOOSE_STUDIO_API_KEY ? { apiKey: process.env.MONGOOSE_STUDIO_API_KEY } : {};\n// Optionally specify which ChatGPT model to use for chat messages\nopts.model = 'gpt-4o-mini';\n// Provide your own OpenAI, Anthropic, or Google Gemini API key to run chat completions locally\nopts.openAIAPIKey = process.env.OPENAI_API_KEY;\nopts.anthropicAPIKey = process.env.ANTHROPIC_API_KEY;\nopts.googleGeminiAPIKey = process.env.GOOGLE_GEMINI_API_KEY;\n\n// Mount Mongoose Studio on '/studio'\napp.use('/studio', await studio('/studio/api', mongoose, opts));\n```\n\nWithout an API key, you can allow access from additional IP addresses with `bindIp`, similar to MongoDB's `bindIp` option. `bindIp` may be a comma-separated string or an array of exact IP addresses. Set `bindIp` to `null` to allow unauthenticated connections from anywhere.\n\n```javascript\napp.use('/studio', await studio('/studio/api', mongoose, {\n  bindIp: '127.0.0.1,192.168.0.10'\n}));\n```\n\n### Next.js\n\nFirst, add `withMongooseStudio` to your `next.config.js` file:\n\n```javascript\nimport withMongooseStudio from '@mongoosejs/studio/next';\n\n// Mount Mongoose Studio frontend on /studio\nexport default withMongooseStudio({\n  // Your Next.js config here\n  reactStrictMode: true,\n});\n```\n\nThen, add `pages/api/studio.js` to your Next.js project to host the Mongoose Studio API:\n\n```javascript\n// Make sure to import the database connection\nimport db from '../../src/db';\nimport studio from '@mongoosejs/studio/backend/next';\n\nconst handler = studio(\n  db, // Mongoose connection or Mongoose global. Or null to use `import mongoose`.\n  {\n    apiKey: process.env.MONGOOSE_STUDIO_API_KEY, // optional\n    connection: db, // Optional: Connection or Mongoose global. If omitted, will use `import mongoose`\n    connectToDB: async () =\u003e { /* connection logic here */ }, // Optional: if you need to call a function to connect to the database put it here\n  }\n);\n\nexport default handler;\n```\n\n### Netlify\n\n[Here is a full example of how to add Mongoose Studio to a Netlify repo](https://github.com/mongoosejs/studio.mongoosejs.io/commit/8b02ea367c8a1b7b4bcab290708f57d58f08210b).\n\n1) Copy the Mongoose Studio frontend into `public/studio` automatically in `npm run build`.\n\n```javascript\nconst { execSync } = require('child_process');\n\n// Sign up for Mongoose Studio Pro to get an API key, or omit `apiKey` for local dev.\nconst opts = {\n  apiKey: process.env.MONGOOSE_STUDIO_API_KEY,\n  // Optionally specify which ChatGPT model to use for chat messages\n  model: 'gpt-4o-mini',\n  // Provide your own OpenAI, Anthropic, or Google Gemini API key to run chat completions locally\n  openAIAPIKey: process.env.OPENAI_API_KEY,\n  anthropicAPIKey: process.env.ANTHROPIC_API_KEY,\n  googleGeminiAPIKey: process.env.GOOGLE_GEMINI_API_KEY\n};\nconsole.log('Creating Mongoose studio', opts);\nrequire('@mongoosejs/studio/frontend')(`/.netlify/functions/studio`, true, opts).then(() =\u003e {\n  execSync(`\n  mkdir -p ./public/imdb\n  cp -r ./node_modules/@mongoosejs/studio/frontend/public/* ./public/imdb/\n  `);\n});\n```\n\n2) Create a `/studio` Netlify function in `netlify/functions/studio.js`, or wherever your Netlify functions directory is. The function path should match the `/.netlify/functions/studio` parameter in the build script above.\n\n```javascript\nconst mongoose = require('mongoose');\n\nconst handler = require('@mongoosejs/studio/backend/netlify')({\n  apiKey: process.env.MONGOOSE_STUDIO_API_KEY,\n  model: 'gpt-4o-mini',\n  openAIAPIKey: process.env.OPENAI_API_KEY,\n  anthropicAPIKey: process.env.ANTHROPIC_API_KEY,\n  googleGeminiAPIKey: process.env.GOOGLE_GEMINI_API_KEY\n}).handler;\n\nlet conn = null;\n\nmodule.exports = {\n  handler: async function studioHandler(params) {\n    if (conn == null) {\n      conn = await mongoose.connect(process.env.MONGODB_CONNECTION_STRING, { serverSelectionTimeoutMS: 3000 });\n    }\n\n    return handler.apply(null, arguments);\n  }\n};\n```\n\n3) Redeploy and you're live!\n\nTry [our IMDB demo](https://studio.mongoosejs.io/imdb/#/) for an example of Mongoose Studio running on Netlify, or check out the [studio.mongoosejs.io GitHub repo](https://github.com/mongoosejs/studio.mongoosejs.io) for the full source code.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmongoosejs%2Fstudio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmongoosejs%2Fstudio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmongoosejs%2Fstudio/lists"}