{"id":22485672,"url":"https://github.com/yamalight/graffiti","last_synced_at":"2025-04-07T10:20:17.307Z","repository":{"id":57253024,"uuid":"290287437","full_name":"yamalight/graffiti","owner":"yamalight","description":"Minimalistic GraphQL framework","archived":false,"fork":false,"pushed_at":"2020-10-06T13:12:41.000Z","size":1335,"stargazers_count":303,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-31T09:08:42.219Z","etag":null,"topics":["framework","graffiti","graphql","graphql-apis","node","toolbox","tooling"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/yamalight.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/Contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-25T18:04:14.000Z","updated_at":"2025-02-18T08:10:57.000Z","dependencies_parsed_at":"2022-08-31T22:11:13.832Z","dependency_job_id":null,"html_url":"https://github.com/yamalight/graffiti","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yamalight%2Fgraffiti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yamalight%2Fgraffiti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yamalight%2Fgraffiti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yamalight%2Fgraffiti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yamalight","download_url":"https://codeload.github.com/yamalight/graffiti/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247631833,"owners_count":20970069,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["framework","graffiti","graphql","graphql-apis","node","toolbox","tooling"],"created_at":"2024-12-06T17:13:01.026Z","updated_at":"2025-04-07T10:20:17.283Z","avatar_url":"https://github.com/yamalight.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"\u003cimg alt=\"Exoframe\" src=\"./logo/svg/splash.svg\" width=\"300\"\u003e\n\n\u003e Graffiti.js is a minimalistic GraphQL framework\n\n## How to use\n\nInstall it:\n\n```\n$ npm install graffiti --save\n```\n\nAfter that, the file-system is the main API. Every `.js` file becomes a schema definition that gets automatically processed and converted to GraphQL API.\n\nPopulate `./schema/note.js` inside your project:\n\n```js\n// export new Mongoose.js schema definition\nexports.schema = {\n  name: String,\n  body: String,\n  // NOTE: Mongoose model names will always be capitalized versions of your filenames\n  group: { type: 'ObjectId', ref: 'Collection' },\n};\n```\n\nand `/schema/collection.js`:\n\n```js\nexports.schema = {\n  name: String,\n};\n```\n\nand then just run `graffiti dev` and go to `http://localhost:3000/playground`\n\nSo far, you get:\n\n- Automatic creation of GraphQL APIs\n- Automatic relations between types (when using `ObjectId` as type)\n- Access to GraphQL playground (in development mode)\n- Way to add manual resolvers or GraphQL methods\n- Way to setup manual complex relations\n- Automatic app reload on schema changes (in development mode)\n- Extensibility via third-party plugins\n\n## Requirements\n\nGraffiti assumes you have:\n\n- MongoDB v4.0+ (easiest way is to start one using docker: `docker run --name mongodb -p 27017:27017 -d mongo`)\n- Node.js v14.8+\n\n## How it works\n\nGraffiti.js is built on top of [fastify](https://www.fastify.io/), [graphql-compose](https://graphql-compose.github.io/) and [Mongoose](https://mongoosejs.com/).  \nGraffiti is heavily inspired by awesome [Next.js](https://nextjs.org/) and is mostly there to remove the need to write boilerplate code yourself.\n\nYou can find detailed documentation in [`./docs` folder](./docs/README.md).\n\nYou can also find more examples in [`./examples` folder](./examples).\n\n## Special thanks\n\nA huge thank you to:\n\n- [Jay Phelps](https://github.com/jayphelps) for releasing the \"graffiti\" npm package name to me!\n- [Ivan Semenov](https://www.behance.net/ivan_semenov) for making [an awesome logo](./logo/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyamalight%2Fgraffiti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyamalight%2Fgraffiti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyamalight%2Fgraffiti/lists"}