<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Robert Matyszewski</title>
    <description>The latest articles on Forem by Robert Matyszewski (@iamrobert).</description>
    <link>https://forem.com/iamrobert</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F125749%2F290e9cc0-fa66-4945-94f4-5832607aefc5.png</url>
      <title>Forem: Robert Matyszewski</title>
      <link>https://forem.com/iamrobert</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/iamrobert"/>
    <language>en</language>
    <item>
      <title>The state of GraphQL by Reddit</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Mon, 10 Jun 2019 12:00:02 +0000</pubDate>
      <link>https://forem.com/iamrobert/the-state-of-graphql-by-reddit-8k3</link>
      <guid>https://forem.com/iamrobert/the-state-of-graphql-by-reddit-8k3</guid>
      <description>&lt;p&gt;There’s a lot of hype on GraphQL and debate to compare it to REST. GraphQL is in the early stage of adoption globally and no one exactly knows where it will end. Researching on the internet, I was able to find many positive articles presenting this new piece of tech. Is it just a hype of the first impression?&lt;/p&gt;

&lt;p&gt;I’ve researched Reddit and selected the most upvoted comments on GraphQL.  My goal was to write down as much transparent and objective article on the topic. I’ve used discussions and arguments between users to present a different point of view on each aspect. Each comment quoter below has a link to its author and number of upvotes in (). Keep in mind that upvote numbers might change since I've written this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agenda
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;General review&lt;/li&gt;
&lt;li&gt;React &amp;amp; Apollo review&lt;/li&gt;
&lt;li&gt;Big Boys &amp;amp; GraphQL &lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Data Fetching&lt;/li&gt;
&lt;li&gt;Summary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  General review
&lt;/h1&gt;

&lt;p&gt;Starting from a general view I’ve chosen two cases. First, one - &lt;a href="https://www.reddit.com/user/SwiftOneSpeaks/"&gt;SwiftOneSpeaks&lt;/a&gt; shows front end developer perspective and potential improvements in time to market. Secondly, &lt;a href="https://www.reddit.com/user/scruffles360/"&gt;Scruffles360&lt;/a&gt; presents strategy trends on how teams adapt graphql and which one they used. Later on you’ll find more about his case. The second comment was the least upvoted one that I’ve chosen in the article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/eno3ovb/"&gt;SwiftOneSpeaks&lt;/a&gt; (23) says: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;When I was working with a backend dev team, they were far more willing to provide new queries to match my needs because it didn't impact existing queries they had to support. (That said, I have no idea how well this scales over time). It also reduced the number of crappy responses I had to reparse into usable (for my needs) data structures. (example, I'd get 3 arrays back that I had to relate and zip together into a single set of objects. With GraphQL, I had more ability to demand data in a useful shape, though the backend still has to do their part).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/enpb6fg/"&gt;Scruffles360&lt;/a&gt; (8) explains his three trends in GraphQL scope:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;The monolith - which is what Apollo is pushing now. Every company has one and only one api endpoint and schema that proxies to everything else (&lt;a href="https://principledgraphql.com/"&gt;https://principledgraphql.com/&lt;/a&gt;). I disagree with this wholeheartedly, but won't repeat my arguments here (you can dig through my comment history if you want)&lt;/li&gt;
&lt;li&gt;The database api - for some strange reason people have started adding plugins to databases that give you direct database access via graphql. Graphql is wonderful for so many reasons, but it doesn't come close to competing with a native database query language. More importantly, this takes away your business layer giving callers direct access to your store. No one should have access to your store except one single microservice. Everyone else should be calling through your api.&lt;/li&gt;
&lt;li&gt;The medium approach - The classic API approach where each app has their own API (graphql in this case). It might isolate business logic or proxy to microservices (via rest or by schema stitching another Graphql schema). That's the route we went, and I don't regret a thing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  React &amp;amp; Apollo review
&lt;/h1&gt;

&lt;p&gt;React &amp;amp; Apollo combination review request  gained a lot of attention. Additionally &lt;a href="https://www.reddit.com/user/wronglyzorro/"&gt;Wronglyzorro&lt;/a&gt; and &lt;a href="https://www.reddit.com/user/livelierepeat/"&gt;Livelierepeat&lt;/a&gt; argued about why backend developers might not like GraphQL. The response from more experienced developer gained triple more upvotes! Additionally I've choosen one longer but very detailed review.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/9nmj0w/what_is_your_experience_with_react_apollo_graphql/e7nkk73/"&gt;Wronglyzorro&lt;/a&gt; (12) says: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;We strictly use react + apollo on our web app. We're also forcing the mobile clients to use it as well. It's incredible and the future. Backend devs of course hate it because they are set in their ways and don't like change. However over the last year when there have been any sort of outages it was never graphql that was a point of weakness. It was always the legacy backend services that crapped out.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/9nmj0w/what_is_your_experience_with_react_apollo_graphql/e7o92o5/"&gt;Livelierepeat&lt;/a&gt; (40) responded: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;You might want to gain a little more insight that that. I used to be a young dev who used all of the latest tools and scoffed at those who "couldn't adapt". I've learned that there are often much more interesting reasons than, "people hate change". Like does GraphQl create burdensome abstractions? What is getting added to their workload that they are resisting?&lt;br&gt;
At some point using all of the latest tools loses its luster. More power comes from understanding the code and the people processes as well.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/9nmj0w/what_is_your_experience_with_react_apollo_graphql/e7nlgrn/"&gt;Capaj&lt;/a&gt; (11) detailed review: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;We use it in production since May. We're a fullstack team so we're not on the mercy of some other team doing the backend. It wasn't easy persuading everyone, but with a single sample feature built in GQL everyone agreed it looked way better than REST. Graphiql helped a lot with that. It's been quite good. We have apollo engine enabled on the backend and I really enjoy using metrics to hunt API bugs in prod. We use decapi to decorate our objection.js DB models. We have a single place where we define our models and GQL gets generated almost for free.&lt;br&gt;
On the frontend we use apollo-client, but we don't use caching so far. Our FE focus is on getting rid of our legacy angular.js code, so we don't have time yet to experiment with FE caching.&lt;br&gt;
I don't event consider using apollo for client side state management, because all the feedback I've heard so far was that it's not production ready yet. Also I have to say it looks quite verbose for what it really does. Instead I am hoping I can extend &lt;a href="https://github.com/mhaagens/gql-to-mobx"&gt;https://github.com/mhaagens/gql-to-mobx&lt;/a&gt; and use that for our state management needs. MST works wonders with typescript. If we can generate MST models from our queries on the fly while editing our GQL queries we can boost our productivity considerably.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Caching
&lt;/h1&gt;

&lt;p&gt;I’ve found a lot of great and upvoted comments from &lt;a href="https://www.reddit.com/user/SwiftOneSpeaks/"&gt;SwiftOneSpeaks&lt;/a&gt; and &lt;a href="https://www.reddit.com/user/scruffles360/"&gt;Scruffles360&lt;/a&gt; which had been already mentioned here. Here’s what they discussed on lack of caching and potential solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/eno3ovb/"&gt;SwiftOneSpeaks&lt;/a&gt; (23) writes: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;While you can configure GraphQL to work differently, as a practical matter they will always be POST requests. Which means all your browser/CDN/proxy caches that rely on GET being idempotent and POST not being now don't work by default. Everything is treated as a new request. You can set the client to do more smart caching, but that's literally solving a problem you created.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/enokkzb/"&gt;Scruffles360&lt;/a&gt; (11) respoded: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Apollo has a solution for this. I haven't tried it, but its called Dynamic Persisted Queries if you want to read up. Basically the client makes a GET call with a hash of the query and if it fails, falls back to POST. The next GET call will succeed and populate any proxy caches.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Data Fetching
&lt;/h1&gt;

&lt;p&gt;Those guys also presented a different points of view on data fetching. In the &lt;a href="https://www.imaginarycloud.com/blog/graphql-vs-rest/"&gt;original article&lt;/a&gt; writer describes an example of blog app with multiple authors and possibility of using GraphQL vs REST. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/eno3ovb/"&gt;SwiftOneSpeaks&lt;/a&gt; (23) says: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Everyone emphasizes the "over fetching" problem. I feel like that's a red herring outside of poorly designed services (and that sort of points out the flaw - don't expect GraphQL services from poor service developers to suddenly not be poor) It's easy to resolve if you put a service in front - GraphQL can be that service, but so can something else. The issue isn't over fetching vs not, it's having a central service AND solving the caching issues.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/enokkzb/"&gt;Scruffles360&lt;/a&gt; (12) responded:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Over fetching is a real problem. When you have hundreds of clients, each calling your system in different ways, adding a property to a rest api causes massive inefficiencies. Many people point out using client-centric facades for their mobile client vs web for example, but that doesn't scale. My project is called by hundreds of clients, each asking for slightly different data in different ways.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Big Boys &amp;amp; GraphQL
&lt;/h1&gt;

&lt;p&gt;Everyone is interested in big companies like Facebook, Netflix and Coursera and their adaptation of GraphQL. In the &lt;a href="https://www.imaginarycloud.com/blog/graphql-vs-rest/"&gt;article&lt;/a&gt; commented on Reddit we can find two main reasons as an author - states. The first comment presented was the most upvoted comment that I’ve found. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the early 2010s there was a boom in mobile usage, which led to some issues with low-powered devices and sloppy networks. REST isn't optimal to deal with those problems;&lt;/li&gt;
&lt;li&gt;As mobile usage increased, so did the number of different front-end frameworks and platforms that run client applications. Given REST's inflexibility, it was harder to develop a single API that could fit the requirements of every client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/ennt7ak/"&gt;Greulich&lt;/a&gt; (62) responded to article:   &lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;This is so tangential as to be pointless. A different method of structuring your requests, does not render the network on which those requests better or worse.&lt;/li&gt;
&lt;li&gt;I think the author means endpoint rather than API, because any endpoint, no matter how many there are, is part of the API.
Assuming that is the case, why do we NEED only one endpoint?&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/enohrog/"&gt;Scruffles360&lt;/a&gt; (16) responded to Greulich:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The first two points weren't worded well in the article, but are still valid. A REST API can either be generic and reusable or crafted specifically for a known client. In the first case, you aren't going to get good performance when you keep making calls back to the system for more data (especially on high-latency networks like we had on mobile 10 years ago). If you craft your API for a specific client, you obviously run into scalability problems.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;There’s a lot to say or choose when picking the right comment to summarize the state of GraphQL. &lt;strong&gt;Till today the most popular submissions on reddit are case studies of facebook or netflix yet they aren’t much commented&lt;/strong&gt;. &lt;br&gt;
This gives us already a good summary on reddit’s view on GraphQL. &lt;br&gt;
From a daily developer life I couldn’t skip what &lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/enn9sdf/"&gt;Kdesign&lt;/a&gt; (36) wrote:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;GraphQL provides job security, that’s for sure&lt;/em&gt;.
&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/node/comments/bozsb1/graphql_vs_rest_putting_rest_to_rest/enng3ba/"&gt;Kollektiv&lt;/a&gt; (44) stated a great list of GraphQL issues:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Things like query rate limiting and credit estimation are difficult.&lt;/li&gt;
&lt;li&gt;The way type and dataloaders work, it's difficult to bind queries to the database layer in an efficient way by grouping queries without writing a full module for it.&lt;/li&gt;
&lt;li&gt;Validation only checks types so you still need some kind of JSON schema to do additional format validation.&lt;/li&gt;
&lt;li&gt;GraphQL queries only allow for left joins so recreating SQL like INNER JOINs together with filters quickly becomes awkward.&lt;/li&gt;
&lt;li&gt;The imposed pagination (connections) from frameworks like Relay are a mess.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Regarding my initial research on GraphQL &lt;a href="https://www.reddit.com/r/reactjs/comments/bozrg1/graphql_vs_rest_putting_rest_to_rest/eno3ovb/"&gt;SwiftOneSpeaks&lt;/a&gt; (24) wrote: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I expect many of the "GraphQL is great" reports we are seeing is mainly because ANY new service is great - they only get klunky over time, as assumptions are violated and needs change and code changes accrue. This doesn't mean GraphQL won't be great - it just means I can't trust early reports too much.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And finally, I’ve chosen &lt;a href="https://www.reddit.com/r/node/comments/bozsb1/graphql_vs_rest_putting_rest_to_rest/enopzpk/"&gt;Mando0975&lt;/a&gt; (28) opinion to summarize this article:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Development should always be about picking the right tool for the job. GraphQL isn't always the right tool. REST isn't dead and GraphQL isn't going to kill it.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What's your experience with GraphQL?
&lt;/h3&gt;

&lt;p&gt;If you're looking for best graphql tutorials check this &lt;a href="https://blog.graphqleditor.com/top-graphql-tutorials-reviewed-2019"&gt;post&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>reddit</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Turn Django REST API into a GraphQL like API</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Fri, 24 May 2019 13:19:11 +0000</pubDate>
      <link>https://forem.com/iamrobert/turn-django-rest-api-into-a-graphql-like-api-115h</link>
      <guid>https://forem.com/iamrobert/turn-django-rest-api-into-a-graphql-like-api-115h</guid>
      <description>&lt;p&gt;Web APIs are the motors that power most of our nowadays apps. For many years REST has been the principal architect for APIs, but in this article, we will investigate Django to GraphQL library! &lt;/p&gt;

&lt;p&gt;With REST APIs, you were regularly creating URLs for every object of data that's available. Thinking about REST API example for books - we'll have URLs for the books themselves, authors, prizes, characters and heroes ... it's already a lot! This could involve a lot of requests. &lt;/p&gt;

&lt;p&gt;With GraphQL you have one endpoint, ask what you want and get exactly that. It's is the top wanted technology according to The state of JS 2018 and every week community creates something interesting to help users adopt into new technology. &lt;a href="https://twitter.com/yezyilomo" rel="noopener noreferrer"&gt;Yezyilomo&lt;/a&gt; came with the idea of python library that allows to turn Django Rest Framework into GraphQL like API.  Let's explore it more.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1130446070260076545-12" src="https://platform.twitter.com/embed/Tweet.html?id=1130446070260076545"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1130446070260076545-12');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1130446070260076545&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Django-restql is a library which turn your API made with Django REST Framework(DRF) into a GraphQL like API. With django-restql you will be able to: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send a query to your API and get precisely what you need, nothing extra and nothing less.&lt;/li&gt;
&lt;li&gt;Get expected results, since you control what you get from the server.&lt;/li&gt;
&lt;li&gt;Control the data you get, not the server.&lt;/li&gt;
&lt;li&gt;Save the load of fetching unused data from the server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The library works by choosing dynamically a subset of fields per DRF resource as specified by the request's &lt;code&gt;query&lt;/code&gt; parameter.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/yezyilomo" rel="noopener noreferrer"&gt;
        yezyilomo
      &lt;/a&gt; / &lt;a href="https://github.com/yezyilomo/django-restql" rel="noopener noreferrer"&gt;
        django-restql
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Turn your API made with Django REST Framework(DRF) into a GraphQL like API.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/yezyilomo/django-restql/master/docs/img/icon.svg"&gt;&lt;img height="24" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fyezyilomo%2Fdjango-restql%2Fmaster%2Fdocs%2Fimg%2Ficon.svg"&gt;&lt;/a&gt; &lt;a href="https://yezyilomo.github.io/django-restql" rel="nofollow noopener noreferrer"&gt;  Django RESTQL&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/yezyilomo/django-restql/actions/workflows/main.yml/badge.svg?branch=master"&gt;&lt;img src="https://github.com/yezyilomo/django-restql/actions/workflows/main.yml/badge.svg?branch=master" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/django-restql/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e1a2ee5b6aa904ed2e89b6a062ab0c64f77ddd079cd2cf417e948723cf469291/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f646a616e676f2d72657374716c2e737667" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/django-restql/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c408b84bab8b92382be93aa1ff655b97cfc075c18c2d8014e2fa8dc117a677bf/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f646a616e676f2d72657374716c2e737667" alt="Python Versions"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/django-restql/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f83fd0a30c4f22d673538b5c2834d20761ffb5174c1699c5ae96f501906cae24/68747470733a2f2f696d672e736869656c64732e696f2f707970692f6c2f646a616e676f2d72657374716c2e737667" alt="License"&gt;&lt;/a&gt;
      
&lt;a href="https://pepy.tech/project/django-restql" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f6f61aa407cf2bacc65b3e8bc3c4f8ce34377071c5460e68ddc20105ea2f816/68747470733a2f2f706570792e746563682f62616467652f646a616e676f2d72657374716c" alt="Downloads"&gt;&lt;/a&gt;
&lt;a href="https://pepy.tech/project/django-restql" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0855ae58dd543bba94d6764f861f34bc23e9cbeb118444883f10d7e7cb95470b/68747470733a2f2f706570792e746563682f62616467652f646a616e676f2d72657374716c2f6d6f6e7468" alt="Downloads"&gt;&lt;/a&gt;
&lt;a href="https://pepy.tech/project/django-restql" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ae77646206771549d793e0973b12ce860b49622e75bbb658ea8ca9ccc0444a33/68747470733a2f2f706570792e746563682f62616467652f646a616e676f2d72657374716c2f7765656b" alt="Downloads"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Django RESTQL&lt;/strong&gt; is a python library which allows you to turn your API made with &lt;strong&gt;Django REST Framework(DRF)&lt;/strong&gt; into a GraphQL like API. With &lt;strong&gt;Django RESTQL&lt;/strong&gt; you will be able to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Send a query to your API and get exactly what you need, nothing more and nothing less.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Control the data you get, not the server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get predictable results, since you control what you get from the server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get nested resources in a single request.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Avoid Over-fetching and Under-fetching of data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write(create &amp;amp; update) nested data of any level in a single request.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isn't it cool?.&lt;/p&gt;
&lt;p&gt;Want to see how this library is making all that possible?&lt;/p&gt;
&lt;p&gt;Check out the full documentation at &lt;a href="https://yezyilomo.github.io/django-restql" rel="nofollow noopener noreferrer"&gt;https://yezyilomo.github.io/django-restql&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or try a live demo on &lt;a href="https://django-restql-playground.yezyilomo.me" rel="nofollow noopener noreferrer"&gt;Django RESTQL Playground&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Python &amp;gt;= 3.6&lt;/li&gt;
&lt;li&gt;Django &amp;gt;= 1.11&lt;/li&gt;
&lt;li&gt;Django REST Framework &amp;gt;= 3.5&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installing&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-python notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;pip&lt;/span&gt; &lt;span class="pl-s1"&gt;install&lt;/span&gt; &lt;span class="pl-s1"&gt;django&lt;/span&gt;&lt;span class="pl-c1"&gt;-&lt;/span&gt;&lt;span class="pl-s1"&gt;restql&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Using &lt;strong&gt;Django RESTQL&lt;/strong&gt; to query…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yezyilomo/django-restql" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Follow &lt;a href="https://twitter.com/yezyilomo" rel="noopener noreferrer"&gt;Yezyilomo&lt;/a&gt; to get in touch with him! &lt;/p&gt;

&lt;h2&gt;
  
  
  Installing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;django&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;restql&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Using &lt;strong&gt;django-restql&lt;/strong&gt; is very simple, you just have to use the DynamicFieldsMixin when defining a View.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;viewsets&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib.auth.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.serializers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;UserSerializer&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django_restql&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DynamicFieldsMixin&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserViewSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DynamicFieldsMixin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewsets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelViewSet&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;queryset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;order_by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;-date_joined&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;serializer_class&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;UserSerializer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A regular request returns all fields specified on DRF serializer, in fact &lt;strong&gt;django-restql&lt;/strong&gt; doesn't handle this request at all:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /users&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yezyilomo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yezileliilomo@hotmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"groups"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;django-restql&lt;/strong&gt; handle all GET requests with &lt;code&gt;query&lt;/code&gt; parameter, this parameter is the one used to pass all fields to be included on a response. For example to select &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;username&lt;/code&gt; fields from &lt;code&gt;user&lt;/code&gt; model, send a request with a &lt;code&gt;query&lt;/code&gt; parameter as shown below.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /users/?query=[["id", "username"]]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yezyilomo"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a query contains nested field, &lt;strong&gt;django-restql&lt;/strong&gt; will return its id or array of ids for the case of nested iterable field(one2many or many2many). For example on a request below &lt;code&gt;location&lt;/code&gt; is a flat nested field(many2one) and &lt;code&gt;groups&lt;/code&gt; is an iterable nested field(one2many or many2many).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /users/?query=[["id", "username", "location", "groups"]]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yezyilomo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"groups"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;django-restql&lt;/strong&gt; support querying both flat and nested resources, so you can expand or query nested fields at any level as long as your field is defined as nested field on a serializer. For example you can query a country and region field from location.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /users/?query=[["id", "username", {"location": ["country", "region"]}]]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yezyilomo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"contry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tanzania"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dar es salaam"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;django-restql&lt;/strong&gt; got your back on expanding or querying iterable nested fields too. For example if you want to expand &lt;code&gt;groups&lt;/code&gt; field into &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;name&lt;/code&gt;, here is how you would do it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /users/?query=[["id", "username" {"groups": [[ "id", "name" ]]}]]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yezyilomo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"groups"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Auth_User"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Admin_User"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>graphql</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Getting started with React &amp; GraphQL part II</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Tue, 21 May 2019 09:25:34 +0000</pubDate>
      <link>https://forem.com/robmatyszewski/getting-started-with-react-graphql-part-ii-532g</link>
      <guid>https://forem.com/robmatyszewski/getting-started-with-react-graphql-part-ii-532g</guid>
      <description>&lt;p&gt;This is the second part of series &lt;em&gt;Getting started with React &amp;amp; GraphQL&lt;/em&gt; containing most popular starter kits and example apps. Let's explore at the start what people like and dislike about each technology. Data show below comes from the state of js survey 2018.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;** React liked aspects**&lt;/th&gt;
&lt;th&gt;** React disliked aspects**&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚙️ Elegant programming style &amp;amp; patterns&lt;/td&gt;
&lt;td&gt;⚙️ Clumsy programming style&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎁 Rich package ecosystem&lt;/td&gt;
&lt;td&gt;🎈 Bloated &amp;amp; complex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏛️ Well-established option&lt;/td&gt;
&lt;td&gt;👶 Hard learning curve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📖 Good documentation&lt;/td&gt;
&lt;td&gt;👫 Concerns about the team/company&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡ Fast performance&lt;/td&gt;
&lt;td&gt;📖 Bad documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔧 Powerful developer tooling&lt;/td&gt;
&lt;td&gt;⚖️ Fast-changing &amp;amp; breaks often&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;** GraphQL liked aspects**&lt;/th&gt;
&lt;th&gt;** GraphQL disliked aspects**&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚙️ Elegant programming style &amp;amp; patterns&lt;/td&gt;
&lt;td&gt;🎈 Bloated &amp;amp; complex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📉 Growing momentum/popularity&lt;/td&gt;
&lt;td&gt;⚙️ Clumsy programming style&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔧 Powerful developer tooling&lt;/td&gt;
&lt;td&gt;👶 Hard learning curve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🕹️ Full-featured &amp;amp; powerful&lt;/td&gt;
&lt;td&gt;📖 Bad documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📖 Good documentation&lt;/td&gt;
&lt;td&gt;🔧 Lacking developer tooling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡ Fast performance&lt;/td&gt;
&lt;td&gt;🕹️ Limited &amp;amp; lacking in features&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Agenda
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Extensive React Apollo.&lt;/li&gt;
&lt;li&gt;React GraphQL vanilla.js.&lt;/li&gt;
&lt;li&gt;React app with local state management.&lt;/li&gt;
&lt;li&gt;React Apollo mocking example.&lt;/li&gt;
&lt;li&gt;WhatsApp clone.&lt;/li&gt;
&lt;li&gt;React Native "hello world".&lt;/li&gt;
&lt;li&gt;Pokedex React Native App.&lt;/li&gt;
&lt;li&gt;Realtime, Offline AWS AppSync.&lt;/li&gt;
&lt;li&gt;Starter fullstack app.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/rwieruch/react-graphql-github-apollo"&gt;1. Extensive React app&lt;/a&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  A React + Apollo + GraphQL GitHub Client
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/the-road-to-graphql"&gt;
        the-road-to-graphql
      &lt;/a&gt; / &lt;a href="https://github.com/the-road-to-graphql/react-graphql-github-apollo"&gt;
        react-graphql-github-apollo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚀A React + Apollo + GraphQL GitHub Client. Your opportunity to learn about these technologies in a real world application.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
A React + Apollo + GraphQL GitHub Client&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/the-road-to-graphql/react-graphql-github-apollo" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/9799671726cfd85b31102abd40f3e78f10ff9d37/68747470733a2f2f7472617669732d63692e6f72672f7468652d726f61642d746f2d6772617068716c2f72656163742d6772617068716c2d6769746875622d61706f6c6c6f2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://slack-the-road-to-learn-react.wieruch.com/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/c14e7190667355a607e4b74556c133962a37d5c5/68747470733a2f2f736c61636b2d7468652d726f61642d746f2d6c6561726e2d72656163742e776965727563682e636f6d2f62616467652e737667" alt="Slack"&gt;&lt;/a&gt; &lt;a href="https://greenkeeper.io/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/96a80b32a30153235e0a9a5bad0b3375b303d566/68747470733a2f2f6261646765732e677265656e6b65657065722e696f2f7468652d726f61642d746f2d6772617068716c2f72656163742d6772617068716c2d6769746875622d61706f6c6c6f2e737667" alt="Greenkeeper badge"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://user-images.githubusercontent.com/2479967/35777369-14a2d1ae-09ad-11e8-80c6-7a3ddeabb716.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ogGwn93A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/2479967/35777369-14a2d1ae-09ad-11e8-80c6-7a3ddeabb716.gif" width="300"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;React 16 with create-react-app&lt;/li&gt;
&lt;li&gt;Responsive&lt;/li&gt;
&lt;li&gt;React Router 4&lt;/li&gt;
&lt;li&gt;Apollo with GitHub GraphQL API
&lt;ul&gt;
&lt;li&gt;Queries and Mutations with render props&lt;/li&gt;
&lt;li&gt;Optimistic Updates&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Optimistic Fetch (e.g. Issues)
&lt;ul&gt;
&lt;li&gt;not everywhere for the purpose of demonstrating though&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git clone git@github.com:the-road-to-graphql/react-graphql-github-apollo.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;cd react-graphql-github-apollo&lt;/li&gt;
&lt;li&gt;add your own &lt;a href="https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/"&gt;GitHub personal access token&lt;/a&gt; in a .env file in your root folder
&lt;ul&gt;
&lt;li&gt;scopes/permissions you need to check: admin:org, repo, user, notifications&lt;/li&gt;
&lt;li&gt;REACT_APP_GITHUB_PERSONAL_ACCESS_TOKEN=xxxXXX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;npm install&lt;/li&gt;
&lt;li&gt;npm start&lt;/li&gt;
&lt;li&gt;visit &lt;code&gt;http://localhost:3000&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Contributing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Please install &lt;a href="https://prettier.io/docs/en/editors.html" rel="nofollow"&gt;Prettier integration&lt;/a&gt; to your editor and turn on &lt;strong&gt;format on save&lt;/strong&gt; option.
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/prettier/prettier-atom"&gt;Prettier For Atom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/prettier/prettier-vscode"&gt;Prettier for VSCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/prettier/prettier-emacs"&gt;Prettier for EMACS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prettier.io/docs/en/vim.html" rel="nofollow"&gt;Prettier for VIM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prettier.io/docs/en/editors.html" rel="nofollow"&gt;others...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Want to learn more about React + GraphQL + Apollo?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Don't miss &lt;a href="https://www.getrevue.co/profile/rwieruch" rel="nofollow"&gt;upcoming Tutorials and Courses&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Check out current &lt;a href="https://roadtoreact.com" rel="nofollow"&gt;React Courses&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/the-road-to-graphql/react-graphql-github-apollo"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XByOg583--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/359i2n7b986j08jyrqfw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XByOg583--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/359i2n7b986j08jyrqfw.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React 16 with create-react-app&lt;/li&gt;
&lt;li&gt;Responsive&lt;/li&gt;
&lt;li&gt;React Router 4&lt;/li&gt;
&lt;li&gt;Apollo with GitHub GraphQL API

&lt;ul&gt;
&lt;li&gt;Queries and Mutations with render props&lt;/li&gt;
&lt;li&gt;Optimistic Updates&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Optimistic Fetch (e.g. Issues)&lt;/li&gt;
&lt;li&gt;not everywhere for the purpose of demonstrating though&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/rwieruch/react-graphql-github-vanilla"&gt;2. React GraphQL vanilla.js&lt;/a&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  A React GraphQL example using GitHub's GraphQL API with vanilla JS
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/the-road-to-graphql"&gt;
        the-road-to-graphql
      &lt;/a&gt; / &lt;a href="https://github.com/the-road-to-graphql/react-graphql-github-vanilla"&gt;
        react-graphql-github-vanilla
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A React GraphQL example using GitHub's GraphQL API with vanilla JS
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
react-graphql-github-vanilla&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/the-road-to-graphql/react-graphql-github-vanilla" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/e9a311bc7f8fe946345c6d2a7111efd87b5855cc/68747470733a2f2f7472617669732d63692e6f72672f7468652d726f61642d746f2d6772617068716c2f72656163742d6772617068716c2d6769746875622d76616e696c6c612e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://slack-the-road-to-learn-react.wieruch.com/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/c14e7190667355a607e4b74556c133962a37d5c5/68747470733a2f2f736c61636b2d7468652d726f61642d746f2d6c6561726e2d72656163742e776965727563682e636f6d2f62616467652e737667" alt="Slack"&gt;&lt;/a&gt; &lt;a href="https://greenkeeper.io/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/0a6666f6568aab2287fd2c7e000824be541a603b/68747470733a2f2f6261646765732e677265656e6b65657065722e696f2f7468652d726f61642d746f2d6772617068716c2f72656163742d6772617068716c2d6769746875622d76616e696c6c612e737667" alt="Greenkeeper badge"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A simple React application consuming the GitHub GraphQL API with plain HTTP requests. &lt;a href="https://www.robinwieruch.de/react-with-graphql-tutorial" rel="nofollow"&gt;Read more about it over here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;React 16 with create-react-app&lt;/li&gt;
&lt;li&gt;GitHub GraphQL API&lt;/li&gt;
&lt;li&gt;Consuming GraphQL with plain JS&lt;/li&gt;
&lt;li&gt;no Apollo/Relay
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rwieruch/react-graphql-github-apollo"&gt;are you curious about Apollo though?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git clone git@github.com:the-road-to-graphql/react-graphql-github-vanilla.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;cd react-graphql-github-vanilla&lt;/li&gt;
&lt;li&gt;npm install&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/"&gt;add your own REACT_APP_GITHUB_PERSONAL_ACCESS_TOKEN in .env file&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;scopes/permissions you need to check: admin:org, repo, user, notifications&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;npm start&lt;/li&gt;
&lt;li&gt;visit &lt;code&gt;http://localhost:3000&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Want to learn more about React + GraphQL + Apollo?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Don't miss &lt;a href="https://www.getrevue.co/profile/rwieruch" rel="nofollow"&gt;upcoming Tutorials and Courses&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Check out current &lt;a href="https://roadtoreact.com" rel="nofollow"&gt;React Courses&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/the-road-to-graphql/react-graphql-github-vanilla"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React 16 with create-react-app&lt;/li&gt;
&lt;li&gt;GitHub GraphQL API&lt;/li&gt;
&lt;li&gt;Consuming GraphQL with plain JS&lt;/li&gt;
&lt;li&gt;no Apollo/Relay&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/rwieruch/react-apollo-link-state-example"&gt;3. React app with local state management.&lt;/a&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  A React application using Apollo Client with apollo-link-state for local state management.
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/the-road-to-graphql"&gt;
        the-road-to-graphql
      &lt;/a&gt; / &lt;a href="https://github.com/the-road-to-graphql/react-apollo-link-state-example"&gt;
        react-apollo-link-state-example
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A React application using Apollo Client with apollo-link-state for local state management.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
react-apollo-link-state-example&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/the-road-to-graphql/react-apollo-link-state-example" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/550a13fe300ad711acc07d2c109e84f7415dbe31/68747470733a2f2f7472617669732d63692e6f72672f7468652d726f61642d746f2d6772617068716c2f72656163742d61706f6c6c6f2d6c696e6b2d73746174652d6578616d706c652e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://slack-the-road-to-learn-react.wieruch.com/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/c14e7190667355a607e4b74556c133962a37d5c5/68747470733a2f2f736c61636b2d7468652d726f61642d746f2d6c6561726e2d72656163742e776965727563682e636f6d2f62616467652e737667" alt="Slack"&gt;&lt;/a&gt; &lt;a href="https://greenkeeper.io/" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/96961f77e32ca16858b8d3660258b26269dd3509/68747470733a2f2f6261646765732e677265656e6b65657065722e696f2f7468652d726f61642d746f2d6772617068716c2f72656163742d61706f6c6c6f2d6c696e6b2d73746174652d6578616d706c652e737667" alt="Greenkeeper badge"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A React application using Apollo Client with &lt;a href="https://www.apollographql.com/docs/link/links/state.html" rel="nofollow"&gt;apollo-link-state&lt;/a&gt; for local state management. While &lt;strong&gt;apollo-link-state (as alternative to React's local state, Redux or MobX)&lt;/strong&gt; is used to manage selected items in a list as local data, the remaining queries and mutations are used for remote data.&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git clone git@github.com:the-road-to-graphql/react-apollo-link-state-example.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;cd react-apollo-link-state-example&lt;/li&gt;
&lt;li&gt;npm install&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/"&gt;add your own REACT_APP_GITHUB_PERSONAL_ACCESS_TOKEN in .env file&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;scopes/permissions you need to check: admin:org, repo, user, notifications&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;npm start&lt;/li&gt;
&lt;li&gt;visit &lt;code&gt;http://localhost:3000&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Want to learn more about React + GraphQL + Apollo?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Don't miss &lt;a href="https://www.getrevue.co/profile/rwieruch" rel="nofollow"&gt;upcoming Tutorials and Courses&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Check out current &lt;a href="https://roadtoreact.com" rel="nofollow"&gt;React Courses&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/the-road-to-graphql/react-apollo-link-state-example"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;A React application using Apollo Client with &lt;a href="https://www.apollographql.com/docs/link/links/state.html"&gt;apollo-link-state&lt;/a&gt; for local state management. While &lt;strong&gt;apollo-link-state (as alternative to React's local state, Redux or MobX)&lt;/strong&gt; is used to manage selected items in a list as local data, the remaining queries and mutations are used for remote data.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/srtucker22/chatty"&gt;4. WhatsApp clone&lt;/a&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  A WhatsApp clone with React Native and Apollo
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/srtucker22"&gt;
        srtucker22
      &lt;/a&gt; / &lt;a href="https://github.com/srtucker22/chatty"&gt;
        chatty
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A WhatsApp clone with React Native and Apollo (Tutorial)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
Chatty&lt;/h1&gt;
&lt;h2&gt;
A WhatsApp clone with React Native and Apollo&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master/#overview"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master/#steps"&gt;Steps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master/#installing"&gt;Installing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master/#getting-started"&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master/#contributing"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master/#licence"&gt;Licence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
Overview&lt;/h1&gt;
&lt;p&gt;View the Medium blog for this tutorial &lt;a href="https://medium.com/react-native-training/building-chatty-a-whatsapp-clone-with-react-native-and-apollo-part-1-setup-68a02f7e11" rel="nofollow"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This tutorial was created using &lt;a href="https://github.com/Urigo/tortilla"&gt;tortilla&lt;/a&gt;, an incredible framework for building tutorials.&lt;/p&gt;
&lt;p&gt;Starting with the very first commit, every commit in Chatty represents the next step in the tutorial. Follow the tutorial for a guided walk through the code, or investigate a commit to see exactly what code changed for a given step. Since this is git, you can even download the app at any step in the tutorial -- how cool is that?!&lt;/p&gt;
&lt;h1&gt;
Steps&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step1.md"&gt;Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step2.md"&gt;GraphQL Queries with ApolloServer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step3.md"&gt;GraphQL Queries with React Apollo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step4.md"&gt;GraphQL Mutations &amp;amp; Optimistic UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step5.md"&gt;GraphQL Pagination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step6.md"&gt;GraphQL Subscriptions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step7.md"&gt;GraphQL Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/srtucker22/chatty/master//.tortilla/manuals/views/step8.md"&gt;GraphQL Input Types&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;
Installing&lt;/h1&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;npm install                       &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install server dependencies&lt;/span&gt;
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; client &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm install          &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install client dependencies&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For Steps 7 and higher, please enter your…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/srtucker22/chatty"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;This is a tutorial for building this example &lt;a href="https://medium.com/react-native-training/building-chatty-a-whatsapp-clone-with-react-native-and-apollo-part-1-setup-68a02f7e11"&gt;here&lt;/a&gt;. This tutorial was created using &lt;a href="https://github.com/Urigo/tortilla"&gt;tortilla&lt;/a&gt;, an incredible framework for building tutorials. Starting with the very first commit, every commit in Chatty represents the next step in the tutorial. Follow the tutorial for a guided walk through the code, or investigate a commit to see exactly what code changed for a given step. Since this is git, you can even download the app at any step in the tutorial -- how cool is that?!&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/apollographql/frontpage-react-native-app"&gt;5. React Native "hello world"&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/apollographql"&gt;
        apollographql
      &lt;/a&gt; / &lt;a href="https://github.com/apollographql/frontpage-react-native-app"&gt;
        frontpage-react-native-app
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      📄 Apollo "hello world" app, for React Native
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
Apollo React Native Hello World app&lt;/h1&gt;
&lt;p&gt;This is the simple example React Native/Apollo app that lives at dev.apollodata.com.&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;p&gt;Clone the repository and run &lt;code&gt;npm install&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/apollostack/frontpage-react-native-app
cd frontpage-react-native-app
npm install
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;
Starting the app&lt;/h2&gt;
&lt;p&gt;Make sure you have &lt;a href="https://facebook.github.io/react-native/docs/getting-started.html" rel="nofollow"&gt;React Native installed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This app talks to the hello world server, available here: &lt;a href="https://github.com/apollostack/frontpage-server"&gt;https://github.com/apollostack/frontpage-server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once you've installed and started that server, start this app with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;react-native run-ios
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It will open a iOS simulator.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/apollographql/frontpage-react-native-app"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;This is the simple example React Native/Apollo app that lives at dev.apollodata.com.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/learnapollo/pokedex-react-native"&gt;6. Pokedex React Native App&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/learnapollo"&gt;
        learnapollo
      &lt;/a&gt; / &lt;a href="https://github.com/learnapollo/pokedex-react-native"&gt;
        pokedex-react-native
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Pokedex App using and teaching Apollo with React Native (Expo)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
pokedex-react-native&lt;/h1&gt;
&lt;p&gt;Pokedex React Native app based on CRNA &amp;amp; Expo using and teaching Apollo and GraphQL&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Live Demo: &lt;a href="http://demo.learnapollo.com/" rel="nofollow"&gt;http://demo.learnapollo.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/55add6eb6dafa52672470ab08622f2363d10a974/68747470733a2f2f692e6779617a6f2e636f6d2f61646363343637356364343636313935616466373237626138613332623534342e676966"&gt;&lt;img src="https://camo.githubusercontent.com/55add6eb6dafa52672470ab08622f2363d10a974/68747470733a2f2f692e6779617a6f2e636f6d2f61646363343637356364343636313935616466373237626138613332623534342e676966" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Getting started&lt;/h2&gt;
&lt;p&gt;If you haven't done it already, checkout the &lt;a href="https://learnapollo.com/" rel="nofollow"&gt;hands-on Learn Apollo tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;git clone git@github.com:learnapollo/pokedex-react-native.git
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; pokedex-react-native
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; exercise-01
yarn
yarn start&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
Workflow&lt;/h2&gt;
&lt;p&gt;As you're following along the Learn Apollo tutorial, you will work on different coding excercises. Each exercise has a folder that you can use to start working and a solution folder where you can take a peek if the instructions given on Learn Apollo are not clear enough.&lt;/p&gt;
&lt;p&gt;After you completed the step, you can compare your results to the official solution by looking into the respective folder. If you found a different solution than we're proposing, feel free to &lt;a href="http://slack.graph.cool/" rel="nofollow"&gt;tell us&lt;/a&gt; about your solution. 💡&lt;/p&gt;
&lt;h2&gt;
Help &amp;amp; Community &lt;a href="https://slack.graph.cool" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/017432387f1e6cd37b486630860fed8b6d6c8049/68747470733a2f2f736c61636b2e67726170682e636f6f6c2f62616467652e737667" alt="Slack Status"&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Join our &lt;a href="http://slack.graph.cool/" rel="nofollow"&gt;Slack community&lt;/a&gt; if you run into issues or have questions. We love talking to…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/learnapollo/pokedex-react-native"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Pokedex React Native app based on CRNA &amp;amp; Expo using and teaching Apollo and GraphQL&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Demo: &lt;a href="http://demo.learnapollo.com/"&gt;http://demo.learnapollo.com&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n-uce96---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.gyazo.com/adcc4675cd466195adf727ba8a32b544.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n-uce96---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.gyazo.com/adcc4675cd466195adf727ba8a32b544.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/aws-samples/aws-mobile-appsync-events-starter-react-native"&gt;7. Realtime, Offline AWS AppSync&lt;/a&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  GraphQL starter application with Realtime and Offline functionality using AWS AppSync
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aws-samples"&gt;
        aws-samples
      &lt;/a&gt; / &lt;a href="https://github.com/aws-samples/aws-mobile-appsync-events-starter-react-native"&gt;
        aws-mobile-appsync-events-starter-react-native
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GraphQL starter application with Realtime and Offline functionality using AWS AppSync
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
Introduction&lt;/h1&gt;
&lt;p&gt;This is a Starter React Native application for using the Sample app in the AWS AppSync console when building your GraphQL API. The Sample app creates a GraphQL schema and provisions Amazon DynamoDB resources, then connects them appropriately with Resolvers. The application demonstrates GraphQL Mutations, Queries and Subscriptions using AWS AppSync. You can use this for learning purposes or adapt either the application or the GraphQL Schema to meet your needs.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://raw.githubusercontent.com/aws-samples/aws-mobile-appsync-events-starter-react-native/master/media/DeleteEvents.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--snMzWh_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/aws-samples/aws-mobile-appsync-events-starter-react-native/master/media/DeleteEvents.png" alt="EventDetails"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GraphQL Mutations&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create new events&lt;/li&gt;
&lt;li&gt;Create comments on existing events&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GraphQL Queries&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get all events (w/ pagination support)&lt;/li&gt;
&lt;li&gt;Get an event by Id&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GraphQL Subscriptions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Real time updates for comments on an event&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Authorization&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The app uses API Key as the authoriation mechanism&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
AWS Setup&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Navigate to the AWS AppSync console using the URL: &lt;a href="http://console.aws.amazon.com/appsync/home" rel="nofollow"&gt;http://console.aws.amazon.com/appsync/home&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on &lt;code&gt;Create API&lt;/code&gt; and select the &lt;code&gt;Sample Schema&lt;/code&gt; option. Enter a API name of your choice. Click &lt;code&gt;Create&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
React Native&lt;/h2&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aws-samples/aws-mobile-appsync-events-starter-react-native"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pC6u8jPC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2rkf6dkpytxc9d9hosw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pC6u8jPC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/2rkf6dkpytxc9d9hosw5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GraphQL Mutations&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create new events&lt;/li&gt;
&lt;li&gt;Create comments on existing events&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;GraphQL Queries&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get all events (w/ pagination support)&lt;/li&gt;
&lt;li&gt;Get an event by Id&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;GraphQL Subscriptions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real time updates for comments on an event&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Authorization&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app uses API Key as the authoriation mechanism&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/graphql-boilerplates/react-fullstack-graphql/"&gt;8. Starter fullstack app&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/graphql-boilerplates"&gt;
        graphql-boilerplates
      &lt;/a&gt; / &lt;a href="https://github.com/graphql-boilerplates/react-fullstack-graphql"&gt;
        react-fullstack-graphql
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Starter projects for fullstack applications based on React &amp;amp; GraphQL.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
&lt;strong&gt;Fullstack GraphQL Boilerplates for React &amp;amp; Node.js&lt;/strong&gt;
&lt;/h1&gt;
&lt;br&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/cb8e64e5802d8523883fed4fae290fa2853fcc62/68747470733a2f2f696d6775722e636f6d2f6f7573795161432e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/cb8e64e5802d8523883fed4fae290fa2853fcc62/68747470733a2f2f696d6775722e636f6d2f6f7573795161432e706e67" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;Bootstrap your fullstack GraphQL app within seconds&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;GraphQL boilerplates provide the perfect foundation for your GraphQL server, no matter if you're just getting started with GraphQL or aim to build a fully-fledged application.&lt;/div&gt;
&lt;br&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rapid scaffolding&lt;/strong&gt;: Simply use &lt;code&gt;graphql create&lt;/code&gt; (from the &lt;a href="https://github.com/graphql-cli/graphql-cli"&gt;GraphQL CLI&lt;/a&gt;) to download the boilerplate you want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easily extensible&lt;/strong&gt;: A boilerplate only provides the minimum setup so you can tailor the API to your use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best practices&lt;/strong&gt;: Each boilerplate incorporates best practices from the GraphQL community.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a fully-fledged &lt;strong&gt;React &amp;amp; Apollo tutorial&lt;/strong&gt;, visit &lt;a href="https://www.howtographql.com/react-apollo/0-introduction/" rel="nofollow"&gt;How to GraphQL&lt;/a&gt;. You can more learn about the idea behind GraphQL boilerplates &lt;a href="https://blog.graph.cool/graphql-boilerplates-graphql-create-how-to-setup-a-graphql-project-6428be2f3a5" rel="nofollow"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Quickstart&lt;/h2&gt;
&lt;p&gt;Select a boilerplate and follow the instructions in the belonging README to get started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://raw.githubusercontent.com/graphql-boilerplates/react-fullstack-graphql/master/./minimal"&gt;&lt;code&gt;minimal&lt;/code&gt;&lt;/a&gt;: Minimal boilerplate with basic "Hello World" functionality&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://raw.githubusercontent.com/graphql-boilerplates/react-fullstack-graphql/master/./basic"&gt;&lt;code&gt;basic&lt;/code&gt;&lt;/a&gt;: Basic boilerplate based on a simple data model…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/graphql-boilerplates/react-fullstack-graphql"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Bootstrap your fullstack GraphQL app within seconds. GraphQL boilerplates provide the perfect foundation for your GraphQL server, no matter if you're just getting started with GraphQL or aim to build a fully-fledged application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rapid scaffolding&lt;/strong&gt;: Simply use &lt;code&gt;graphql create&lt;/code&gt; (from the &lt;a href="https://github.com/graphql-cli/graphql-cli"&gt;GraphQL CLI&lt;/a&gt;) to download the boilerplate you want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easily extensible&lt;/strong&gt;: A boilerplate only provides the minimum setup so you can tailor the API to your use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best practices&lt;/strong&gt;: Each boilerplate incorporates best practices from the GraphQL community.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>graphql</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Getting started with React &amp; GraphQL part I</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Thu, 16 May 2019 08:51:39 +0000</pubDate>
      <link>https://forem.com/robmatyszewski/getting-started-with-react-graphql-part-i-31da</link>
      <guid>https://forem.com/robmatyszewski/getting-started-with-react-graphql-part-i-31da</guid>
      <description>&lt;p&gt;&lt;a href="https://2018.stateofjs.com"&gt;The stage of Javascript 2018 Survey&lt;/a&gt; was completed by 20k users and contains an analysis of what aspects people like &amp;amp; dislike about web technologies. I found React &amp;amp; GraphQL interesting since they're completing each other and stand out from surveys conclusions: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;React is the most popular among front end frameworks.&lt;/p&gt;

&lt;p&gt;GraphQL is the top most wanted technology to learn.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Following that, I've combined popular boilerplates and starter apps to start using React with GraphQL. There's so much stuff on the internet that I've decided to split article two articles. &lt;/p&gt;

&lt;h2&gt;
  
  
  Agenda:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Universal React+GraphQL starter kit&lt;/li&gt;
&lt;li&gt;SaaS Boilerplate&lt;/li&gt;
&lt;li&gt;React apollo todo app&lt;/li&gt;
&lt;li&gt;Universal React Apollo app&lt;/li&gt;
&lt;li&gt;Relay Skeleton&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://reactql.org/"&gt;1. Universal React+GraphQL starter kit&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/leebenson"&gt;
        leebenson
      &lt;/a&gt; / &lt;a href="https://github.com/leebenson/reactql"&gt;
        reactql
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Universal React+GraphQL starter kit: React 16, Apollo 2, MobX, Emotion, Webpack 4, GraphQL Code Generator, React Router 4, PostCSS, SSR
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/3dc3122f71a509b66f767680445a8277c547323b/68747470733a2f2f7265616374716c2e6f72672f7265616374716c2f6c6f676f2e737667"&gt;&lt;img src="https://camo.githubusercontent.com/3dc3122f71a509b66f767680445a8277c547323b/68747470733a2f2f7265616374716c2e6f72672f7265616374716c2f6c6f676f2e737667" alt="ReactQL v4.3.0" width="278" height="77"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/78d537f42349d2218e5084c86270e3dc3a434882/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6c656562656e736f6e2f7265616374716c2e7376673f7374796c653d666c61742d737175617265"&gt;&lt;img src="https://camo.githubusercontent.com/78d537f42349d2218e5084c86270e3dc3a434882/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6c656562656e736f6e2f7265616374716c2e7376673f7374796c653d666c61742d737175617265" alt="license"&gt;&lt;/a&gt; &lt;a href="https://twitter.com/reactql" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/43d37ddc0ba6729009e3001cb38b170cf9d260b8/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f7265616374716c2e7376673f7374796c653d736f6369616c266c6162656c3d466f6c6c6f77" alt="Twitter Follow"&gt;&lt;/a&gt;
&lt;a href="https://app.netlify.com/start/deploy?repository=https://github.com/leebenson/reactql" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/be2eb66bb727e25655f1dcff88c2fdca82a77513/68747470733a2f2f7777772e6e65746c6966792e636f6d2f696d672f6465706c6f792f627574746f6e2e737667" alt="Deploy to Netlify"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Universal front-end React + GraphQL starter kit, written in Typescript.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://reactql.org" rel="nofollow"&gt;https://reactql.org&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;h3&gt;
Front-end stack&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://facebook.github.io/react/" rel="nofollow"&gt;React v16.8&lt;/a&gt; (the one with &lt;a href="https://reactjs.org/docs/hooks-intro.html" rel="nofollow"&gt;hooks&lt;/a&gt;!) for UI.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://dev.apollodata.com/react/" rel="nofollow"&gt;Apollo Client 2.5 (React)&lt;/a&gt; for connecting to GraphQL.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mobxjs/mobx-react-lite"&gt;MobX-React-Lite&lt;/a&gt; for declarative, type-safe flux/store state management.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://emotion.sh/" rel="nofollow"&gt;Emotion&lt;/a&gt; CSS-in-JS, with inline &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tag generation that contains only the CSS that needs to be rendered.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sass-lang.com/" rel="nofollow"&gt;Sass&lt;/a&gt;, &lt;a href="http://lesscss.org/" rel="nofollow"&gt;Less&lt;/a&gt; and &lt;a href="https://postcss.org/" rel="nofollow"&gt;PostCSS&lt;/a&gt; when importing &lt;code&gt;.css/.scss/.less&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://reacttraining.com/react-router/" rel="nofollow"&gt;React Router 4&lt;/a&gt; for declarative browser + server routes.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://graphql-code-generator.com/" rel="nofollow"&gt;GraphQL Code Generator v1.1&lt;/a&gt; for parsing remote GraphQL server schemas, for automatically building fully-typed Apollo React HOCs instead of writing &lt;code&gt;&amp;lt;Query&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;Mutation&amp;gt;&lt;/code&gt; queries manually&lt;/li&gt;
&lt;li&gt;Declarative/dynamic &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section, using &lt;a href="https://github.com/nfl/react-helmet"&gt;react-helmet&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Server-side rendering&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Built-in &lt;a href="http://koajs.com/" rel="nofollow"&gt;Koa 2&lt;/a&gt; web server, with async/await routing.&lt;/li&gt;
&lt;li&gt;Full route-aware server-side rendering (SSR) of initial HTML.&lt;/li&gt;
&lt;li&gt;Universal building - both browser + Node.js web server compile down to static files, for fast server re-spawning.&lt;/li&gt;
&lt;li&gt;Per-request GraphQL store. Store state is dehydrated via SSR, and…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/leebenson/reactql"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Front-end stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://facebook.github.io/react/"&gt;React v16.8&lt;/a&gt; (the one with &lt;a href="https://reactjs.org/docs/hooks-intro.html"&gt;hooks&lt;/a&gt;!) for UI.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://dev.apollodata.com/react/"&gt;Apollo Client 2.5 (React)&lt;/a&gt; for connecting to GraphQL.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mobxjs/mobx-react-lite"&gt;MobX-React-Lite&lt;/a&gt; for declarative, type-safe flux/store state management.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://emotion.sh/"&gt;Emotion&lt;/a&gt; CSS-in-JS, with inline &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tag generation that contains only the CSS that needs to be rendered.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sass-lang.com/"&gt;Sass&lt;/a&gt;, &lt;a href="http://lesscss.org/"&gt;Less&lt;/a&gt; and &lt;a href="https://postcss.org/"&gt;PostCSS&lt;/a&gt; when importing &lt;code&gt;.css/.scss/.less&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://reacttraining.com/react-router/"&gt;React Router 4&lt;/a&gt; for declarative browser + server routes.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://graphql-code-generator.com/"&gt;GraphQL Code Generator v1.1&lt;/a&gt; for parsing remote GraphQL server schemas, for automatically building fully-typed Apollo React HOCs instead of writing &lt;code&gt;&amp;lt;Query&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;Mutation&amp;gt;&lt;/code&gt; queries manually&lt;/li&gt;
&lt;li&gt;Declarative/dynamic &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section, using &lt;a href="https://github.com/nfl/react-helmet"&gt;react-helmet&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Server stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built-in &lt;a href="http://koajs.com/"&gt;Koa 2&lt;/a&gt; web server, with async/await routing.&lt;/li&gt;
&lt;li&gt;Full route-aware server-side rendering (SSR) of initial HTML.&lt;/li&gt;
&lt;li&gt;Universal building - both browser + Node.js web server compile down to static files, for fast server re-spawning.&lt;/li&gt;
&lt;li&gt;Per-request GraphQL store. Store state is dehydrated via SSR, and rehydrated automatically on the client.&lt;/li&gt;
&lt;li&gt;MobX for app-wide flux/store state, for automatically re-rendering any React component that 'listens' to state. Fully typed state!&lt;/li&gt;
&lt;li&gt;Full page React via built-in SSR component - every byte of your HTML is React.&lt;/li&gt;
&lt;li&gt;SSR in both development and production, even with hot-code reload.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real-time
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hot code reloading; zero refresh, real-time updates in development.&lt;/li&gt;
&lt;li&gt;Development web server that automatically sends patches on code changes, and restarts the built-in Web server for SSR renders that reflect what you'd see in production.&lt;/li&gt;
&lt;li&gt;WebSocket &lt;code&gt;subscription&lt;/code&gt; query support for real-time data (just set &lt;code&gt;WS_SUBSCRIPTIONS=1&lt;/code&gt; in &lt;a href="//.env"&gt;.env&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code optimisation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://webpack.js.org/"&gt;Webpack v4&lt;/a&gt;, with &lt;a href="https://webpack.js.org/guides/tree-shaking/"&gt;tree shaking&lt;/a&gt; -- dead code paths are automatically eliminated.&lt;/li&gt;
&lt;li&gt;Asynchronous code loading when &lt;code&gt;import()&lt;/code&gt;'ing inside a function.&lt;/li&gt;
&lt;li&gt;Automatic per-vendor chunk splitting/hashing, for aggressive caching (especially good behind a HTTP/2 proxy!)&lt;/li&gt;
&lt;li&gt;Gzip/Brotli minification of static assets.&lt;/li&gt;
&lt;li&gt;CSS code is combined, minified and optimised automatically - even if you use SASS, LESS and CSS together!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Styles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://emotion.sh/"&gt;Emotion&lt;/a&gt;, for writing CSS styles inline and generating the minimal CSS required to properly render your components.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://postcss.org/"&gt;PostCSS v7&lt;/a&gt; with &lt;a href="https://preset-env.cssdb.org/"&gt;next-gen CSS&lt;/a&gt; and automatic vendor prefixing when importing &lt;code&gt;.css&lt;/code&gt;, &lt;code&gt;.scss&lt;/code&gt; or &lt;code&gt;.less&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://sass-lang.com"&gt;SASS&lt;/a&gt; and &lt;a href="http://lesscss.org/"&gt;LESS&lt;/a&gt; support (also parsed through PostCSS.)&lt;/li&gt;
&lt;li&gt;Automatic vendor prefixing - write modern CSS, and let the compiler take care of browser compatibility.&lt;/li&gt;
&lt;li&gt;Mix and match SASS, LESS and regular CSS - without conflicts!&lt;/li&gt;
&lt;li&gt;CSS modules - your classes are hashed automatically, to avoid namespace conflicts.&lt;/li&gt;
&lt;li&gt;Compatible with Foundation, Bootstrap, Material UI and more. Simply configure via a &lt;code&gt;.global.(css|scss|less)&lt;/code&gt; import to preserve class names.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Production-ready
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Production bundling via &lt;code&gt;npm run production&lt;/code&gt;, that generates optimised server and client code.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://webpack.js.org/plugins/compression-webpack-plugin/"&gt;Static compression&lt;/a&gt; using the Gzip and &lt;a href="https://opensource.googleblog.com/2015/09/introducing-brotli-new-compression.html"&gt;Brotli&lt;/a&gt; algorithms for the serving of static assets as pre-compressed &lt;code&gt;.gz&lt;/code&gt; and &lt;code&gt;.br&lt;/code&gt; files (your entire app's &lt;code&gt;main.js.bz&lt;/code&gt; - including all dependencies - goes from 346kb -&amp;gt; 89kb!)&lt;/li&gt;
&lt;li&gt;Static bundling via &lt;code&gt;npm run build:static&lt;/code&gt;. Don't need server-side rendering? No problem. Easily deploy a client-only SPA to any static web host (Netlify, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;a href="http://codefoundries.com/products/UniversalRelayBoilerplate.html"&gt;2. SaaS Boilerplate&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/MachineAcuity"&gt;
        MachineAcuity
      &lt;/a&gt; / &lt;a href="https://github.com/MachineAcuity/rebar"&gt;
        rebar
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Multi-tenant SaaS boilerplate + examples for universal web application with React, Material-UI, Relay, GraphQL, JWT, Node.js, C* DB - Cassandra/Elassandra/Scylla.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Rebar&lt;/h1&gt;
&lt;p&gt;Multi-tenant SaaS boilerplate + examples for universal web application with React, Material-UI, Relay, GraphQL, JWT, Node.js, C* DB - Cassandra/Elassandra/Scylla.&lt;/p&gt;
&lt;h1&gt;
Technology stack&lt;/h1&gt;
&lt;h2&gt;
Client&lt;/h2&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Technology&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/4Catalyzer/found"&gt;found&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Extensible route-based routing for React applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/relay-tools/found-relay"&gt;found-relay&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Relay integration for Found.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://graphql.org/docs/getting-started/" rel="nofollow"&gt;GraphQL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A query language for describing the capabilities and requirements of data models for client‐server applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cssinjs.org/" rel="nofollow"&gt;JSS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JSS is a more powerful abstraction over CSS. It uses JavaScript as a language to describe styles in a declarative and maintainable way.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.material-ui.com/" rel="nofollow"&gt;Material UI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Library for implementing &lt;a href="https://www.google.com/design/spec/material-design/introduction.html" rel="nofollow"&gt;Material Design&lt;/a&gt; in React. All user interface in this kit is built predominantly using Material UI components.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.npmjs.com/package/mdi-material-ui" rel="nofollow"&gt;mdi-material-ui&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This module provides Material-UI  components for all Material Design Icons.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://facebook.github.io/react/" rel="nofollow"&gt;React&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The best library for building modern browser-based and mobile UIs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/nfl/react-helmet"&gt;React Helmet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reusable React component will manage all of your changes to the document head with support for document title, meta, link, script, and base tags.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://facebook.github.io/relay/" rel="nofollow"&gt;Relay&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/MachineAcuity/rebar"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Front-end stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Technology&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/4Catalyzer/found"&gt;found&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Extensible route-based routing for React applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://graphql.org/docs/getting-started/"&gt;GraphQL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A query language for describing the capabilities and requirements of data models for client‐server applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cssinjs.org/"&gt;JSS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JSS is a more powerful abstraction over CSS. It uses JavaScript as a language to describe styles in a declarative and maintainable way.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.material-ui.com/"&gt;Material UI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Library for implementing &lt;a href="https://www.google.com/design/spec/material-design/introduction.html"&gt;Material Design&lt;/a&gt; in React. All user interface in this kit is built predominantly using Material UI components.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://facebook.github.io/react/"&gt;React&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The best library for building modern browser-based and mobile UIs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/nfl/react-helmet"&gt;React Helmet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Reusable React component will manage all of your changes to the document head with support for document title, meta, link, script, and base tags.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://facebook.github.io/relay/"&gt;Relay&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A Javascript framework for building data-driven react applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Server stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Technology&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://cassandra.apache.org/"&gt;Apache Cassandra&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The right choice when you need scalability and high availability without compromising performance. Linear scalability and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data. Cassandra's support for replicating across multiple datacenters is best-in-class, providing lower latency for your users and the peace of mind of knowing that you can survive regional outages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/facebook/dataloader"&gt;Data Loader&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generic utility to be used as part of your application's data fetching layer to provide a consistent API over various backends and reduce requests to those backends via batching and caching.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.strapdata.com/"&gt;Elassandra&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Elassandra Combines Cassandra And Elasticsearch In A Single Powerful Integrated Solution. URB works well with Elassandra.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://expressjs.com"&gt;Express&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fast, unopinionated, minimalist web framework for Node.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://express-cassandra.readthedocs.io"&gt;express-cassandra&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cassandra ORM/ODM/OGM for Node.js with optional support for Elassandra &amp;amp; JanusGraph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/graphql/express-graphql"&gt;Express GraphQL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A Node.js express library that allows the creation of GraphQL servers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://jwt.io/"&gt;JWT&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JSON Web Tokens is an industry standard &lt;a href="https://tools.ietf.org/html/rfc7519"&gt;RFC 7519&lt;/a&gt; method for representing claims securely between two parties.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Event-driven, non-blocking I/O runtime based on JavaScript that is lightweight and efficient.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/winstonjs/winston"&gt;Winston&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A logger for just about everything.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Development tools
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Technology&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://babeljs.io"&gt;Babel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Transpiles ESX to ESX and performs relay transformations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.npmjs.com/package/concurrently"&gt;concurrently&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Run multiple commands concurrently.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://eslint.org"&gt;ESLint&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A fully pluggable tool for identifying and reporting on patterns in JavaScript.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://flowtype.org/"&gt;Flow&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Static type checker, designed to find type errors in JavaScript programs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/typicode/husky"&gt;Husky&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Git hooks for eslint and prettier.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://localtunnel.github.io/www/"&gt;LocalTunnel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Expose yourself to the world.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/prettier/prettier/"&gt;Prettier&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Code formatter for javaScript.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="//gaearon.github.io/react-hot-loader/"&gt;React Hot Loader&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Allows tweaking of React components in real time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://webpack.github.io"&gt;Webpack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bundles npm packages, application Java Script, CSS, images, etc. into bundles.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://hasura.io/hub/projects/hasura/react-apollo-todo-app"&gt;3. React apollo todo app&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/k8s-platform-hub"&gt;
        k8s-platform-hub
      &lt;/a&gt; / &lt;a href="https://github.com/k8s-platform-hub/react-apollo-todo-app"&gt;
        react-apollo-todo-app
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A simple todo app build on react using the graphql queries of hasura
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
react-apollo-todo-app&lt;/h1&gt;
&lt;p&gt;This is a basic todo app built on react. The app uses Hasura for its backend, leveraging the following features of Hasura:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deploy the react app&lt;/li&gt;
&lt;li&gt;Hasura Authentication the Auth UI Kit&lt;/li&gt;
&lt;li&gt;Hasura Database&lt;/li&gt;
&lt;li&gt;GraphQL queries provided by Hasura&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
Pre-requisites&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Ensure that you have the &lt;a href="https://docs.hasura.io/0.15/manual/install-hasura-cli.html" rel="nofollow"&gt;HasuraCLI&lt;/a&gt; installed on your local machine.&lt;/li&gt;
&lt;li&gt;Login into Hasura by running the following command on your command shell&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;hasura login&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;
Quickstart&lt;/h1&gt;
&lt;h2&gt;
Getting the project&lt;/h2&gt;
&lt;p&gt;To get the project, run the following in your command shell:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;hasura quickstart hasura/react-apollo-todo-app&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
Deploying the project&lt;/h2&gt;
&lt;p&gt;Deploying the project is equivalent to pushing to a remote git repo&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;&lt;span class="pl-c1"&gt;cd&lt;/span&gt; react-apollo-todo-app
git add &lt;span class="pl-c1"&gt;.&lt;/span&gt; &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit -m &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Initial commit&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
git push hasura master&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
Opening the react app in your browser&lt;/h2&gt;
&lt;p&gt;After you are done deploying the project, you can open up the react app in your browser by:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;hasura microservice open ui&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;
React App Code&lt;/h1&gt;
&lt;p&gt;You can…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/k8s-platform-hub/react-apollo-todo-app"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This is a basic todo app built on react. The app uses Hasura for its backend, leveraging the following features of Hasura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy the react app&lt;/li&gt;
&lt;li&gt;Hasura Authentication the Auth UI Kit&lt;/li&gt;
&lt;li&gt;Hasura Database&lt;/li&gt;
&lt;li&gt;GraphQL queries provided by Hasura&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project comes with the following custom microservice - a React TODO app made using GraphQL with Apollo Client&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/WeLikeGraphQL/universal-react-apollo-example"&gt;4. Universal React Apollo app&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/WeLikeGraphQL"&gt;
        WeLikeGraphQL
      &lt;/a&gt; / &lt;a href="https://github.com/WeLikeGraphQL/universal-react-apollo-example"&gt;
        universal-react-apollo-example
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Universal React Apollo App (GraphQL) consuming: https://github.com/WeLikeGraphQL/wordpress-graphql-api-example!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Universal React Apollo Example&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://gitter.im/WeLikeGraphQL/react-apollo-example?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=pr-badge&amp;amp;utm_content=badge" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/da2edb525cde1455a622c58c0effc3a90b9a181c/68747470733a2f2f6261646765732e6769747465722e696d2f4a6f696e253230436861742e737667" alt="Gitter"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.org/WeLikeGraphQL/universal-react-apollo-example" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/ad652a1f11bcbbdc67aab77780c7d1b7142f625b/68747470733a2f2f7472617669732d63692e6f72672f57654c696b654772617068514c2f756e6976657273616c2d72656163742d61706f6c6c6f2d6578616d706c652e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An example of the app that shows how to use a modern stack (strong accent on GraphQL!).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://graphql.org/" rel="nofollow"&gt;GraphQL&lt;/a&gt; for fetching data! The most awesome part of the project!&lt;/li&gt;
&lt;li&gt;Universal Rendering (Server Side Rendering)&lt;/li&gt;
&lt;li&gt;ES6/ES2015 with &lt;a href="https://babeljs.io/" rel="nofollow"&gt;Babel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;React data container for the &lt;a href="http://dev.apollodata.com/react/" rel="nofollow"&gt;Apollo Client&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Integrating predictable state container &lt;a href="http://redux.js.org" rel="nofollow"&gt;Redux&lt;/a&gt; with Apollo&lt;/li&gt;
&lt;li&gt;Hot reloading using &lt;a href="https://github.com/gaearon/react-hot-loader"&gt;React-Hot-Loader&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/acdlite/recompose"&gt;Recompose&lt;/a&gt; as a React utility belt for higher order components&lt;/li&gt;
&lt;li&gt;Development and production bundling by &lt;a href="https://webpack.github.io" rel="nofollow"&gt;Webpack&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://cssnext.io/" rel="nofollow"&gt;CSSNext&lt;/a&gt;: use of official W3C syntax of the future CSS&lt;/li&gt;
&lt;li&gt;Transforming styles with JS plugins by &lt;a href="http://postcss.org/" rel="nofollow"&gt;PostCSS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://mynameismatthieu.com/WOW/" rel="nofollow"&gt;Wow.js&lt;/a&gt; for CSS animations&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/" rel="nofollow"&gt;Flexbox&lt;/a&gt; for resolving &lt;a href="http://blog.karenmenezes.com/2014/apr/13/floats-inline-block-or-display-table-or-flexbox/" rel="nofollow"&gt;layout fatigue&lt;/a&gt; and making the app responsive (open the app in desktop, mobile, whatever...). Doesn't work on IE 9, but it should not be a problem nowadays. See &lt;a href="http://caniuse.com/usage-table" rel="nofollow"&gt;browsers usage&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/css-modules/css-modules"&gt;CSS Modules&lt;/a&gt;: say goodbye to global scope in CSS and most of conflicts&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://facebook.github.io/jest/blog/2016/07/27/jest-14.html" rel="nofollow"&gt;Jest Snapshot Testng&lt;/a&gt;, some…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/WeLikeGraphQL/universal-react-apollo-example"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://graphql.org/"&gt;GraphQL&lt;/a&gt; for fetching data! The most awesome part of the project!&lt;/li&gt;
&lt;li&gt;Universal Rendering (Server Side Rendering)&lt;/li&gt;
&lt;li&gt;ES6/ES2015 with &lt;a href="https://babeljs.io/"&gt;Babel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;React data container for the &lt;a href="http://dev.apollodata.com/react/"&gt;Apollo Client&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Integrating predictable state container &lt;a href="http://redux.js.org"&gt;Redux&lt;/a&gt; with Apollo&lt;/li&gt;
&lt;li&gt;Hot reloading using &lt;a href="https://github.com/gaearon/react-hot-loader"&gt;React-Hot-Loader&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/acdlite/recompose"&gt;Recompose&lt;/a&gt; as a React utility belt for higher order components&lt;/li&gt;
&lt;li&gt;Development and production bundling by &lt;a href="https://webpack.github.io"&gt;Webpack&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://cssnext.io/"&gt;CSSNext&lt;/a&gt;: use of official W3C syntax of the future CSS&lt;/li&gt;
&lt;li&gt;Transforming styles with JS plugins by &lt;a href="http://postcss.org/"&gt;PostCSS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://mynameismatthieu.com/WOW/"&gt;Wow.js&lt;/a&gt; for CSS animations&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/"&gt;Flexbox&lt;/a&gt; for resolving &lt;a href="http://blog.karenmenezes.com/2014/apr/13/floats-inline-block-or-display-table-or-flexbox/"&gt;layout fatigue&lt;/a&gt; and making the app responsive (open the app in desktop, mobile, whatever...). Doesn't work on IE 9, but it should not be a problem nowadays. See &lt;a href="http://caniuse.com/usage-table"&gt;browsers usage&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/css-modules/css-modules"&gt;CSS Modules&lt;/a&gt;: say goodbye to global scope in CSS and most of conflicts&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://facebook.github.io/jest/blog/2016/07/27/jest-14.html"&gt;Jest Snapshot Testng&lt;/a&gt;, some parts in &lt;a href="http://airbnb.io/enzyme/"&gt;Enzyme&lt;/a&gt; and &lt;a href="http://sinonjs.org/"&gt;Sinon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Linting both JS and CSS, respectively by: &lt;a href="http://eslint.org/"&gt;ESLint&lt;/a&gt; and &lt;a href="http://stylelint.io/"&gt;Stylelint&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://github.com/fortruce/relay-skeleton"&gt;5. Relay Skeleton&lt;/a&gt;
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/fortruce"&gt;
        fortruce
      &lt;/a&gt; / &lt;a href="https://github.com/fortruce/relay-skeleton"&gt;
        relay-skeleton
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      React, Relay, GraphQL project skeleton
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
React Fullstack Skeleton&lt;/h1&gt;
&lt;p&gt;This skeleton project is meant to scaffold a fullstack React, Relay, and GraphQL project
The skeleton uses webpack and gulp to manage the build and provide a great
development experience. The frontend stack is React, and Relay
All React changes are automatically hot reloaded
using &lt;a href="http://gaearon.github.io/react-hot-loader/" rel="nofollow"&gt;react-hot-loader&lt;/a&gt;. Also, the backend server is automatically
restarted upon any changes using &lt;a href="http://nodemon.io/" rel="nofollow"&gt;nodemon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Both the server and frontend code are built and transpiled using webpack, while
gulp is used primarily to start the webpack-dev-server and nodemon.&lt;/p&gt;
&lt;h2&gt;
Getting started&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;npm start  # Launch the GraphQL server and the Webpack dev server
open http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;
Directory Structure&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;build/                  // webpack build output
  public/               //  publicly served assets
    index.html
    bundle.js           // frontend bundle  built w/ webpack
  server.js             // backend server   built w/ webpack
src/
  frontend/
    components/         // React components
    containers/         // Relay Containers
    routes/             // Relay Routes
    index.js            // React.render Root component
    index.template.html //&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/fortruce/relay-skeleton"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This skeleton project is meant to scaffold a fullstack React, Relay, and GraphQL project. The skeleton uses webpack and gulp to manage the build and provide a great development experience. The frontend stack is React, and Relay. All React changes are automatically hot reloaded using react-hot-loader. Also, the backend server is automatically&lt;br&gt;
restarted upon any changes using nodemon.&lt;/p&gt;

&lt;p&gt;Both the server and frontend code are built and transpiled using webpack, while gulp is used primarily to start the webpack-dev-server and nodemon.&lt;/p&gt;

&lt;h3&gt;
  
  
  Typical Usage
&lt;/h3&gt;

&lt;p&gt;This skeleton was designed with a typical use case of having a backend api serve a React SPA. The skeleton automatically proxies all requests to &lt;code&gt;/graphql&lt;/code&gt; thru the webpack-dev-server to the backend GraphQL server.&lt;/p&gt;

&lt;p&gt;The frontend is automatically hot reloaded whenever you save a file. See&lt;br&gt;
[react-hot-loader] for more details on how this works. It enables you to immediately see changes in React components without losing application state or having to reload your page!&lt;/p&gt;

&lt;p&gt;The backend server is automatically restarted whenever you save a file.&lt;br&gt;
If, for example, you modify the GraphQL schema, then the GraphQL server will be restarted to reflect the changes, the &lt;code&gt;schema.json&lt;/code&gt; will be regenerated using an introspection query, and the frontend code will be recompiled to re-run &lt;code&gt;Relay.QL&lt;/code&gt; queries through the &lt;code&gt;babel-relay-plugin&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>graphql</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Best resources to learn React &amp; GraphQL</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Tue, 07 May 2019 14:27:25 +0000</pubDate>
      <link>https://forem.com/iamrobert/best-resources-to-learn-react-graphql-5dkk</link>
      <guid>https://forem.com/iamrobert/best-resources-to-learn-react-graphql-5dkk</guid>
      <description>&lt;p&gt;I've decided to create a list of top resources for two modern and trending technologies after checking results of &lt;a href="https://2018.stateofjs.com" rel="noopener noreferrer"&gt;The stage of Javascript 2018 Survey&lt;/a&gt;. The survey was completed by 20k users. React is, of course, the most popular among front end frameworks. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ff4p5gvwq0ergnjjvv14f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ff4p5gvwq0ergnjjvv14f.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GraphQL is the top wanted to learn technology.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F55dds5uclyf4kshhp1d6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F55dds5uclyf4kshhp1d6.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Clients
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.apollographql.com/" rel="noopener noreferrer"&gt;Apollo&lt;/a&gt;: Apollo Client is a community-driven GraphQL client for React, JavaScript, and native platforms&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/apollographql" rel="noopener noreferrer"&gt;
        apollographql
      &lt;/a&gt; / &lt;a href="https://github.com/apollographql/apollo-client" rel="noopener noreferrer"&gt;
        apollo-client
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚀  A fully-featured, production ready caching GraphQL client for every UI framework and GraphQL server.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;p&gt;
    &lt;a href="https://www.apollographql.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fapollographql%2Fapollo-client-devtools%2Fmain%2Fassets%2Fapollo-wordmark.svg" height="100" alt="Apollo Client"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Apollo Client&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://badge.fury.io/js/%40apollo%2Fclient" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/15b99aa4fd47656837fd8ae0e2e81b268e3fa91ad27f0997b86c9ebb3f5206cf/68747470733a2f2f62616467652e667572792e696f2f6a732f25343061706f6c6c6f253246636c69656e742e737667" alt="npm version"&gt;&lt;/a&gt; &lt;a href="https://circleci.com/gh/apollographql/apollo-client" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e479cd6ab62a53bef941dcee6b28240c7be41f3dfd1af2e4136f7014104c1280/68747470733a2f2f636972636c6563692e636f6d2f67682f61706f6c6c6f6772617068716c2f61706f6c6c6f2d636c69656e742e7376673f7374796c653d737667" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://community.apollographql.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b2aa64ff222b10bd8e84f6a9ecc41c176af62f0ce1cda9e5c03aa6d2cc8fe0d5/68747470733a2f2f696d672e736869656c64732e696f2f646973636f757273652f7374617475733f6c6162656c3d4a6f696e253230746865253230636f6d6d756e697479267365727665723d6874747073253341253246253246636f6d6d756e6974792e61706f6c6c6f6772617068716c2e636f6d" alt="Join the community"&gt;&lt;/a&gt; &lt;a href="https://discord.gg/graphos" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9a040c23c67613a5332996fbaca849afe042c7cb09e70607a93fc1df16075108/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f313032323937323338393436333638373232382e7376673f636f6c6f723d373338394438266c6162656c436f6c6f723d364137454332266c6f676f3d646973636f7264266c6f676f436f6c6f723d666666666666267374796c653d666c61742d737175617265" alt="Join our Discord server"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;strong&gt;Announcement:&lt;/strong&gt;&lt;br&gt;
Join 1000+ engineers at GraphQL Summit for talks, workshops, and office hours, Oct 8-10 in NYC. &lt;a href="https://summit.graphql.com/?utm_campaign=github_federation_readme" rel="nofollow noopener noreferrer"&gt;Get your pass here -&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apollo Client is a fully-featured caching GraphQL client with integrations for React, Angular, and more. It allows you to easily build UI components that fetch data via GraphQL.&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;☑️  Apollo Client User Survey&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What do you like best about Apollo Client? What needs to be improved? Please tell us by taking a &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSczNDXfJne3ZUOXjk9Ursm9JYvhTh1_nFTDfdq3XBAFWCzplQ/viewform?usp=pp_url&amp;amp;entry.1170701325=Apollo+Client&amp;amp;entry.204965213=Readme" rel="nofollow noopener noreferrer"&gt;one-minute survey&lt;/a&gt;. Your responses will help us understand Apollo Client usage and allow us to serve you better.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Documentation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;All Apollo Client documentation, including React integration articles and helpful recipes, can be found at: &lt;br&gt;
&lt;a href="https://www.apollographql.com/docs/react/" rel="nofollow noopener noreferrer"&gt;https://www.apollographql.com/docs/react/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Apollo Client API reference can be found at: &lt;br&gt;
&lt;a href="https://www.apollographql.com/docs/react/api/apollo-client/" rel="nofollow noopener noreferrer"&gt;https://www.apollographql.com/docs/react/api/apollo-client/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Learn how to use Apollo Client with self-paced hands-on training on Odyssey, Apollo's official learning platform: &lt;br&gt;
&lt;a href="https://odyssey.apollographql.com/" rel="nofollow noopener noreferrer"&gt;https://odyssey.apollographql.com/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Maintainers&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Username&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ben Newman&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/benjamn" rel="noopener noreferrer"&gt;@benjamn&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alessia Bellisario&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alessbell" rel="noopener noreferrer"&gt;@alessbell&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jeff Auriemma&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/apollographql/apollo-client" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/apollographql" rel="noopener noreferrer"&gt;
        apollographql
      &lt;/a&gt; / &lt;a href="https://github.com/apollographql/react-apollo" rel="noopener noreferrer"&gt;
        react-apollo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ♻️ React integration for Apollo Client
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://www.apollographql.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F841294%2F53402609-b97a2180-39ba-11e9-8100-812bab86357c.png" height="100" alt="React Apollo"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;React Apollo&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://badge.fury.io/js/react-apollo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1df10f995ab6e59e327b78dc1fcd8ef61d245c02dddb805200833d30d7f6f26d/68747470733a2f2f62616467652e667572792e696f2f6a732f72656163742d61706f6c6c6f2e737667" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://circleci.com/gh/apollographql/react-apollo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a6e828534cf016e22ad77b57d71d06aee1e26febe115a20e08c3204d789e2de9/68747470733a2f2f636972636c6563692e636f6d2f67682f61706f6c6c6f6772617068716c2f72656163742d61706f6c6c6f2e7376673f7374796c653d737667" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://spectrum.chat/apollo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a75281b75fb7681260f4d4b1102ca5ff9bfc3c369ce4b4f50b81a1582de875f5/68747470733a2f2f77697468737065637472756d2e6769746875622e696f2f62616467652f62616467652e737667" alt="Join the community on Spectrum"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;THIS PROJECT HAS BEEN DEPRECATED&lt;/strong&gt; ⚠️&lt;/p&gt;
&lt;p&gt;Please note that 4.0.0 is the final version of all React Apollo packages. React Apollo functionality is now directly available from &lt;code&gt;@apollo/client&lt;/code&gt; &amp;gt;= 3. While using the &lt;code&gt;@apollo/react-X&lt;/code&gt; packages will still work, we recommend using the following imports from &lt;code&gt;@apollo/client&lt;/code&gt; directly instead:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;old: &lt;code&gt;@apollo/react-components&lt;/code&gt; --&amp;gt; new: &lt;code&gt;@apollo/client/react/components&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;old: &lt;code&gt;@apollo/react-hoc&lt;/code&gt; --&amp;gt; new: &lt;code&gt;@apollo/client/react/hoc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;old: &lt;code&gt;@apollo/react-ssr&lt;/code&gt; --&amp;gt; new: &lt;code&gt;@apollo/client/react/ssr&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;old: &lt;code&gt;@apollo/react-testing&lt;/code&gt; --&amp;gt; new: &lt;code&gt;@apollo/client/testing&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;old: &lt;code&gt;@apollo/react-hooks&lt;/code&gt; --&amp;gt; new: &lt;code&gt;@apollo/client&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Moving forward, all Apollo + React issues / pull requests should be opened in the &lt;a href="https://github.com/apollographql/apollo-client.git" rel="noopener noreferrer"&gt;apollo-client&lt;/a&gt; repo. Please refer to the &lt;a href="https://www.apollographql.com/docs/react/migrating/apollo-client-3-migration/" rel="nofollow noopener noreferrer"&gt;Apollo Client migration guide&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;React Apollo allows you to fetch data from your GraphQL server and use it in building complex and reactive UIs using the React framework. React Apollo may be used in any context that React may be used. In the browser, in React Native, or in Node.js…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/apollographql/react-apollo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://facebook.github.io/relay/" rel="noopener noreferrer"&gt;Relay Modern&lt;/a&gt;: A JavaScript framework for building data-driven React applications&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/facebook" rel="noopener noreferrer"&gt;
        facebook
      &lt;/a&gt; / &lt;a href="https://github.com/facebook/relay" rel="noopener noreferrer"&gt;
        relay
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Relay is a JavaScript framework for building data-driven React applications.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
&lt;a href="https://relay.dev" rel="nofollow noopener noreferrer"&gt;Relay&lt;/a&gt; · &lt;a href="https://github.com/facebook/relay/blob/main/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6581c31c16c1b13ddc2efb92e2ad69a93ddc4a92fd871ff15d401c4c6c9155a4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="GitHub license"&gt;&lt;/a&gt; &lt;a href="https://www.npmjs.com/package/react-relay" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3dadab54deaba73afcf3a4d4f8a63343f1fb0849859c29154c7610ebbb1e6c28/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f72656163742d72656c61792e7376673f3f7374796c653d666c6174" alt="npm version"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Relay is a JavaScript framework for building data-driven React applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Declarative:&lt;/strong&gt; Never again communicate with your data store using an imperative API. Simply declare your data requirements using GraphQL and let Relay figure out how and when to fetch your data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colocation:&lt;/strong&gt; Queries live next to the views that rely on them, so you can easily reason about your app. Relay aggregates queries into efficient network requests to fetch only what you need.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mutations:&lt;/strong&gt; Relay lets you mutate data on the client and server using GraphQL mutations, and offers automatic data consistency, optimistic updates, and error handling.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://relay.dev/docs/en/introduction-to-relay" rel="nofollow noopener noreferrer"&gt;See how to use Relay in your own project&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Example&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://github.com/relayjs/relay-examples" rel="noopener noreferrer"&gt;relay-examples&lt;/a&gt; repository contains an implementation of &lt;a href="http://todomvc.com/" rel="nofollow noopener noreferrer"&gt;TodoMVC&lt;/a&gt;. To try it out:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;git clone https://github.com/relayjs/relay-examples.git
cd relay-examples/todo
yarn
yarn build
yarn start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then, just point your browser at &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contribute&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;We actively welcome pull requests, learn how to…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/facebook/relay" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/awslabs/aws-mobile-appsync-sdk-js" rel="noopener noreferrer"&gt;AppSync&lt;/a&gt;: JavaScript GraphQL library for Offline, Sync, Sigv4. includes support for React Native&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/awslabs" rel="noopener noreferrer"&gt;
        awslabs
      &lt;/a&gt; / &lt;a href="https://github.com/awslabs/aws-mobile-appsync-sdk-js" rel="noopener noreferrer"&gt;
        aws-mobile-appsync-sdk-js
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      JavaScript library files for Offline, Sync, Sigv4. includes support for React Native
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Use AWS AppSync with JavaScript apps · &lt;a href="https://lernajs.io/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/498278d8b23ce2f715024c67ddf174576718fec5ebdbc226a6dab16931acbc1b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696e7461696e6564253230776974682d6c65726e612d6363303066662e737667" alt="lerna"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/62809a4751cdafc619b4f7b2a9f547e2ae3515241b01cd9aaaddf84eab5c746b/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6177732d6d6f62696c652d6875622d696d616765732f61777361707073796e636769746875622e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/62809a4751cdafc619b4f7b2a9f547e2ae3515241b01cd9aaaddf84eab5c746b/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6177732d6d6f62696c652d6875622d696d616765732f61777361707073796e636769746875622e706e67" alt="AWS AppSync"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aws.amazon.com/appsync/" rel="nofollow noopener noreferrer"&gt;AWS AppSync&lt;/a&gt; is a fully managed service that makes it easy to develop GraphQL APIs by handling the heavy lifting of securely connecting to data sources like AWS DynamoDB, Lambda, and more.&lt;/p&gt;
&lt;p&gt;You can use any HTTP or GraphQL client to connect to a GraphQL API on AppSync.&lt;/p&gt;
&lt;p&gt;For front-end web and mobile development, we recommend using the &lt;a href="https://docs.amplify.aws/lib/graphqlapi/getting-started/q/platform/js/" rel="nofollow noopener noreferrer"&gt;AWS Amplify library&lt;/a&gt; which is optimized to connect to the AppSync backend.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For DynamoDB data sources where conflict detection and resolution are enabled on AppSync, use the &lt;a href="https://docs.amplify.aws/lib/datastore/getting-started/q/platform/js/" rel="nofollow noopener noreferrer"&gt;DataStore category in the Amplify library&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For non-DynamoDB data sources in scenarios where you have no offline requirements, use the &lt;a href="https://docs.amplify.aws/lib/graphqlapi/getting-started/q/platform/js/" rel="nofollow noopener noreferrer"&gt;API (GraphQL) category in the Amplify library&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you want to use the Apollo V3 client, use the Apollo Links in this repository to help with authorization and subscriptions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Looking for the AWS AppSync SDK for&lt;/strong&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/awslabs/aws-mobile-appsync-sdk-js" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  Tutorials
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;React

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.robinwieruch.de/react-with-graphql-tutorial/" rel="noopener noreferrer"&gt;A complete React with GraphQL Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.robinwieruch.de/react-graphql-apollo-tutorial/" rel="noopener noreferrer"&gt;A complete React with Apollo and GraphQL Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.howtographql.com/react-apollo/0-introduction/" rel="noopener noreferrer"&gt;React + Apollo Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.howtographql.com/react-relay/0-introduction/" rel="noopener noreferrer"&gt;React + Relay Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/XeALXh37WeU"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/gF-peiFjG0o"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/7giZGFDGnkc"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kXH2dbnHYA0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.tutsplus.com/tutorials/code-an-app-with-graphql-and-react-native--cms-30511" rel="noopener noreferrer"&gt;Code an App With GraphQL, React Native, and AWS AppSync: The API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.tutsplus.com/tutorials/code-an-app-with-graphql-react-native-and-aws-appsync-the-app--cms-30569" rel="noopener noreferrer"&gt;Code an App With GraphQL, React Native and AWS AppSync: The App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codeburst.io/how-to-setup-a-react-native-graphql-relay-modern-a6a5f6c18353" rel="noopener noreferrer"&gt;How to setup React Native + GraphQL + Relay Modern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/react-native-training/building-chatty-a-whatsapp-clone-with-react-native-and-apollo-part-1-setup-68a02f7e11" rel="noopener noreferrer"&gt;Building Chatty&lt;/a&gt;: A WhatsApp clone with React Native and Apollo&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/33qP1QMmjv8"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nyE6shIRzxM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Developer Tools
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/graphcool/graphql-playground" rel="noopener noreferrer"&gt;GraphQL Playground&lt;/a&gt;: Powerful GraphQL IDE built on top of GraphiQL&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/graphql" rel="noopener noreferrer"&gt;
        graphql
      &lt;/a&gt; / &lt;a href="https://github.com/graphql/graphql-playground" rel="noopener noreferrer"&gt;
        graphql-playground
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🎮  GraphQL IDE for better development workflows (GraphQL Subscriptions, interactive docs &amp;amp; collaboration)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/71ae670b7c7b8eb0f95d8f70ec5104d132adb6f394814392bd929571b92eca5b/68747470733a2f2f696d6775722e636f6d2f35667a4d6279562e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/71ae670b7c7b8eb0f95d8f70ec5104d132adb6f394814392bd929571b92eca5b/68747470733a2f2f696d6775722e636f6d2f35667a4d6279562e706e67" width="269"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://badge.fury.io/js/graphql-playground-react" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/20f90201c994ad36b73f904c54b1819a4242096cffc32731e1d169a28b3a3464/68747470733a2f2f62616467652e667572792e696f2f6a732f6772617068716c2d706c617967726f756e642d72656163742e737667" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://circleci.com/gh/graphql/graphql-playground" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dac2a9b9230a790b37d64c424050cb0cb552e9e7056ae18e5c0c0a8bda317ff8/68747470733a2f2f636972636c6563692e636f6d2f67682f6772617068716c2f6772617068716c2d706c617967726f756e642e7376673f7374796c653d736869656c64" alt="graphql"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SECURITY WARNING:&lt;/strong&gt; both &lt;code&gt;graphql-playground-html&lt;/code&gt; and &lt;a href="https://github.com/graphql/graphql-playground#impacted-packages" rel="noopener noreferrer"&gt;all four (4) of it's middleware dependents&lt;/a&gt; until &lt;code&gt;graphql-playground-html@1.6.22&lt;/code&gt; were subject to an  &lt;strong&gt;XSS Reflection attack vulnerability only to unsanitized user input strings&lt;/strong&gt; to the functions therein. This was resolved in &lt;code&gt;graphql-playground-html@^1.6.22&lt;/code&gt;. &lt;a href="https://github.com/graphql/graphql-playground#security-details" rel="noopener noreferrer"&gt;More Information&lt;/a&gt; &lt;a href="https://github.com/graphql/graphql-playground/security/advisories/GHSA-4852-vrh7-28rf" rel="noopener noreferrer"&gt;CVE-2020-4038&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Future of this repository&lt;/strong&gt;: See &lt;a href="https://github.com/graphql/graphql-playground/issues/1366#issuecomment-1062088978" rel="noopener noreferrer"&gt;this issue&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;GraphQL IDE for better development workflows (GraphQL Subscriptions, interactive docs &amp;amp; collaboration). &lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://graphqlbin.com/v2/6RQ6TM" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4222bd3229f1f42db891176906216755e7421969a8c78c3e9bd1a8bf1fa61ab0/68747470733a2f2f692e696d6775722e636f6d2f41453557364f572e706e67" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ brew install --cask graphql-playground&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;✨ Context-aware autocompletion &amp;amp; error highlighting&lt;/li&gt;
&lt;li&gt;📚 Interactive, multi-column docs (keyboard support)&lt;/li&gt;
&lt;li&gt;⚡️ Supports real-time GraphQL Subscriptions&lt;/li&gt;
&lt;li&gt;⚙ GraphQL Config support with multiple Projects &amp;amp; Endpoints&lt;/li&gt;
&lt;li&gt;🚥 Apollo Tracing support&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Security Details&lt;/h2&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE: only &lt;em&gt;unsanitized user input&lt;/em&gt; to the functions in these packages is vulnerable&lt;/strong&gt; to the recently reported XSS Reflection attack.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Impact&lt;/h3&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Impacted are any and all unsanitized &lt;strong&gt;user-defined&lt;/strong&gt; input to:
-&lt;code&gt;renderPlaygroundPage()&lt;/code&gt;
-&lt;code&gt;koaPlayground()&lt;/code&gt;
-&lt;code&gt;expressPlayground()&lt;/code&gt;
-&lt;code&gt;koaPlayground()&lt;/code&gt;
-`lambdaPlayground()&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;If you used static values, such as &lt;code&gt;graphql-playground-electron&lt;/code&gt; does…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/graphql/graphql-playground" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://graphiql-online.com" rel="noopener noreferrer"&gt;GraphiQL Online&lt;/a&gt;: An online version of GraphiQL with a configurable endpoint and headers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://graphqleditor.com" rel="noopener noreferrer"&gt;GraphQL Editor&lt;/a&gt;: a visual graphql editor that allows you to visualize graphql schema and create fake backend out of schema.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://app.graphqleditor.com/demo/blog-sample" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qc1kssdcspdrpyker4b.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ecerroni/apollo-cache-updater" rel="noopener noreferrer"&gt;Apollo Cache Updater&lt;/a&gt; - Helper for updating the apollo cache after a mutation in scenarios where apollo's in-place update may not be sufficient.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ecerroni" rel="noopener noreferrer"&gt;
        ecerroni
      &lt;/a&gt; / &lt;a href="https://github.com/ecerroni/apollo-cache-updater" rel="noopener noreferrer"&gt;
        apollo-cache-updater
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Helper for updating the apollo cache after a mutation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;apollo-cache-updater&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/diegohaz/nod" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/81e14f1569e0a99466b2fe4632c1a894107f0f966657a4f2a1ca15e8b85dceb2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f67656e657261746f722d6e6f642d3231393646332e7376673f7374796c653d666c61742d737175617265" alt="Generated with nod"&gt;&lt;/a&gt;
&lt;a href="https://npmjs.org/package/apollo-cache-updater" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/744562cf5e747e7a8272a1b836b466a3fadc9bcc99f06b6ebcdcfd25901ff111/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f61706f6c6c6f2d63616368652d757064617465722e7376673f7374796c653d666c61742d737175617265" alt="NPM version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.org/ecerroni/apollo-cache-updater" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/72072183618ed98d43ed7e47e48a7a10fddb8879fb146c49ba9ce7cbc82b5d67/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f65636572726f6e692f61706f6c6c6f2d63616368652d757064617465722f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://codecov.io/gh/ecerroni/apollo-cache-updater/branch/master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ae9f56fca159da2e357c9e66105ea82a80afa67037a01d2b6b1044dd23204572/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f65636572726f6e692f61706f6c6c6f2d63616368652d757064617465722f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="Coverage Status"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6064427c415e6b31e506b34ebc309f4c8e18089229ada75bda420fde7f61138e/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f646570656e64656e74732f6e706d2f61706f6c6c6f2d63616368652d757064617465722e737667"&gt;&lt;img src="https://camo.githubusercontent.com/6064427c415e6b31e506b34ebc309f4c8e18089229ada75bda420fde7f61138e/68747470733a2f2f696d672e736869656c64732e696f2f6c6962726172696573696f2f646570656e64656e74732f6e706d2f61706f6c6c6f2d63616368652d757064617465722e737667" alt="Dependencies"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e4002d0c2b2ee3d1d40ebae9d93f1bf92042e4e23351e4bbc90bb72f55bdb3c9/68747470733a2f2f696d672e736869656c64732e696f2f62756e646c6570686f6269612f6d696e7a69702f61706f6c6c6f2d63616368652d757064617465722e737667"&gt;&lt;img src="https://camo.githubusercontent.com/e4002d0c2b2ee3d1d40ebae9d93f1bf92042e4e23351e4bbc90bb72f55bdb3c9/68747470733a2f2f696d672e736869656c64732e696f2f62756e646c6570686f6269612f6d696e7a69702f61706f6c6c6f2d63616368652d757064617465722e737667" alt="minified + gzip"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/ecerroni/apollo-cache-updater./assets/images/apc_logo.png"&gt;&lt;img width="200" height="200" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fecerroni%2Fapollo-cache-updater.%2Fassets%2Fimages%2Fapc_logo.png"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Zero-dependencies helper for updating the apollo cache after a mutation&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Status&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Under heavy development&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why?&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;I wanted an updater that steals the magic of refetch queries while keeping the power of apollo local cache, but stripped of the boilerplate usually needed for each mutation update.&lt;/p&gt;

&lt;p&gt;Updating the local cache becomes exponentially complicated when it needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;include multiple variables&lt;/li&gt;
&lt;li&gt;include multiple queries&lt;/li&gt;
&lt;li&gt;know which of our target queries has been already fired before our speficific mutation happend&lt;/li&gt;
&lt;li&gt;cover scenarios** where apollo's in-place update may not be sufficient&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;** Add/remove to list, move from one list to another, update filtered list, etc.&lt;/p&gt;

&lt;p&gt;This solution tries to decouple the view from the caching layer by configuring the mutation's result caching behavior through the Apollo's &lt;code&gt;update&lt;/code&gt; variable.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/ecerroni/apollo-cache-updater./assets/images/apc_demo.gif"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fecerroni%2Fapollo-cache-updater.%2Fassets%2Fimages%2Fapc_demo.gif"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;$ npm install --save apollo-cache-updater

OR 

$ yarn add apollo-cache-updater
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Example: Add an Article&lt;/p&gt;

&lt;p&gt;The following block of code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;adds a new…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ecerroni/apollo-cache-updater" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/apollographql/apollo-codegen" rel="noopener noreferrer"&gt;apollo-codegen&lt;/a&gt;: Generate API code or type annotations based on a GraphQL schema and query documents&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/apollographql" rel="noopener noreferrer"&gt;
        apollographql
      &lt;/a&gt; / &lt;a href="https://github.com/apollographql/apollo-tooling" rel="noopener noreferrer"&gt;
        apollo-tooling
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ✏️ Apollo CLI for client tooling (Mostly replaced by Rover)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Apollo CLI&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/apollographql/apollo-tooling/master/LICENSE" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/77a788b264add9d2707fc308eb2c402b62387065bd67b95506658aee88bdb59d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d6c69676874677265792e7376673f6d61784167653d32353932303030" alt="GitHub license"&gt;&lt;/a&gt; &lt;a href="https://www.npmjs.com/package/apollo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4e518b16a5a609a550e5cd5e65eac6d89de36016c0c3a478230383a40b8ca717/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f61706f6c6c6f2e737667" alt="npm"&gt;&lt;/a&gt; &lt;a href="https://spectrum.chat/apollo?tab=posts" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d52a8f99a845a03c6994427e4d76bf0f2cd3ce4d5e159367c2683186ffced9e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f737065637472756d2d6a6f696e2d6f72616e67652e737667" alt="Get on Slack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[2023-03-29] Note - all &lt;code&gt;apollo service:*&lt;/code&gt; commands will reach end-of-life on April 28th, 2023.&lt;/strong&gt; Refer to this &lt;a href="https://www.apollographql.com/blog/announcement/backend/announcing-the-end-of-life-schedule-for-apollo-cli-service-commands/" rel="nofollow noopener noreferrer"&gt;blog post&lt;/a&gt; for more details.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[2022-07-07] Are you here for codegen?&lt;/strong&gt; We highly recommend using &lt;a href="https://www.graphql-code-generator.com/" rel="nofollow noopener noreferrer"&gt;graphql-code-generator&lt;/a&gt; instead. Codegen in this repo is no longer supported and will be removed completely in a future version. For additional migration details, please see this fantastic writeup by &lt;a class="mentioned-user" href="https://dev.to/dotansimha"&gt;@dotansimha&lt;/a&gt;: &lt;a class="issue-link js-issue-link" href="https://github.com/apollographql/apollo-tooling/issues/2053" rel="noopener noreferrer"&gt;#2053&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[2022-01-21] Note - Upcoming Deprecation Plans:&lt;/strong&gt; We (Apollo) are working towards fully deprecating this repository and its related projects. Most of the functionality in this repository has been replaced by newer projects and the rest will be soon. We'll share detailed migration documentation when everything here is ready to be officially deprecated, but just a heads up in case you're planning on adopting anything here for a new project (which you still can of course if the tooling here works for you - support for…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/apollographql/apollo-tooling" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/dotansimha/graphql-code-generator" rel="noopener noreferrer"&gt;graphql-code-generator&lt;/a&gt;: GraphQL code generator with flexible support for custom templates&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/dotansimha" rel="noopener noreferrer"&gt;
        dotansimha
      &lt;/a&gt; / &lt;a href="https://github.com/dotansimha/graphql-code-generator" rel="noopener noreferrer"&gt;
        graphql-code-generator
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A tool for generating code based on a GraphQL schema and GraphQL operations (query/mutation/subscription), with flexible support for custom plugins. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
    &lt;a rel="noopener noreferrer" href="https://github.com/dotansimha/graphql-code-generator./logo.svg"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdotansimha%2Fgraphql-code-generator.%2Flogo.svg" width="150px" alt="GraphQL Code Generator logo"&gt;&lt;/a&gt;
    &lt;a href="https://the-guild.dev" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/60f857ad90be665c6609780a5b42598da29474e1dbc209aadd4a82383f7b1517/68747470733a2f2f7468652d6775696c642d6f72672e6769746875622e696f2f70726573732d6b69742f66756c6c2d6461726b2d6c6f676f2e737667" alt="Created by The Guild"&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://badge.fury.io/js/%40graphql-codegen%2Fcli" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1ea94b6b9d7ead713254c97094c583646752769d6bfa382384b2e8c650e499d2/68747470733a2f2f62616467652e667572792e696f2f6a732f2534306772617068716c2d636f646567656e253246636c692e737667" alt="npm version"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://the-guild.dev/graphql/codegen" rel="nofollow noopener noreferrer"&gt;https://the-guild.dev/graphql/codegen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GraphQL Code Generator is a tool that generates code out of your GraphQL schema. Whether you are developing a frontend or backend, you can utilize GraphQL Code Generator to generate output from your GraphQL Schema and GraphQL Documents (query/mutation/subscription/fragment).&lt;/p&gt;
&lt;p&gt;By analyzing the schema and documents and parsing it, GraphQL Code Generator can output code at a wide variety of formats, based on pre-defined templates or based on custom user-defined ones. Regardless of the language that you're using, GraphQL Code Generator has you covered.&lt;/p&gt;
&lt;p&gt;GraphQL Code Generator lets you choose the output that you need, based on &lt;em&gt;plugins&lt;/em&gt;, which are very flexible and customizable. You can also write your &lt;em&gt;plugins&lt;/em&gt; to generate custom outputs that match your needs.&lt;/p&gt;
&lt;p&gt;You can try this tool live on your browser and see some useful examples. Check out &lt;a href="https://the-guild.dev/graphql/codegen/#live-demo" rel="nofollow noopener noreferrer"&gt;GraphQL Code Generator Live Examples&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We currently support and maintain &lt;a href="https://the-guild.dev/graphql/codegen/plugins" rel="nofollow noopener noreferrer"&gt;these plugins&lt;/a&gt; (TypeScript, Flow…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dotansimha/graphql-code-generator" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/apollographql/eslint-plugin-graphql" rel="noopener noreferrer"&gt;eslint-plugin-graphql&lt;/a&gt;: Check your GraphQL query strings against a schema&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/apollographql" rel="noopener noreferrer"&gt;
        apollographql
      &lt;/a&gt; / &lt;a href="https://github.com/apollographql/eslint-plugin-graphql" rel="noopener noreferrer"&gt;
        eslint-plugin-graphql
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚦 Check your GraphQL query strings against a schema.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;eslint-plugin-graphql&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://badge.fury.io/js/eslint-plugin-graphql" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f6ada9a0ec0a6887e82cd03b512f6cbac0e4219b2c785268c228df800b620b06/68747470733a2f2f62616467652e667572792e696f2f6a732f65736c696e742d706c7567696e2d6772617068716c2e737667" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.org/apollographql/eslint-plugin-graphql" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d7a9047ab56281c1d5cec66480dc8baeabf32b8003de8f73eef223e93f542f86/68747470733a2f2f7472617669732d63692e6f72672f61706f6c6c6f6772617068716c2f65736c696e742d706c7567696e2d6772617068716c2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="http://www.apollostack.com/#slack" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bf9dc3c3fe71820b3c1267dadef9c124daa80b2375069ed9187b6175b9197dbb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736c61636b2d6a6f696e2d6f72616e67652e737667" alt="Get on Slack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[2022-01-25] Note - Upcoming Deprecation Plans:&lt;/strong&gt; We (Apollo) are working towards fully deprecating this repository. We suggest migrating to the community-supported &lt;a href="https://github.com/dotansimha/graphql-eslint" rel="noopener noreferrer"&gt;graphql-eslint&lt;/a&gt;. We'll share detailed migration documentation when everything here is ready to be officially deprecated, but just a heads up in case you're planning on adopting anything here for a new project (which you still can of course if this project works for you - support for this project will be minimal however).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An ESLint plugin that checks tagged query strings inside JavaScript, or queries inside &lt;code&gt;.graphql&lt;/code&gt; files, against a GraphQL schema.&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install eslint-plugin-graphql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/apollostack/eslint-plugin-graphql/raw/master/screenshot.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fapollostack%2Feslint-plugin-graphql%2Fraw%2Fmaster%2Fscreenshot.png" alt="Screenshot from Atom"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;eslint-plugin-graphql&lt;/code&gt; has built-in settings for four GraphQL clients out of the box:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://docs.apollostack.com/apollo-client/index.html" rel="nofollow noopener noreferrer"&gt;Apollo client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://facebook.github.io/relay/" rel="nofollow noopener noreferrer"&gt;Relay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kadirahq/lokka" rel="noopener noreferrer"&gt;Lokka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/smooth-code/fraql" rel="noopener noreferrer"&gt;FraQL&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you want to lint your GraphQL schema, rather than queries, check out &lt;a href="https://github.com/cjoudrey/graphql-schema-linter" rel="noopener noreferrer"&gt;cjoudrey/graphql-schema-linter&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Importing schema JSON&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;You'll need to import your &lt;a href="https://github.com/graphql/graphql-js/blob/master/src/utilities/introspectionQuery.js" rel="noopener noreferrer"&gt;introspection query result&lt;/a&gt; or the schema as a string in the Schema…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/apollographql/eslint-plugin-graphql" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://chrome.google.com/webstore/detail/apollo-client-developer-t/jdkknkkbebbapilgoeccciglkfbmbnfm" rel="noopener noreferrer"&gt;Apollo Client Developer Tools&lt;/a&gt;: Chrome extension for Apollo Client developer tools&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://chrome.google.com/webstore/detail/relay-devtools/oppikflppfjfdpjimpdadhelffjpciba" rel="noopener noreferrer"&gt;Relay DevTools&lt;/a&gt;: A Chrome Extension that creates a Relay tab in the developer tools interface for debugging apps in Chrome&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/relay-devtools" rel="noopener noreferrer"&gt;Relay Devtools Electron&lt;/a&gt;: Standalone Relay DevTools App for debugging Relay outside Chrome&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/relay-devtools" rel="noopener noreferrer"&gt;Relay Devtools Electron&lt;/a&gt;: Standalone Relay DevTools App for debugging Relay outside Chrome&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>graphql</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>react</category>
    </item>
    <item>
      <title>Top 3 python libraries for graphql</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Wed, 24 Apr 2019 10:23:49 +0000</pubDate>
      <link>https://forem.com/iamrobert/top-3-python-libraries-for-graphql-4d5p</link>
      <guid>https://forem.com/iamrobert/top-3-python-libraries-for-graphql-4d5p</guid>
      <description>&lt;p&gt;This post is a summary of the best python libraries for GraphQL. Python in recent years is starting to be on the list of top programming language. GraphQL is emerging but very promising query language and execution engine tied to any backend service. &lt;/p&gt;

&lt;p&gt;Python is one of the most popular languages used in data science, machine learning and AI systems. GraphQL was introduced by Facebook as an alternative to REST and it's popular of flexibility on handling complex systems.&lt;/p&gt;

&lt;h1&gt;
  
  
  Ariadne
&lt;/h1&gt;

&lt;p&gt;Ariadne is a Python library for implementing GraphQL servers using schema-first approach. &lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mirumee" rel="noopener noreferrer"&gt;
        mirumee
      &lt;/a&gt; / &lt;a href="https://github.com/mirumee/ariadne" rel="noopener noreferrer"&gt;
        ariadne
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Python library for implementing GraphQL servers using schema-first approach.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://ariadnegraphql.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6ac439bb74d7747bf8c111a185a27f632a283352e5024efb7df17da8b8ca30a7/68747470733a2f2f61726961646e656772617068716c2e6f72672f696d672f6c6f676f2d686f72697a6f6e74616c2d736d2e706e67" alt="Ariadne"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ariadnegraphql.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e52eee6d739c6d136fd0135f9b775a8b35783b7e7eb9c7fe221590d23e7d1e3f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d61726961646e656772617068716c2e6f72672d627269676874677265656e2e737667" alt="Documentation"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/mirumee/ariadne" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1ee88afead521dcea7bc630af63226453ba06b22c174b654aae70272249e2e6b/68747470733a2f2f636f6465636f762e696f2f67682f6d6972756d65652f61726961646e652f6272616e63682f6d61737465722f67726170682f62616467652e737667" alt="Codecov"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Ariadne&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Ariadne is a Python library for implementing &lt;a href="http://graphql.github.io/" rel="nofollow noopener noreferrer"&gt;GraphQL&lt;/a&gt; servers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Schema-first:&lt;/strong&gt; Ariadne enables Python developers to use schema-first approach to the API implementation. This is the leading approach used by the GraphQL community and supported by dozens of frontend and backend developer tools, examples, and learning resources. Ariadne makes all of this immediately available to you and other members of your team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple:&lt;/strong&gt; Ariadne offers small, consistent and easy to memorize API that lets developers focus on business problems, not the boilerplate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open:&lt;/strong&gt; Ariadne was designed to be modular and open for customization. If you are missing or unhappy with something, extend or easily swap with your own.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Documentation is available &lt;a href="https://ariadnegraphql.org" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Simple, quick to learn and easy to memorize API.&lt;/li&gt;
&lt;li&gt;Compatibility with GraphQL.js version 15.5.1.&lt;/li&gt;
&lt;li&gt;Queries, mutations and input types.&lt;/li&gt;
&lt;li&gt;Asynchronous resolvers and query execution.&lt;/li&gt;
&lt;li&gt;Subscriptions.&lt;/li&gt;
&lt;li&gt;Custom scalars, enums and schema directives.&lt;/li&gt;
&lt;li&gt;Unions and interfaces.&lt;/li&gt;
&lt;li&gt;File uploads.&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mirumee/ariadne" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Ariadne is a Python library for implementing GraphQL servers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schema-first: Ariadne enables Python developers to use schema-first approach to the API implementation. This is the leading approach used by the GraphQL community and supported by dozens of frontend and backend developer tools, examples, and learning resources. Ariadne makes all of this immediately available to your and other members of your team.&lt;/li&gt;
&lt;li&gt;Simple: Ariadne offers small, consistent and easy to memorize API that lets developers focus on business problems, not the boilerplate.&lt;/li&gt;
&lt;li&gt;Open: Ariadne was designed to be modular and open for customization. If you are missing or unhappy with something, extend or easily swap with your own.
Documentation is available here.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple, quick to learn and easy to memorize API.&lt;/li&gt;
&lt;li&gt;Compatibility with GraphQL.js version 14.0.2.&lt;/li&gt;
&lt;li&gt;Queries, mutations and input types.&lt;/li&gt;
&lt;li&gt;Asynchronous resolvers and query execution.&lt;/li&gt;
&lt;li&gt;Subscriptions.&lt;/li&gt;
&lt;li&gt;Custom scalars and enums.&lt;/li&gt;
&lt;li&gt;Unions and interfaces.&lt;/li&gt;
&lt;li&gt;Defining schema using SDL strings.&lt;/li&gt;
&lt;li&gt;Loading schema from .graphql files.&lt;/li&gt;
&lt;li&gt;WSGI middleware for implementing GraphQL in existing sites.&lt;/li&gt;
&lt;li&gt;Opt-in automatic resolvers mapping between camelCase and snake_case.&lt;/li&gt;
&lt;li&gt;Build-in simple synchronous dev server for quick GraphQL experimentation and GraphQL Playground.&lt;/li&gt;
&lt;li&gt;Support for Apollo GraphQL extension for Visual Studio Code.&lt;/li&gt;
&lt;li&gt;GraphQL syntax validation via gql() helper function. Also provides colorization if Apollo GraphQL extension is installed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install ariadne
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Quickstart
&lt;/h4&gt;

&lt;p&gt;The following example creates an API defining Person type and single query field people returning a list of two persons. It also starts a local dev server with GraphQL Playground available on the &lt;a href="http://127.0.0.1:8000" rel="noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt; address. Start by installing uvicorn, an ASGI server we will use to serve the API:&lt;/p&gt;

&lt;p&gt;Start by installing uvicorn, an ASGI server we will use to serve the API:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install uvicorn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then create an example.py file for your example application:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;ariadne&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ObjectType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QueryType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gql&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;make_executable_schema&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;ariadne.asgi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GraphQL&lt;/span&gt;

&lt;span class="c1"&gt;# Define types using Schema Definition Language (https://graphql.org/learn/schema/)
# Wrapping string in gql function provides validation and better error traceback
&lt;/span&gt;&lt;span class="n"&gt;type_defs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;gql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    type Query {
        people: [Person!]!
    }

    type Person {
        firstName: String
        lastName: String
        age: Int
        fullName: String
    }
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Map resolver functions to Query fields using QueryType
&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QueryType&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Resolvers are simple python functions
&lt;/span&gt;&lt;span class="nd"&gt;@query.field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;people&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;resolve_people&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;firstName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;John&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lastName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Doe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;age&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;firstName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bob&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lastName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Boberson&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;age&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="c1"&gt;# Map resolver functions to custom type fields using ObjectType
&lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ObjectType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Person&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@person.field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fullName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;resolve_person_fullname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%s %s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;firstName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lastName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Create executable GraphQL schema
&lt;/span&gt;&lt;span class="n"&gt;schema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;make_executable_schema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type_defs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Create an ASGI app using the schema, running in debug mode
&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GraphQL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  Strawberry
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/strawberry-graphql" rel="noopener noreferrer"&gt;
        strawberry-graphql
      &lt;/a&gt; / &lt;a href="https://github.com/strawberry-graphql/strawberry" rel="noopener noreferrer"&gt;
        strawberry
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A GraphQL library for Python that leverages type annotations 🍓
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/strawberry-graphql/strawberry/raw/main/.github/logo.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fstrawberry-graphql%2Fstrawberry%2Fraw%2Fmain%2F.github%2Flogo.png" width="124" height="150"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Strawberry GraphQL&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Python GraphQL library based on dataclasses&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://circleci.com/gh/strawberry-graphql/strawberry/tree/main" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6c77c500d33d1743b7ef5562ce5817b3dcc56bdf206062b12aaad17f7418caba/68747470733a2f2f696d672e736869656c64732e696f2f636972636c6563692f746f6b656e2f333037623430643565313532653037346433346638346433306432323633373661313536363764352f70726f6a6563742f6769746875622f737472617762657272792d6772617068716c2f737472617762657272792f6d61696e2e7376673f7374796c653d666f722d7468652d6261646765" alt="CircleCI"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/ZkRTEJQ" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bc1d45720bd38e32cd28e2f71b503ea1517688401837023fdc97c89f499397c1/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3638393830363333343333373438323736353f6c6162656c3d646973636f7264266c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465267374796c653d666f722d7468652d626164676526636f6c6f723d626c7565" alt="Discord"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/strawberry-graphql/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/96cb9279292b4d6d50c34df8062653153406b9c8bcd631f7ebb1a402097b31cf/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f737472617762657272792d6772617068716c3f6c6f676f3d70797069266c6f676f436f6c6f723d7768697465267374796c653d666f722d7468652d6261646765" alt="PyPI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation ( Quick Start )&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The quick start method provides a server and CLI to get going quickly. Install
with:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;strawberry-graphql[debug-server]&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Create a file called &lt;code&gt;app.py&lt;/code&gt; with the following code:&lt;/p&gt;
&lt;div class="highlight highlight-source-python notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;


&lt;span class="pl-en"&gt;@&lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-s1"&gt;type&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-k"&gt;class&lt;/span&gt; &lt;span class="pl-v"&gt;User&lt;/span&gt;:
    &lt;span class="pl-s1"&gt;name&lt;/span&gt;: &lt;span class="pl-s1"&gt;str&lt;/span&gt;
    &lt;span class="pl-s1"&gt;age&lt;/span&gt;: &lt;span class="pl-s1"&gt;int&lt;/span&gt;


&lt;span class="pl-en"&gt;@&lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-s1"&gt;type&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-k"&gt;class&lt;/span&gt; &lt;span class="pl-v"&gt;Query&lt;/span&gt;:
    &lt;span class="pl-en"&gt;@&lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-s1"&gt;field&lt;/span&gt;&lt;/span&gt;
    &lt;span class="pl-k"&gt;def&lt;/span&gt; &lt;span class="pl-en"&gt;user&lt;/span&gt;(&lt;span class="pl-s1"&gt;self&lt;/span&gt;) &lt;span class="pl-c1"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="pl-v"&gt;User&lt;/span&gt;:
        &lt;span class="pl-k"&gt;return&lt;/span&gt; &lt;span class="pl-v"&gt;User&lt;/span&gt;(&lt;span class="pl-s1"&gt;name&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"Patrick"&lt;/span&gt;, &lt;span class="pl-s1"&gt;age&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-c1"&gt;100&lt;/span&gt;)


&lt;span class="pl-s1"&gt;schema&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-v"&gt;Schema&lt;/span&gt;(&lt;span class="pl-s1"&gt;query&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-v"&gt;Query&lt;/span&gt;)&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will create a GraphQL schema defining a &lt;code&gt;User&lt;/code&gt; type and a single query
field &lt;code&gt;user&lt;/code&gt; that will return a hardcoded user.&lt;/p&gt;
&lt;p&gt;To run the debug server run the following command:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;strawberry server app&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open the debug server by clicking on the following link:
&lt;a href="http://0.0.0.0:8000/graphql" rel="nofollow noopener noreferrer"&gt;http://0.0.0.0:8000/graphql&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This will open GraphiQL where you…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/strawberry-graphql/strawberry" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Strawberry is a new GraphQL library for Python 3, inspired by dataclasses. An initial version of Strawberry has been released on GitHub. Strawberry was created by &lt;a class="mentioned-user" href="https://dev.to/patrick91"&gt;@patrick91&lt;/a&gt; who is also an organizer of @pyconit. It was originally announced during Python Pizza Berlin.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1115266087342563329-978" src="https://platform.twitter.com/embed/Tweet.html?id=1115266087342563329"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1115266087342563329-978');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1115266087342563329&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjrow1cc45mi8n650eiba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjrow1cc45mi8n650eiba.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://strawberry.rocks/" rel="noopener noreferrer"&gt;https://strawberry.rocks/&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install strawberry-graphql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Getting Started
&lt;/h4&gt;

&lt;p&gt;Create a file called app.py with the following code:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;strawberry&lt;/span&gt;


&lt;span class="nd"&gt;@strawberry.type&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;


&lt;span class="nd"&gt;@strawberry.type&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nd"&gt;@strawberry.field&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Patrick&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;schema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;strawberry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This will create a GraphQL schema defining a User type and a single query field user that will return a hard-coded user.&lt;/p&gt;

&lt;p&gt;To run the debug server run the following command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;strawberry run server app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open the debug server by clicking on the following link: &lt;a href="http://0.0.0.0:8000/graphql" rel="noopener noreferrer"&gt;http://0.0.0.0:8000/graphql&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will open a GraphQL playground where you can test the API.&lt;/p&gt;
&lt;h1&gt;
  
  
  Graphene
&lt;/h1&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/graphql-python" rel="noopener noreferrer"&gt;
        graphql-python
      &lt;/a&gt; / &lt;a href="https://github.com/graphql-python/graphene" rel="noopener noreferrer"&gt;
        graphene
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GraphQL framework for Python
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f4f347ad8671a2f09eba5346bd1daa21a4c5d422f2772cc8d625804368cf7087/687474703a2f2f6772617068656e652d707974686f6e2e6f72672f66617669636f6e2e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/f4f347ad8671a2f09eba5346bd1daa21a4c5d422f2772cc8d625804368cf7087/687474703a2f2f6772617068656e652d707974686f6e2e6f72672f66617669636f6e2e706e67" alt="Graphene Logo"&gt;&lt;/a&gt; &lt;a href="http://graphene-python.org" rel="nofollow noopener noreferrer"&gt;Graphene&lt;/a&gt;  &lt;a href="https://badge.fury.io/py/graphene" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e20e12fcb28371a857a51c9df512a192f580379bf8a9695f5e87723fb4d378a6/68747470733a2f2f62616467652e667572792e696f2f70792f6772617068656e652e737667" alt="PyPI version"&gt;&lt;/a&gt; &lt;a href="https://coveralls.io/github/graphql-python/graphene?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f4ff51f707e04d370f84d82bbe9cbfca168388fbc714eddb756d5167aab0c9e3/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6772617068716c2d707974686f6e2f6772617068656e652f62616467652e7376673f6272616e63683d6d617374657226736572766963653d676974687562" alt="Coverage Status"&gt;&lt;/a&gt; &lt;a href="https://discord.gg/T6Gp6NFYHe" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2652af80f9a98323e65d1af1bfef72097c9356e956070246e22fa9a5e42ead5a/68747470733a2f2f646362616467652e76657263656c2e6170702f6170692f7365727665722f54364770364e465948653f7374796c653d666c6174" alt=""&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://discord.gg/T6Gp6NFYHe" rel="nofollow noopener noreferrer"&gt;💬 Join the community on Discord&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We are looking for contributors&lt;/strong&gt;! Please check the current issues to see how you can help ❤️&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://graphene-python.org" rel="nofollow noopener noreferrer"&gt;Graphene&lt;/a&gt; is an opinionated Python library for building GraphQL schemas/types fast and easily.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Easy to use:&lt;/strong&gt; Graphene helps you use GraphQL in Python without effort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relay:&lt;/strong&gt; Graphene has builtin support for Relay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data agnostic:&lt;/strong&gt; Graphene supports any kind of data source: SQL (Django, SQLAlchemy), Mongo, custom Python objects, etc
We believe that by providing a complete API you could plug Graphene anywhere your data lives and make your data available
through GraphQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Integrations&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Graphene has multiple integrations with different frameworks:&lt;/p&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;th&gt;integration&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;SQLAlchemy&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://github.com/graphql-python/graphene-sqlalchemy/" rel="noopener noreferrer"&gt;graphene-sqlalchemy&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;Mongo&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://github.com/graphql-python/graphene-mongo/" rel="noopener noreferrer"&gt;graphene-mongo&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;Apollo Federation&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://github.com/graphql-python/graphene-federation/" rel="noopener noreferrer"&gt;graphene-federation&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;Django&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://github.com/graphql-python/graphene-django/" rel="noopener noreferrer"&gt;graphene-django&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Also, Graphene is fully compatible with the GraphQL spec, working seamlessly with all GraphQL clients, such as &lt;a href="https://github.com/facebook/relay" rel="noopener noreferrer"&gt;Relay&lt;/a&gt;, &lt;a href="https://github.com/apollographql/apollo-client" rel="noopener noreferrer"&gt;Apollo&lt;/a&gt; and &lt;a href="https://github.com/graphql-python/gql" rel="noopener noreferrer"&gt;gql&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;To install &lt;code&gt;graphene&lt;/code&gt;, just run this command in…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/graphql-python/graphene" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Graphene is a Python library for building GraphQL schemas/types fast and easily.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to use: Graphene helps you use GraphQL in Python without effort.&lt;/li&gt;
&lt;li&gt;Relay: Graphene has builtin support for Relay.&lt;/li&gt;
&lt;li&gt;Data agnostic: Graphene supports any kind of data source: SQL (Django, SQLAlchemy), NoSQL, custom Python objects, etc. We believe that by providing a complete API you could plug Graphene anywhere your data lives and make your data available through GraphQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Integrations
&lt;/h4&gt;

&lt;p&gt;Graphene has multiple integrations with different frameworks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Django - graphene-django&lt;/li&gt;
&lt;li&gt;SQLAlchemy - graphene-sqlalchemy&lt;/li&gt;
&lt;li&gt;Google App Engine - graphene-gae&lt;/li&gt;
&lt;li&gt;Peewee - In progress (Tracking Issue)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, Graphene is fully compatible with the GraphQL spec, working seamlessly with all GraphQL clients, such as Relay, Apollo and gql.&lt;/p&gt;

&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;p&gt;For instaling graphene, just run this command in your shell&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install "graphene&amp;gt;=2.0"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Examples
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Here&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graphene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ObjectType&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;hello&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graphene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;A typical hello world&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;resolve_hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;World&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="n"&gt;schema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graphene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then Querying graphene.Schema is as simple as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'''&lt;/span&gt;&lt;span class="s"&gt;
    query SayHello {
      hello
    }
&lt;/span&gt;&lt;span class="sh"&gt;'''&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>GraphQL library for Python - Strawberry</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Thu, 18 Apr 2019 12:49:01 +0000</pubDate>
      <link>https://forem.com/iamrobert/graphql-library-for-python-strawberry-1jmc</link>
      <guid>https://forem.com/iamrobert/graphql-library-for-python-strawberry-1jmc</guid>
      <description>&lt;p&gt;I recently came across an interesting library for GraphQL. Strawberry is a new GraphQL library for Python 3, inspired by dataclasses. An initial version of Strawberry has been released on GitHub. To follow the project, you can sign up to get updates on the Strawberry site or github. Links below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjrow1cc45mi8n650eiba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fjrow1cc45mi8n650eiba.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://strawberry.rocks/" rel="noopener noreferrer"&gt;https://strawberry.rocks/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Strawberry is created by &lt;a class="mentioned-user" href="https://dev.to/patrick91"&gt;@patrick91&lt;/a&gt; who is also an organizer of @pyconit. It was originally announced during Python Pizza Berlin.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1115266087342563329-86" src="https://platform.twitter.com/embed/Tweet.html?id=1115266087342563329"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1115266087342563329-86');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1115266087342563329&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h1&gt;
  
  
  PyPi release and demo
&lt;/h1&gt;

&lt;p&gt;Alpha version on PyPI: &lt;a href="https://pypi.org/project/strawberry-graphql" rel="noopener noreferrer"&gt;https://pypi.org/project/strawberry-graphql&lt;/a&gt;&lt;br&gt;
Demo on Heroku using Starlette: &lt;a href="https://demo.strawberry.rocks/graphql" rel="noopener noreferrer"&gt;https://demo.strawberry.rocks/graphql&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Installation
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install strawberry-graphql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Getting Started&lt;/p&gt;

&lt;p&gt;Create a file called app.py with the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import strawberry


@strawberry.type
class User:
    name: str
    age: int


@strawberry.type
class Query:
    @strawberry.field
    def user(self, info) -&amp;gt; User:
        return User(name="Patrick", age=100)


schema = strawberry.Schema(query=Query)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This will create a GraphQL schema defining a User type and a single query field user that will return a hard-coded user.&lt;/p&gt;

&lt;p&gt;To run the debug server run the following command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;strawberry run server app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open the debug server by clicking on the following link: &lt;a href="http://0.0.0.0:8000/graphql" rel="noopener noreferrer"&gt;http://0.0.0.0:8000/graphql&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will open a GraphQL playground where you can test the API.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/strawberry-graphql" rel="noopener noreferrer"&gt;
        strawberry-graphql
      &lt;/a&gt; / &lt;a href="https://github.com/strawberry-graphql/strawberry" rel="noopener noreferrer"&gt;
        strawberry
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A GraphQL library for Python that leverages type annotations 🍓
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/strawberry-graphql/strawberry/raw/main/.github/logo.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fstrawberry-graphql%2Fstrawberry%2Fraw%2Fmain%2F.github%2Flogo.png" width="124" height="150"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Strawberry GraphQL&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Python GraphQL library based on dataclasses&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://circleci.com/gh/strawberry-graphql/strawberry/tree/main" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6c77c500d33d1743b7ef5562ce5817b3dcc56bdf206062b12aaad17f7418caba/68747470733a2f2f696d672e736869656c64732e696f2f636972636c6563692f746f6b656e2f333037623430643565313532653037346433346638346433306432323633373661313536363764352f70726f6a6563742f6769746875622f737472617762657272792d6772617068716c2f737472617762657272792f6d61696e2e7376673f7374796c653d666f722d7468652d6261646765" alt="CircleCI"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/ZkRTEJQ" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bc1d45720bd38e32cd28e2f71b503ea1517688401837023fdc97c89f499397c1/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3638393830363333343333373438323736353f6c6162656c3d646973636f7264266c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465267374796c653d666f722d7468652d626164676526636f6c6f723d626c7565" alt="Discord"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/strawberry-graphql/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/96cb9279292b4d6d50c34df8062653153406b9c8bcd631f7ebb1a402097b31cf/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f737472617762657272792d6772617068716c3f6c6f676f3d70797069266c6f676f436f6c6f723d7768697465267374796c653d666f722d7468652d6261646765" alt="PyPI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation ( Quick Start )&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The quick start method provides a server and CLI to get going quickly. Install
with:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;strawberry-graphql[debug-server]&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Create a file called &lt;code&gt;app.py&lt;/code&gt; with the following code:&lt;/p&gt;
&lt;div class="highlight highlight-source-python notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;


&lt;span class="pl-en"&gt;@&lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-s1"&gt;type&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-k"&gt;class&lt;/span&gt; &lt;span class="pl-v"&gt;User&lt;/span&gt;:
    &lt;span class="pl-s1"&gt;name&lt;/span&gt;: &lt;span class="pl-s1"&gt;str&lt;/span&gt;
    &lt;span class="pl-s1"&gt;age&lt;/span&gt;: &lt;span class="pl-s1"&gt;int&lt;/span&gt;


&lt;span class="pl-en"&gt;@&lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-s1"&gt;type&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-k"&gt;class&lt;/span&gt; &lt;span class="pl-v"&gt;Query&lt;/span&gt;:
    &lt;span class="pl-en"&gt;@&lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-s1"&gt;field&lt;/span&gt;&lt;/span&gt;
    &lt;span class="pl-k"&gt;def&lt;/span&gt; &lt;span class="pl-en"&gt;user&lt;/span&gt;(&lt;span class="pl-s1"&gt;self&lt;/span&gt;) &lt;span class="pl-c1"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="pl-v"&gt;User&lt;/span&gt;:
        &lt;span class="pl-k"&gt;return&lt;/span&gt; &lt;span class="pl-v"&gt;User&lt;/span&gt;(&lt;span class="pl-s1"&gt;name&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"Patrick"&lt;/span&gt;, &lt;span class="pl-s1"&gt;age&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-c1"&gt;100&lt;/span&gt;)


&lt;span class="pl-s1"&gt;schema&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;strawberry&lt;/span&gt;.&lt;span class="pl-v"&gt;Schema&lt;/span&gt;(&lt;span class="pl-s1"&gt;query&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-v"&gt;Query&lt;/span&gt;)&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will create a GraphQL schema defining a &lt;code&gt;User&lt;/code&gt; type and a single query
field &lt;code&gt;user&lt;/code&gt; that will return a hardcoded user.&lt;/p&gt;
&lt;p&gt;To run the debug server run the following command:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;strawberry server app&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open the debug server by clicking on the following link:
&lt;a href="http://0.0.0.0:8000/graphql" rel="nofollow noopener noreferrer"&gt;http://0.0.0.0:8000/graphql&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This will open GraphiQL where you…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/strawberry-graphql/strawberry" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>python</category>
    </item>
    <item>
      <title>Introduction to HTML</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Wed, 17 Apr 2019 12:53:10 +0000</pubDate>
      <link>https://forem.com/iamrobert/introduction-to-html-1fcf</link>
      <guid>https://forem.com/iamrobert/introduction-to-html-1fcf</guid>
      <description>&lt;p&gt;In this article, we'll create a web page from scratch. You'll get a feeling of what's like to be developer by working along. Don't worry about learning text elements or style sheet rules at this point, I'll cover that in another article. For this introduction, I've created a short agenda:&lt;/p&gt;

&lt;h3&gt;
  
  
  Agenda:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Understand how tags, markups, and elements work.&lt;/li&gt;
&lt;li&gt;Learn the structure of HTML documents.&lt;/li&gt;
&lt;li&gt;Check how the browser interprets HTML document.&lt;/li&gt;
&lt;li&gt;See yourself how style sheet works in action.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've created a small roadmap of website production for you to understand what we are doing at each stage.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create content. Write the text for your web page and choose images.&lt;/li&gt;
&lt;li&gt;Create an HTML document structure, learn syntax and elements that setup areas for content and metadata&lt;/li&gt;
&lt;li&gt;Identify and describe content using text elements.&lt;/li&gt;
&lt;li&gt;Add images to the web page and learn about attributes.&lt;/li&gt;
&lt;li&gt;Introduction to style sheets - change how the web looks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I assume that you have a basic understanding of how the web works. I prefer to teach HTML old fashioned way - by hands and text editor. There's no better way to learn and remember by mechanical typing.  You'll see how markups work by typing it out and then checking results in a browser.  Professional web developers tend to mark up content manually for better control over the code and possibility to make decisions on what elements to use. We are going to be checking our work in a browser very frequently throughout this article - it's helpful at this stage to see the cause and effect of each small change in the code.&lt;/p&gt;

&lt;p&gt;This is our final outcome - basic landing page for startup with logo and text description. It's a basic version of &lt;a href="https://graphqleditor.com"&gt;my startup landing page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IZCAyas4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/jgrcdkrkjhqm6blr1x0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IZCAyas4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/jgrcdkrkjhqm6blr1x0o.png" alt="" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Open a text editor
&lt;/h3&gt;

&lt;p&gt;For the purpose of this article, I'll be using most basic text editors on Mac - TextEdit or Windows Notepad. Other editors are also fine as long as they are able to edit plain text and save it as *.html.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notepad in Windows&lt;/strong&gt;&lt;br&gt;
Normally in windows, you don't see file extensions so before launching Notepad you might try to change that. It's not obligatory but it's very useful. In folder settings, you have to uncheck "Hide extensions for known file types". That's it, now you can create a new document called mypage.html.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TextEdit in Mac&lt;/strong&gt;&lt;br&gt;
Normally in this app, you'll get rich end editor with a lot of options for making text bold, setting the font size and others. You can see if the editor is in rich edit mode when you have a lot of controls on the formatting toolbar. HTML documents need to be plain text so we need to change document format. On the New Document tab, select Plain text. Under Options, deselect all of the automatic formatting options. On the Open and Save tab, select Display HTML files as HTML Code and deselect “Add ‘.txt’ extensions to plain text files”. The rest of the defaults should be fine. Now you can create a new document and save it as an HTML page.&lt;/p&gt;
&lt;h3&gt;
  
  
  The content for our webpage.
&lt;/h3&gt;

&lt;p&gt;Now that we have our new document it's time to get some writing.  Type or copy already prepared content into a text editor, remain formatting like breaks between lines. You can use my text which I've posted below or write whatever you want. It's a text from my previous startup landing page &lt;a href="https://graphqleditor.com"&gt;https://graphqleditor.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Feel free to try our editor when you would like to explore more GraphQL!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://graphqleditor.com"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I2pN6auU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/sqsk2q7gf660d2v9ffoq.png" alt="" width="800" height="528"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VISUAL GRAPHQL EDITOR
GraphQL Editor makes understanding GraphQL schema a lot easier. Plan it out by linking visual blocks and our editor will transform them into a code!

GRAPHQL SUPER EASY
There is no graphql knowledge required to start using this editor. Just click and experiment to learn this technology of the future.

THINK VISUALLY
All backend systems should be drawn first. It is much easier to get the desired solution if you see your system and its structure.

NO CODE SOLUTION
You can create graphql server without modifying generated code. The code generated by the editor is ready to use in production.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a new folder and save the text as HTML file inside. Name the folder as "startup" and text file as index.html.&lt;/p&gt;

&lt;p&gt;Open what you have created in chrome browser. Check what you see - do you have the same results as I am? I left the text with spaces between paragraphs and the browser interpreted it differently. See what's going on? If yours is not looking the same way check text document settings as mentioned before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gZ3tVirp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/3127gfjtlviixuddtpnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gZ3tVirp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/3127gfjtlviixuddtpnc.png" alt="" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our page is not looking too good right now. The text from the file is converted into one big block of text. Web browsers ignore things like line brakes, tabs, multi-character white spaces, unrecognized markups or text in comments. More on that later ;)&lt;/p&gt;

&lt;h1&gt;
  
  
  Tags and markups
&lt;/h1&gt;

&lt;p&gt;Let's start by understanding the most basic HTML element on an example. Since now you haven't seen in this article any code or tags.  A generic element of HTML looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;element&amp;gt;Text here&amp;lt;/element&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This second example below is using heading tag meaning that it will be the title of the whole page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Visual GraphQL Editor&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A tag consists of element name with angle brackets. Element name appears in opening tag so-called start tag and again in closing tag preceded by a slash. The opening and closing tag work like ON an OFF switch where "/" works like OFF.  Be careful to use proper slash "/" and not to mistake it with backslash "\".&lt;/p&gt;

&lt;p&gt;The tags plus content are referred to as markup where HTML users markups to describe web pages. Basic HTML element has content and it's markup. There are also elements without content&lt;/p&gt;

&lt;p&gt;The tags added around content are referred to as the markup. It is important to note that an element consists of both the content and its markup (the start and end tags). Not all elements have content, however. Some are empty by definition, such as the &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; element used to add an image to the page. We’ll talk about empty elements a little later in this chapter.&lt;/p&gt;

&lt;p&gt;Capitalization in HTML is not important however most developers preferer writing code in lowercase.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML Structure
&lt;/h3&gt;

&lt;p&gt;Below I've used the most basic HTML document from &lt;a href="https://www.w3schools.com/"&gt;w3schools.com&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Page Title&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;h1&amp;gt;My First Heading&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;My first paragraph.&amp;lt;/p&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The &amp;lt;!DOCTYPE html&amp;gt; declaration defines this document to be HTML5
The &amp;lt;html&amp;gt; element is the root element of an HTML page
The &amp;lt;head&amp;gt; element contains meta information about the document
The &amp;lt;title&amp;gt; element specifies a title for the document
The &amp;lt;body&amp;gt; element contains the visible page content
The &amp;lt;h1&amp;gt; element defines a large heading
The &amp;lt;p&amp;gt; element defines a paragraph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Are you ready to start updating our sample web page?&lt;/p&gt;

&lt;p&gt;Open our &lt;strong&gt;.html&lt;/strong&gt; document in a text editor and start updating.&lt;/p&gt;

&lt;p&gt;Put entire document into &lt;code&gt;&amp;lt;html&amp;gt;&amp;lt;/html&amp;gt;&lt;/code&gt; element, than create &lt;code&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/code&gt; and add &lt;code&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/code&gt; inside. Also, you should add &lt;code&gt;&amp;lt;meta charset="utf-8"&amp;gt;&lt;/code&gt; in the same section.  Define the body of the document by wrapping content into &lt;code&gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;/code&gt; and markup titles and paragraphs according to your needs. At the end save the document by replacing the old version. Check how it looks on my example. Do you have the same result?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NYECxPoH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/clhdu0l3rx6w4zy2yihw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NYECxPoH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/clhdu0l3rx6w4zy2yihw.png" alt="" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  File naming
&lt;/h3&gt;

&lt;p&gt;HTML files must end with &lt;strong&gt;.html&lt;/strong&gt; or &lt;strong&gt;.htm&lt;/strong&gt;, graphics must be named according to their file format: &lt;strong&gt;.gif&lt;/strong&gt;, &lt;strong&gt;.png&lt;/strong&gt;, &lt;strong&gt;.jpg&lt;/strong&gt; or &lt;strong&gt;.svg&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Never use character spaces within filenames. Use an underline character to visually separate words within filenames, like &lt;strong&gt;my_website.html&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Avoid special characters such as &lt;em&gt;?, %, #, /, :, ;, •,&lt;/em&gt; etc. and national characters (i.e. in Polish we have ł,ę,ó).&lt;/p&gt;

&lt;p&gt;It is common among web developers to keep file names short and lowercase. That's an industry standard of keeping the web development clean.&lt;/p&gt;

&lt;h3&gt;
  
  
  Text elements
&lt;/h3&gt;

&lt;p&gt;With experience from the previous paragraph, you should have no problem marking up a text according to your needs. The purpose of HTML is to add meaning and structure to the content, not intending how the content should look like. That will be introduced in the next paragraph where we'll touch style sheets. Check below some basic text elements and think about how to apply them to our document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; - Bold text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; -  Important text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt; - Italic text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; - Emphasized text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EaIzwusW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/3vqnthy9twywn1vsc8ii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EaIzwusW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/3vqnthy9twywn1vsc8ii.png" alt="" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can follow my example or mark your own text as you want. For first time users, I suggest staying close to this example, therefore, you'll achieve small wins easily and stay motivated.&lt;/p&gt;

&lt;p&gt;Ok so let's go. I've used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;h3&lt;/strong&gt; - to mark paragraph titles,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;h2&lt;/strong&gt; - to mark the main title,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;p&lt;/strong&gt; - to mark paragraphs and em to promote the main feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, if you will pay attention you'll find &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; element which is break liner - like enter in a text editor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;VISUAL GRAPHQL EDITOR&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;h2&amp;gt;&amp;lt;img src="logo.jpg" alt="logo"&amp;gt;&amp;lt;br&amp;gt;Visual GraphQL Editor&amp;lt;/h2&amp;gt;

&amp;lt;p&amp;gt;GraphQL Editor makes understanding GraphQL schema a lot easier. Plan it out by linking visual blocks and our editor will transform them into a code!&amp;lt;/p&amp;gt;

&amp;lt;h3&amp;gt;GRAPHQL SUPER EASY&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;There is no graphql knowledge required to start using this editor. Just click and experiment to learn this technology of future.&amp;lt;/p&amp;gt;

&amp;lt;h3&amp;gt;THINK VISUALLY&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;All backend systems should be drawn first. &amp;lt;/em&amp;gt; It is much easier to get the desired solution if you see your system and its structure.&amp;lt;/p&amp;gt;

&amp;lt;h3&amp;gt;NO CODE SOLUTION&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;You can create graphql server without modifying generated code. Code
generated by the editor is ready to use in production.&amp;lt;/p&amp;gt;

&amp;lt;h3&amp;gt;Contact&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;Robert Matyszewski &amp;lt;br&amp;gt; robert@graphqleditor.com &amp;lt;br&amp;gt; Bialystok, Poland&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding images
&lt;/h3&gt;

&lt;p&gt;You have probably noticed that I've inserted already some image inside - a logo to our landing page. That's right. We are getting close to the final result. Below you can download logo used in this code and add to your webpage. To do that - simply copy the code under the link to your HTML file. Remember to put an image in the same folder and keep naming properly according to file type. If you insert jpg file named .png - the browser won't show the file properly&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://thepracticaldev.s3.amazonaws.com/i/xvtvgoxn6iqksys6iw53.png

&amp;lt;img src="logo.jpg" alt="logo"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The image element &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; is an example of an empty element. It tells the browser to get an image file from the server and insert it at that spot in the flow of the text. Other empty elements include the line break &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;. So far we've only used elements that had start and end, so-called content elements. Below we have an example of &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Contact&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Robert Matyszewski &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt; robert@graphqleditor.com &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt; Bialystok, Poland&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Style sheets
&lt;/h3&gt;

&lt;p&gt;We’ll change the presentation of the text elements and background by using some uncomplicated style sheet rules. Don’t worry about understanding them all right now. We’ll get into CSS in more detail in another article, but I want to at least give you a taste of what it means to add CSS to your page.&lt;/p&gt;

&lt;p&gt;Open your HTML file and add style section into the head section of your document.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;VISUAL GRAPHQL EDITOR&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now type those style rules between the start and end of the style tag. You can already spot that there are some specific visual rules assigned to the entire document described in body and font formatting for h2 and h3 titles.  This will affect your entire page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;VISUAL GRAPHQL EDITOR&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;

body {
font: normal 1em Verdana;
width: 80%;
margin: 1em auto;
background-color: #CAE7FF;
}

h2 {
font: normal 3em Verdana;
margin: 1em 0 1em;
text-align: center;
color: #0A45BE
}
h3 {
color: #0A45BE
}

&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now it's time to save the entire HTML document and open it in chrome browser.  Congratulations you have created your own webpage with images, HTML structure and style sheets. All went ok? Compare what you have created with my code at the end screenshot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IZCAyas4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/jgrcdkrkjhqm6blr1x0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IZCAyas4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/jgrcdkrkjhqm6blr1x0o.png" alt="" width="800" height="582"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;VISUAL GRAPHQL EDITOR&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;1em&lt;/span&gt; &lt;span class="n"&gt;Verdana&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1em&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#CAE7FF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;3em&lt;/span&gt; &lt;span class="n"&gt;Verdana&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1em&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;1em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0A45BE&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0A45BE&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"logo.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"logo"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;Visual GraphQL Editor&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;GraphQL Editor makes understanding GraphQL schema a lot easier. Plan it out by linking visual blocks and our editor will transform them into a code!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;GRAPHQL SUPER EASY&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;There is no graphql knowledge required to start using this editor. Just click and experiment to learn this technology of future.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;THINK VISUALLY&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&lt;/span&gt;All backend systems should be drawn first. &lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&lt;/span&gt; It is much easier to get the desired solution if you see your system and its structure.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;NO CODE SOLUTION&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;You can create graphql server without modifying generated code. Code generated by the editor is ready to use in production.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Contact&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Robert Matyszewski &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt; robert@graphqleditor.com &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt; Bialystok, Poland&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Junior Web Developer environment setup</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Thu, 11 Apr 2019 08:30:17 +0000</pubDate>
      <link>https://forem.com/iamrobert/junior-web-developer-enviroment-setup-28dg</link>
      <guid>https://forem.com/iamrobert/junior-web-developer-enviroment-setup-28dg</guid>
      <description>&lt;p&gt;This article will give you a detailed introduction on how to set up your computer as a web developer.  It was created for MacOS cause I mostly work on MacOS, however, you can easily interchange those instructions for Windows. Setting up a web development environment is the first challenge on a road to become a web developer today.  Don't give up, try right away!&lt;/p&gt;

&lt;p&gt;There are a few ways you can set up your development environment. You can have everything in one IDE alternatively you can use many lightweight tools to combine them with their purposes. The following short checklist reflects my favourite tools in lightweight combination. In some cases, I prefer to use lightweight tools and for example, for react I use one IDE. Follow me to get more, in the next article I'll cover the basics of React Development Environment. &lt;/p&gt;

&lt;h1&gt;
  
  
  Agenda:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Homebrew&lt;/li&gt;
&lt;li&gt;Git &amp;amp; GitHub&lt;/li&gt;
&lt;li&gt;Sublime as Editor&lt;/li&gt;
&lt;li&gt;Node and NPM&lt;/li&gt;
&lt;li&gt;iTerm2&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Homebrew
&lt;/h1&gt;

&lt;p&gt;You will need to use the Mac Terminal app to install Homebrew. The Terminal app is located in the Utility folder in the Applications folder.&lt;/p&gt;

&lt;p&gt;Homebrew is a package manager for MacOS. Rather than having to download every app from a web, Homebrew enables you to install and control applications from the command line. It’s an excellent tool to get used to the command line at the beginner's journey. You should feel relaxed on the command line as developer thus it makes sense to perform as many tasks as possible there. In addition, Homebrew gives you the ability to manage all of your applications with only one tool. You can get all the necessary instructions for Homebrew on their website. Otherwise, simply type the following command in your command line (terminal) to install Homebrew.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)" 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To verify if the installation was successful type: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Afterwards, Homebrew should be ready for you. It should be accessible on the command line when you type brew. Whenever you install another tool with Homebrew, type brew update in your command line to update the Homebrew repository with all the recent versions of the packages. Afterwards, you can install the desired tool with brew install  or upgrade it with brew upgrade .&lt;/p&gt;

&lt;h1&gt;
  
  
  Git and GitHub
&lt;/h1&gt;

&lt;p&gt;Git will be your distributed version control system. It manages your local projects on your machine and your remote projects on platforms such as GitHub and GitLab. Sooner or later, you will need it to cooperate on projects with other developers. Git should have been installed along the way with the Homebrew installation. Type git --version to verify that it is there. Otherwise, you can use Homebrew for the first time to install it with the following command on the command line:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To verify if the installation was successful type: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Next, you have to create a GitHub account and connect it from a terminal. GitHub is a web-based hosting service for version control using Git. It offers all of the distributed version control and source code management (SCM) functionality of Git as well as adding its other features. It provides access control and several collaboration features such as bug tracking, feature requests, task management, and wikis for every project. To learn more how to setup GitHub over terminal check this &lt;a href="https://help.github.com/en/articles/set-up-git"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Sublime as Editor
&lt;/h1&gt;

&lt;p&gt;Sublime is one of the top editors for developers. That’s the part where everybody has their own opinion. You can use any editor or IDE of your choices like Visual Studio Code, Atom and VIM.&lt;/p&gt;

&lt;p&gt;Unfortunately, Sublime isn’t directly accessible via Homebrew. But you can use Cask to install it. Cask is another package manager within Homebrew for GUI tools. For instance, Chrome could be installed on your machine with Cask as well.  Just type selected commands in a terminal:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install caskroom/cask/brew-cask
brew tap caskroom/versions
brew cask install sublime-text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To verify if the installation was successful type: &lt;br&gt;
    subl -v&lt;/p&gt;

&lt;h1&gt;
  
  
  Node and NPM
&lt;/h1&gt;

&lt;p&gt;If you are working with JavaScript, node and npm is a must. The node package manager is used to install libraries/frameworks (node packages) on the command line to your project.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To verify if the installation was successful type: &lt;br&gt;
    node -v&lt;br&gt;
    npm -v&lt;/p&gt;

&lt;h1&gt;
  
  
  iTerm2
&lt;/h1&gt;

&lt;p&gt;MacOS and other OS’s already come with their own command line terminal tool. Thus, another command line tool is optional, but you might want to install iTerm2 because of various advantages. It comes with powerful integrations, beautiful themes and other useful utility tools that will enrich your daily toolset. Homebrew with Cask helps you to install it, just type: &lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew cask install iterm2&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Summary&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;That are all the basic tools you need to set up a development environment. Homebrew is used to install all the tools for you on the command line. Cask is used on top of Homebrew to install graphical user interfaces apps applications such as Chrome, iTerm2 and Sublime. The later stage you can choose any code editor as you want since you'll spend most of the time in it. As a JavaScript developer, there is no way around node and npm and thus you should install them with nvm to manage multiple node versions.  Git and GitHub should be used to handle your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Would you add anything to my list?
&lt;/h2&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Introduction to backend development for newbies!</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Wed, 27 Mar 2019 14:54:49 +0000</pubDate>
      <link>https://forem.com/iamrobert/introduction-to-backend-development-for-your-mother-k8k</link>
      <guid>https://forem.com/iamrobert/introduction-to-backend-development-for-your-mother-k8k</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In this article, I’ll cover a general introduction to backend development without a deep dive into the code. I’ll provide languages and frameworks that you can explore more. If you're is looking for more technical tutorials, follow me and check my other posts :)&lt;/p&gt;

&lt;p&gt;If you’re not a software developer terms like backend or front end development can give her a headache. Adding to that a long list of different tools, languages and frameworks it’ll confuse where to start. However, there’s good news - you don't need to learn coding to understand the basics. It’s helpful to know the basics of typical tech stack whether any developer is working around you.&lt;/p&gt;

&lt;p&gt;I've divided this article into few sections.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's start by agenda:
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;What is backend?&lt;/li&gt;
&lt;li&gt;API's &lt;/li&gt;
&lt;li&gt;Servers &lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Backend developer&lt;/li&gt;
&lt;li&gt;Backend languages&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  1. What is backend?
&lt;/h1&gt;

&lt;p&gt;Imagine a typical web application like your online banking service - what comes to your mind? You have the visual part which is created for human interaction and something behind. That’s the easiest way we can describe front end (the visible part - colours, animations, layout, and all the stuff that you can experience) below sample interface of a web application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8ka1iygc3dgba9q17hfj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8ka1iygc3dgba9q17hfj.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The backend is the internal engine of the application which includes things like the server, API and the database. The backend is often described as a “server-side” opposite to “client-side” or “browser side” where the client sends a request to the backend by clicking on a specific button. The backend is the machinery that works silently behind the scenes.&lt;/p&gt;

&lt;p&gt;A common backend is a mix of the server, APIs, databases and operating systems that power an application’s front end. Every app can use very different tools whether it’s the use of cloud-based servers and data warehouses, containerization with a service like Docker, APIs to replace more complex processing or Backend-as-a-Service providers. Below sample library app schema visualised with GraphQL Editor.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://graphqleditor.com" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fpracticaldev%2Fimage%2Ffetch%2Fs--6Rc0ZwMS--%2Fc_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880%2Fhttps%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fl712vn5w612l0qp2q6na.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To start things, we’ll break the server side down into four main components: the server, API, the database, the operating system, and the software. In the next chapters, we’ll explain more about each of these components of the backend.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. API's
&lt;/h1&gt;

&lt;p&gt;Technically, API stands for Application Programming Interface. In general terms, it's a set of clearly defined methods, rules and definitions of communication between applications. In terms of backend development, it's crucial to mention that backend and frontend are communicating via API. Good designed API makes it simpler to develop parts of the web app by providing all the blocks, which are then put together by developer. To give it context to our article API is a set of rules on how the frontend asks backend for data. &lt;/p&gt;

&lt;p&gt;The most popular standards for creating API for the web today are REST API GraphQL. Exploring GraphQL more we can say it is a query language for your API. The most important feature of GraphQL is that its language agnostic with its own rules and definitions. It’s not created to work with any specific technology. Below you can see an example of GraphQL with GraphQL Editor.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://graphqleditor.com" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fugns2181jhflvo4x7fne.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Servers
&lt;/h1&gt;

&lt;p&gt;When you type any domain into a web browser that means you type server address. If you go deeper into specific sections of that website, you’ll see that extended URL with additional details. This include folder path, subdirectory locations and specific file names. Let’s have a look at Google’s logo. This particular address contains precise information on where exactly on the server file exists.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.google.pl%2Fimages%2Fbranding%2Fgooglelogo%2F1x%2Fgooglelogo_color_272x92dp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.google.pl%2Fimages%2Fbranding%2Fgooglelogo%2F1x%2Fgooglelogo_color_272x92dp.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As part of other components, the server is the heart of the system. It could be located locally on your computer or in a modern way in the cloud. You can imagine a cloud as a group of connected computers. That network of computers can run various tasks including file storage, security and encryption, databases, email, and web services. The cheapest option of cloud servers is a shared virtual machine, a computer which are running many servers at the same time. More expensive one are dedicated machines which you can rent according to your needs. Virtualisation creates shared servers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F4q3kmwza9u70lwvsd9up.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F4q3kmwza9u70lwvsd9up.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The primary goal of virtualisation is to manage workloads by transforming traditional computing to make it more scalable. In operating system-level virtualisation, it is possible to run multiple operating systems on a single piece of hardware. Virtualisation technology involves separating the physical hardware and software by emulating device using the software.&lt;/p&gt;

&lt;p&gt;One of a popular lightweight alternative to virtualisation is containerization. Imagine catching application into a virtual container with its environment. It provides benefits of loading an application onto a virtual machine, as the application runs on any suitable physical computer without any worries. Containerization has gained recent fame with the open-source technology called Docker. Using containers, you can easily migrate apps between servers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fahunt11xiry0dbkr84r0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fahunt11xiry0dbkr84r0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you’ve got the basics about on-site servers, expand your knowledge with a look at virtualisation, how servers get provisioned to house multiple apps, and containerization, another way servers provision their operating systems out to house compartmentalised applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  4.Databases
&lt;/h1&gt;

&lt;p&gt;A database is the storage of a collection of data. That may sound overly naive, but it pretty much sums up what any database is. A database could be as primary as a text file with a list of names. Alternatively, it could be as complex as a large, relational database management system, complete with in-built tools to help you maintain the data.&lt;/p&gt;

&lt;p&gt;Any time you request something from a website or search a place to stay at Airbnb your front end sends a request to the database and creates a response. The data is transmitted back to the website, and you see the result of your actions. You can also update or edit data in your database from the visual interface. Imagine uploading pictures to Facebook or adding a description to your products in CMS.&lt;/p&gt;

&lt;p&gt;A Database Management System (DBMS), is a tool that enables the management and creation of databases. Today most database systems are referred to as a Relational-DBMS, because of their capacity to store related data across multiple tables. When more than two tables contain related data, they have a relationship. You design your database in a way that defines which tables will have to be related. Most popular relational DBMS include Microsoft Access, SQL Server, MySQL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fq0ezaxu0bitl2vkw23vv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fq0ezaxu0bitl2vkw23vv.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, to related databases we have NoSQL. It’s a comprehensive term that doesn’t describe any particular database type. It’s a group of databases that don’t fit into a relational model. Let’s explore some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Column store database,&lt;/li&gt;
&lt;li&gt;Graph databases that use a graphical model,&lt;/li&gt;
&lt;li&gt;Document store database that uses a document-oriented model,&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  5. Backend developer
&lt;/h1&gt;

&lt;p&gt;Back-end developers work with front-end developers by giving the outward facing web app elements of server-side logic. In other words, back-end dev’s create the business logic to make the web app work correctly, and they achieve this through the use of back end scripting languages. Some of the regular responsibilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing server-side code&lt;/li&gt;
&lt;li&gt;Interacting with the database&lt;/li&gt;
&lt;li&gt;Writing code to communicate with the database&lt;/li&gt;
&lt;li&gt;Deploying the system online so the app can be usable&lt;/li&gt;
&lt;li&gt;Maintaining security of the code&lt;/li&gt;
&lt;li&gt;Maintaining code to be optimised to handle large traffic volume&lt;/li&gt;
&lt;li&gt;Integrating server-side logic with front end&lt;/li&gt;
&lt;li&gt;Design and implementation of data storage solutions&lt;/li&gt;
&lt;li&gt;Building reusable code and libraries for future use&lt;/li&gt;
&lt;li&gt;Writing documentation for ease of use for new developers&lt;/li&gt;
&lt;li&gt;Back-end developers usually work in groups or teams. Within larger organisations,
there can be both back-end and front-end engineers, which can include engineers - with specific roles like REST API developers or quality assurance or architects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  6. Backend languages
&lt;/h1&gt;

&lt;p&gt;Back-end developers can learn a variety of languages and frameworks depending on the type of app they’re developing, its specific processing specifications, and what other components already exist on the back end.&lt;/p&gt;

&lt;p&gt;Languages will differ in file size, speed, adaptability, how many lines of code required, and the style of coding. Some back-end scripting languages are object-oriented, a method of programming that bundles properties and functions within objects. Different languages may be compiled rather than interpreted, something that affects load speed, readability, and processing power needed to run the app.&lt;/p&gt;

&lt;p&gt;Most of the sites are built on PHP, making it one of the most common back-end languages. However, there are plenty of others to choose from. You may want to use the processing power of Python for a data-driven site, or leverage the speed of lightweight languages like Ruby for quick prototyping. It’s up to you and your developers, and every language has its pros and typical applications.&lt;/p&gt;

&lt;p&gt;Take a look at a few of the other big hitters in back-end programming, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;C# and C++&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;Perl&lt;/li&gt;
&lt;li&gt;Scala&lt;/li&gt;
&lt;li&gt;Node.js (and JavaScript)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>explainlikeimfive</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Top tools for junior frontend developer</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Fri, 22 Mar 2019 12:33:47 +0000</pubDate>
      <link>https://forem.com/iamrobert/top-tools-for-junior-frontend-developer-49b1</link>
      <guid>https://forem.com/iamrobert/top-tools-for-junior-frontend-developer-49b1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;It's hard to choose what to learn when you're starting your journey as a frontend developer. There're plenty of sources, courses, tutorials or frameworks to choose from. You might get confused starting researching all above. One practical approach is a craftsman road where you learn the process by tools. I've created a list of top tools for junior frontend developer and explained why you should use them. Follow me to get more tutorials!&lt;/p&gt;

&lt;h1&gt;
  
  
  GitHub
&lt;/h1&gt;

&lt;p&gt;GitHub is a web-based hosting service for version control using Git. It offers all of the distributed version control and source code management (SCM) functionality of Git as well as adding its other features. It provides access control and several collaboration features such as bug tracking, feature requests, task management, and wikis for every project. Github is also a great community where you find and collaborate a lot of open source projects. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftklza76bbtxrd8v6n5p1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftklza76bbtxrd8v6n5p1.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Chrome Dev Tools
&lt;/h1&gt;

&lt;p&gt;It's a set of developer tools built into the Chrome browser. With DevTools you can access the internals of any web application, see how it performs on different screen sizes and change any page. You can edit pages real-time and diagnose problems quickly. It ultimately helps you build better websites and faster. Additional network tools can help you optimise your loading flows while a timeline gives you a knowledge of what the browser is doing at the moment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdevelopers.google.com%2Fweb%2Ftools%2Fchrome-devtools%2Fimages%2Fpanels%2Felements.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdevelopers.google.com%2Fweb%2Ftools%2Fchrome-devtools%2Fimages%2Fpanels%2Felements.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  React Developer Tools
&lt;/h1&gt;

&lt;p&gt;React is a popular javascript framework among web development last years.  However, Google Chrome Developer tools cannot examine the Dom as React Components. Don’t be confused; there is a Chrome Extension called React Developer Tools that allows you to get into the nitty-gritty of how data is passed through components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://camo.githubusercontent.com/3fd1137b6b254da8c5596acf7b8583246fd76e29/687474703a2f2f692e696d6775722e636f6d2f6a5969655271692e706e67" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/3fd1137b6b254da8c5596acf7b8583246fd76e29/687474703a2f2f692e696d6775722e636f6d2f6a5969655271692e706e67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Pixel Perfect
&lt;/h1&gt;

&lt;p&gt;This chrome extension helps develop your websites with per-pixel sharpness! It's for web developers and markup designers. PerfectPixel allows developers to put a half-transparent image overlay over the top of the developed HTML and perform pixel perfect comparison among them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febmm4bjwebhokwwlc0ej.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febmm4bjwebhokwwlc0ej.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Visual Code Editor
&lt;/h1&gt;

&lt;p&gt;Visual Studio Code is the number one code editor for building and debugging modern web and cloud applications. It’s very customizable, has built-in git, massive list of integrations, powerful autocomplete and debugging features. It’s a powerful multilanguage IDE, super fast and simple. Also, free an open source. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdegyqqyav3dnxzdpvhry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdegyqqyav3dnxzdpvhry.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Codepen
&lt;/h1&gt;

&lt;p&gt;Codepen it’s amazing web-based and community-driven code editor. You can see right away results of code. It’s a magic place for designers and front end developers where people are sharing and commenting on their front end skills.  It’s a great source of inspiration for new ideas and ways to code.  The editor is used for: prototyping new ideas, instant bug testing, sending clients things to look at, evaluating potential hires and finding inspiration. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.codepen.io%2Fassets%2Fmarketing%2Fhello%2Fhello-browser-bd23691acba31be3db5b047016aea401492370da573c63da78eb472903dd9bcf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.codepen.io%2Fassets%2Fmarketing%2Fhello%2Fhello-browser-bd23691acba31be3db5b047016aea401492370da573c63da78eb472903dd9bcf.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  GraphQL and GraphQL Editor
&lt;/h1&gt;

&lt;p&gt;GraphQL is a query language for APIs. It's very trendy nowadays and recognised by leading tech organisations. GraphQL Editor makes understanding GraphQL schema a lot easier. Plan it out by linking visual blocks and our editor will transform them into a code! Create fake backend out of GraphQL, and you could power up your application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.graphqleditor.com/demo/blog-sample" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qc1kssdcspdrpyker4b.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Npm
&lt;/h1&gt;

&lt;p&gt;It's a package manager for JS. It helps to find packages of reusable code and compile them in new ways. It has over 470,000 free code packages in the database to be used by you. This web dev tool is a command-line utility for interacting with a repository that aids in the package. It also has team features with your private namespace.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub4r11wl49owon0w28sa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fub4r11wl49owon0w28sa.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Webpack
&lt;/h1&gt;

&lt;p&gt;It's a bundler for javascript and friends which packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through "loaders", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, CoffeeScript, LESS, ... and your custom stuff.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fscotch-res.cloudinary.com%2Fimage%2Fupload%2Fdpr_3%2Cw_350%2Cq_auto%3Agood%2Cf_auto%2Fmedia%2F5000%2FUsIrFFPwStmuuAaidk7k_Screen%2520Shot%25202017-11-30%2520at%25204.28.18%2520AM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fscotch-res.cloudinary.com%2Fimage%2Fupload%2Fdpr_3%2Cw_350%2Cq_auto%3Agood%2Cf_auto%2Fmedia%2F5000%2FUsIrFFPwStmuuAaidk7k_Screen%2520Shot%25202017-11-30%2520at%25204.28.18%2520AM.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Figma
&lt;/h1&gt;

&lt;p&gt;Figma is a design app but very trendy and good to collaborate with designers. Every Figma file has Code Mode where a developer can inspect design files. When designer share view-only files with the developer, he will have access to Code Mode where they can examine, comment, and export without having full edit access to the files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ame7639znsv22wpde6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ame7639znsv22wpde6m.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Web.dev
&lt;/h1&gt;

&lt;p&gt;Every web project needs proper feedback and testing. With this tool, you can check how your website performs according to modern standards. You can measure things: performance, PWA status, accessibility or SEO. Also, you can practice skills: like load speed, network resilience or data security. Check how your website performs over time, and keep track as you learn on your schedule. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckyhaa7bkcrrpw1y4bpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckyhaa7bkcrrpw1y4bpv.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Terminal
&lt;/h1&gt;

&lt;p&gt;A terminal is a text-based interface you can type your commands in. A shell takes these commands and tells the operating system to execute them. Getting familiar with tools like Git from the terminal gives you more power and flexibility over GUI. In the end, a GUI is a graphical shell in front of a command-line tool. Being “closer to the metal”, it can also help you to get out of trouble in case a GUI is stuck or messed up. It's an essential productivity tool in a developer's arsenal. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6h9gnjyho9vbfewb1bz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6h9gnjyho9vbfewb1bz.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Others
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Caniuse.com - are you worried about browser compatibility for some cutting edge ideas? Try this site and see if you can use it. &lt;/li&gt;
&lt;li&gt;StackOverflow - that site doesn't need explanation ;)&lt;/li&gt;
&lt;li&gt;TinyPNG- Advanced lossy compression for PNG images&lt;/li&gt;
&lt;li&gt;Compressor.io - another image compression tool&lt;/li&gt;
&lt;li&gt;Notion.so -  recording notes, specs, product owner feedback and planning.&lt;/li&gt;
&lt;li&gt;Postman - when working with REST APIs.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>GraphQL tutorial for newbies - cheatsheet</title>
      <dc:creator>Robert Matyszewski</dc:creator>
      <pubDate>Wed, 20 Mar 2019 13:31:12 +0000</pubDate>
      <link>https://forem.com/iamrobert/graphql-tutorial-for-newbies---cheatsheet-gb5</link>
      <guid>https://forem.com/iamrobert/graphql-tutorial-for-newbies---cheatsheet-gb5</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I'm a founder of a &lt;a href="https://graphqleditor.com" rel="noopener noreferrer"&gt;Visual Editor for GraphQL&lt;/a&gt;. This blog post is part of a tutorial for newbies. Follow me to get more and check other articles. I’ve already covered basics of GraphQL, introduction and Schema Definition Language. Feel free to comment, suggest changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type definitions
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scalar &amp;gt; Scalar type
type &amp;gt; Object type
interface &amp;gt; Interface type
union &amp;gt; Union type
enum &amp;gt; Enumerable type
input &amp;gt; Input object type
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://app.graphqleditor.com/demo/blog-sample" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbm922b6d43jewv4xuin2.gif"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;h2&gt;
  
  
  Scalar types
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String - set of characters in UTF-8 format,
Int - 32-bit integer,
Float - floating point number,
Boolean - value true or false
ID - a type representing the unique identifier for the object.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://app.graphqleditor.com/demo/blog-sample" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F9qkmgenwzdztc7qapfdz.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Type modifiers
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String &amp;gt; Nullable string
String! &amp;gt; Required string
[String] &amp;gt; List of strings
[String]! &amp;gt; Required list of strings
[String!]! &amp;gt; Required list of required strings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://app.graphqleditor.com" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fup4unchhdvecrcdibcs6.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Example of a GraphQL schema
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Author {
  id: Int!
  firstName: String
  lastName: String
  """
  the list of Books by this author
  """
  books: [Book]
}
type Book {
  id: Int!
  title: String
  author: Author
  pages: Int
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Explore this example in our &lt;a href="https://graphqleditor.com" rel="noopener noreferrer"&gt;Visual Editor for GraphQL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.graphqleditor.com/demo/blog-sample2" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fucysz7rlgk5rsxpm1pit.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  This schema allows the following query:
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Query {
  book: [Book]
  author(id: Int!): Author
}  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Input Arguments
&lt;/h2&gt;
&lt;h1&gt;
  
  
  Basic Input
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Root {
  users(limit: Int): [User]!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Input with default value
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Root {
  users(limit: Int = 10): [User]!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Input with multiple args
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Root {
  users(limit: Int, sort: String): [User]!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Input with multiple args and default values
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Root {
  users(limit: Int = 10, sort: String): [User]!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  or
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Root {
  users(limit: Int, sort: String = "asc" ): [User]!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Interfaces
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface Publication {
  title: String!
  releasedDate: String!
}
type Magazine implements Publication {
  title: String!
  releasedDate: String!
  version: Int!
}  
type Book implements Publication {
  title: String!
  releasedDate: String!
  pages: Int!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Unions
&lt;/h1&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;union SearchResult = Book | Author

type Query {
  search(text: String!): SearchResult
}

query {
  search(text: "Park") {
    ... on Book {
      title
    }
    ... on Author {
      name
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Enums
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;enum RGB {
  RED
  GREEN
  BLUE
}
type Root {
  color: RGB
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Input Object Types
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;input ListUsersInput {
  limit: Int 
  since_id: ID
}
type Root {
  users(params: ListUsersInput): [Users]!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you're looking for best graphql tutorials check this &lt;a href="https://blog.graphqleditor.com/top-graphql-tutorials-reviewed-2019" rel="noopener noreferrer"&gt;post&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
