{"id":13724885,"url":"https://github.com/open-source-labs/Quell","last_synced_at":"2025-05-07T19:31:13.900Z","repository":{"id":38743769,"uuid":"291303281","full_name":"open-source-labs/Quell","owner":"open-source-labs","description":"Quell is an easy-to-use, lightweight JavaScript library providing a client- and server-side caching solution for GraphQL. Use Quell to prevent redundant client-side API requests and to minimize costly server-side response latency.","archived":false,"fork":false,"pushed_at":"2023-07-07T02:26:14.000Z","size":37172,"stargazers_count":579,"open_issues_count":0,"forks_count":134,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-30T10:38:06.405Z","etag":null,"topics":["caching","client-side","client-side-caching","cost-limiting","depth-limiting","graphql","lokijs","middleware","redis","server-side","server-side-caching"],"latest_commit_sha":null,"homepage":"https://www.quell.dev/","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/open-source-labs.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":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"open-source-labs","custom":["https://donorbox.org/donations-to-oslabs-inc"]}},"created_at":"2020-08-29T16:04:16.000Z","updated_at":"2025-04-16T00:38:31.000Z","dependencies_parsed_at":"2024-06-20T00:06:43.711Z","dependency_job_id":"ad0a78a8-7972-45ed-b46d-d870679f9661","html_url":"https://github.com/open-source-labs/Quell","commit_stats":{"total_commits":783,"total_committers":47,"mean_commits":"16.659574468085108","dds":0.8786717752234994,"last_synced_commit":"cede780bdae7817c4a267e70d746796cc94e5325"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-source-labs%2FQuell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-source-labs%2FQuell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-source-labs%2FQuell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-source-labs%2FQuell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/open-source-labs","download_url":"https://codeload.github.com/open-source-labs/Quell/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252943698,"owners_count":21829291,"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":["caching","client-side","client-side-caching","cost-limiting","depth-limiting","graphql","lokijs","middleware","redis","server-side","server-side-caching"],"created_at":"2024-08-03T01:02:05.672Z","updated_at":"2025-05-07T19:31:08.863Z","avatar_url":"https://github.com/open-source-labs.png","language":"TypeScript","funding_links":["https://github.com/sponsors/open-source-labs","https://donorbox.org/donations-to-oslabs-inc"],"categories":["TypeScript","JavaScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"./assets/Quell-B2.png\" width='500' style=\"margin-top: 10px; margin-bottom: -10px;\"\u003e\u003c/p\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/open-source-labs/Quell/blob/master/LICENSE)\n![AppVeyor](https://img.shields.io/badge/version-8.0.0-blue.svg)\n[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/open-source-labs/Quell/issues)\n\n# Quell\n\nQuell is an easy-to-use, lightweight JavaScript library providing a client- and server-side caching solution and cache invalidation for GraphQL.\n\n\u003cdiv align=\"center\"\u003e\n\n![JavaScript](https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge\u0026logo=javascript\u0026logoColor=%23F7DF1E)\n![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge\u0026logo=node.js\u0026logoColor=white)\n![Express.js](https://img.shields.io/badge/express.js-%23404d59.svg?style=for-the-badge\u0026logo=express\u0026logoColor=%2361DAFB)\n![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![Jest](https://img.shields.io/badge/-jest-%23C21325?style=for-the-badge\u0026logo=jest\u0026logoColor=white)\n![Testing-Library](https://img.shields.io/badge/-TestingLibrary-%23E33332?style=for-the-badge\u0026logo=testing-library\u0026logoColor=white)\n![Redis](https://img.shields.io/badge/redis-%23DD0031.svg?\u0026style=for-the-badge\u0026logo=redis\u0026logoColor=white)\n![GraphQL](https://img.shields.io/badge/-GraphQL-E10098?style=for-the-badge\u0026logo=graphql\u0026logoColor=white)\n![React](https://img.shields.io/badge/React-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB)\n![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)\n![MySQL](https://img.shields.io/badge/mysql-%2300f.svg?style=for-the-badge\u0026logo=mysql\u0026logoColor=white)\n![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge\u0026logo=mongodb\u0026logoColor=white)\n![TailwindCSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white)\n\n\u003c/div\u003e\n\n## Installation\n\n### Quell-Client and Quell-Server\n\nQuell is divided into two npm packages:\n\n- Download @quell/client from npm in your terminal with `npm i @quell/client`\n- Download @quell/server from npm in your terminal with `npm i @quell/server`\n\n## Features\n\n- IP-Rate Limiting to protect your server.\n- Successfully handling cache mutations with cache invalidation.\n- Quell/server offers optional depth and cost limiting middleware to protect your GraphQL endpoint! To use, please explore the [@quell/server readme](./quell-server/README.md).\n- Server-side cache now caches entire queries in instances where it is unable to cache individual datapoints.\n- Client-side caching utilizing JavaScript's built in Map data structure.\n- Client-side caching utilizing Least Recently Used (LRU) caching strategy.\n- Server-side caching utilizing a configurable Redis in-memory data store with batching.\n- Partial and exact match query caching.\n- Programmatic rebuilding of GraphQL queries to fetch only the minimum data necessary to complete the response based upon current cache contents.\n- A easy-to-use Chrome Developer Tools extension designed for Quell users. With this extension, users can:\n  - Inspect and monitor the latency of client-side GraphQL/Quell requests.\n  - Make and monitor the latency of GraphQL/Quell requests to a specified server endpoint.\n  - View server-side cache data and contents, with the ability to manually clear the cache\n  - Features require zero-to-minimal configuration and can work independently of `@quell/client` and `@quell/server`\n\n\u003cp\u003e\u003cimg src=\"./assets/updatedQuell-diagram.png\"\u003e\u003c/p\u003e\n\n### Demo\n\n\u003cp\u003e\u003cimg src=\"assets/QuellDemo-Client-Side-Demo.gif\"\u003e\u003c/p\u003e\nThe first bar represents an uncached client-side query and the second and third bars represent the response time of a cached request (0 ms).\n\n\u003c/br\u003e\n\u003c/br\u003e\n\n\u003cp\u003e\u003cimg src=\"assets/QuellDemo-Costly.gif\"\u003e\u003c/p\u003e\nA demonstration of how Quell can be implemented to protect against costly network requests.\n\n\u003c/br\u003e\n\u003c/br\u003e\n\nTry Quell out [here](https://quell.dev/)\n\n#### Usage Notes\n\n- Currently, Quell can cache 1) query-type requests without variables or directives and 2) mutation-type requests (add, update, and delete) with cache invalidation implemented. Quell will still process other requests, but will not cache the responses.\n\n### Quell Developer Tool\n\nQuell Developer Tool is currently available as a Chrome Developer Tools extension. The easiest way to get it is to [add it from the Chrome Web Store.](https://chrome.google.com/webstore/detail/quell-developer-tool/jnegkegcgpgfomoolnjjkmkippoellod)\n\n## Documentation\n\n- [@quell/client README](./quell-client/README.md)\n- [@quell/server README](./quell-server/README.md)\n- [Quell Developer Tool README](./quell-extension/README.md)\n- [Quell Demo Repo](https://github.com/oslabs-beta/QuellDemo-ts-7.0)\n\n### Contribute to Quell\n\nInterested in making a contribution to Quell? Find our open-source contribution guidelines [here](./CONTRIBUTING.md). Please feel free to also review the larger future direction for Quell in the Client and Server readme's.\n\nThank you for your interest and support!\n\n-Team Quell\n\n## Quell Contributors\n\nAccelerated by [OS Labs](https://github.com/open-source-labs) and developed by [Andrew Dai](https://github.com/andrewmdai), [Cassidy Komp](https://github.com/mimikomp), [Ian Weinholtz](https://github.com/itsHackinTime), [Stacey Lee](https://github.com/staceyjhlee), [Jonah Weinbum](https://github.com/jonahpw), [Justin Hua](https://github.com/justinfhua), [Lenny Yambao](https://github.com/lennin6), [Michael Lav](https://github.com/mikelav258), [Angelo Chengcuenca](https://github.com/amchengcuenca), [Emily Hoang](https://github.com/emilythoang), [Keely Timms](https://github.com/keelyt), [Yusuf Bhaiyat](https://github.com/yusuf-bha), [Hannah Spencer](https://github.com/Hannahspen), [Garik Asplund](https://github.com/garikAsplund), [Katie Sandfort](https://github.com/katiesandfort), [Sarah Cynn](https://github.com/cynnsarah), [Rylan Wessel](https://github.com/XpIose), [Alex Martinez](https://github.com/alexmartinez123), [Cera Barrow](https://github.com/cerab), [Jackie He](https://github.com/Jckhe), [Zoe Harper](https://github.com/ContraireZoe), [David Lopez](https://github.com/DavidMPLopez), [Sercan Tuna](https://github.com/srcntuna), [Idan Michael](https://github.com/IdanMichael), [Tom Pryor](https://github.com/Turmbeoz), [Chang Cai](https://github.com/ccai89), [Robert Howton](https://github.com/roberthowton), [Joshua Jordan](https://github.com/jjordan-90), [Jinhee Choi](https://github.com/jcroadmovie), [Nayan Parmar](https://github.com/nparmar1), [Tashrif Sanil](https://github.com/tashrifsanil), [Tim Frenzel](https://github.com/TimFrenzel), [Robleh Farah](https://github.com/farahrobleh), [Angela Franco](https://github.com/ajfranco18), [Ken Litton](https://github.com/kenlitton), [Thomas Reeder](https://github.com/nomtomnom), [Andrei Cabrera](https://github.com/Andreicabrerao), [Dasha Kondratenko](https://github.com/dasha-k), [Derek Sirola](https://github.com/dsirola1), [Xiao Yu Omeara](https://github.com/xyomeara), [Nick Kruckenberg](https://github.com/kruckenberg), [Mike Lauri](https://github.com/MichaelLauri), [Rob Nobile](https://github.com/RobNobile) and [Justin Jaeger](https://github.com/justinjaeger).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-source-labs%2FQuell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopen-source-labs%2FQuell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-source-labs%2FQuell/lists"}