<?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>DEV Community: Jem </title>
    <description>The latest articles on DEV Community by Jem  (@jem).</description>
    <link>https://dev.to/jem</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%2F168222%2F46cc9868-1e79-4b4d-82b1-abe764641392.jpg</url>
      <title>DEV Community: Jem </title>
      <link>https://dev.to/jem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jem"/>
    <language>en</language>
    <item>
      <title>Graphile Worker 0.16 released — reliable, extensible and performant</title>
      <dc:creator>Jem </dc:creator>
      <pubDate>Mon, 11 Dec 2023 15:08:59 +0000</pubDate>
      <link>https://dev.to/graphile/graphile-worker-016-released-reliable-extensible-and-performant-541k</link>
      <guid>https://dev.to/graphile/graphile-worker-016-released-reliable-extensible-and-performant-541k</guid>
      <description>&lt;p&gt;Worker 0.16 is here — freshly updated with optional TypeScript typing for tasks, a public &lt;code&gt;jobs&lt;/code&gt; interface, a new plugin system, and much more besides!&lt;/p&gt;

&lt;p&gt;The new plugin system enables ESM and CommonJS to peacefully coexist, adds support for writing tasks in &lt;code&gt;import()&lt;/code&gt;–capable compile–to–JS languages like TypeScript, adds support for writing tasks in alternative languages (e.g. Python, Ruby, Rust), and could open the door to a lot more customizability in future! Version 0.16 also introduces support for “Worker Pro” — a plugin available to most Sponsors which monitors running workers, releases locked jobs workers that exit uncleanly, helps ease migrations to new releases, and will add more quality–of–life improvements in time. &lt;/p&gt;

&lt;p&gt;We’ve backported a large amount of v0.16’s functionality to v0.13 and v0.15; this includes plugin and Worker Pro support to ease migration to the new version.&lt;/p&gt;

&lt;p&gt;Thank you to each and every one of our sponsors, together you have made this massive release possible!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flh24ykpjjeaac4cnbbov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flh24ykpjjeaac4cnbbov.png" alt="Three little ants crawling across the page" width="129" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s new in Version 0.16?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Graphile Worker gets a logo!
&lt;/h4&gt;

&lt;p&gt;Inspired by the Graphile heart and the PostGraphile elephant, Graphile Worker gets its new heart–shaped worker–ant logo. We admire the industriousness of rainforest leaf–cutter ants, relentlessly working away traversing miles of branches to bring food and messages back to their colony. What better animal to represent the spirit of Graphile Worker? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fj5at6pf2uumk21l69wu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fj5at6pf2uumk21l69wu9.png" alt="The new Graphile Worker logo is an ant face" width="600" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  New Graphile Worker website!
&lt;/h4&gt;

&lt;p&gt;As Graphile Worker's featureset has been growing, managing it all through a README has become challenging, both for users and for maintenance. We've moved all the documentation to a new website and spent some time overhauling it with new tips and notes (and corrections). Check it out at &lt;a href="https://worker.graphile.org" rel="noopener noreferrer"&gt;https://worker.graphile.org&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Graphile Config and the new plug-in system
&lt;/h4&gt;

&lt;p&gt;Worker is now optionally configurable with &lt;a href="https://worker.graphile.org/docs/config/" rel="noopener noreferrer"&gt;Graphile Config&lt;/a&gt;. This enables a whole suite of new options and features, not the least of which is you can now share preset files across multiple projects! Graphile Config takes everything we’ve learned from the PostGraphile project relating to configuration and plugins and expands these capabilities into a generic system that Worker can leverage. The plumbing has been completed, the initial hooks are there and ready to be used by everyone to make Worker even more adaptable and powerful than ever before. If you need to do something that there’s not a hook for yet, adding a suitable one is likely straightforward… get in touch for guidance!&lt;/p&gt;

&lt;h4&gt;
  
  
  Native ESM support!
&lt;/h4&gt;

&lt;p&gt;The first thing we did with the new plugin system was to move the code for loading a task into its own plugin, and add support for loading both CommonJS files and ESM files. Since it’s a plugin, you can replace it entirely, loading tasks in any way you see fit!&lt;/p&gt;

&lt;h4&gt;
  
  
  Compile–to–JS language support!
&lt;/h4&gt;

&lt;p&gt;With the plugin mentioned above you can add more file extensions to your config for any “compile–to–javascript” language that can be &lt;code&gt;import()&lt;/code&gt;–ed — just be sure to make the relevant “loaders” available, e.g. for native TypeScript support you might use &lt;code&gt;NODE_OPTIONS="--loader ts-node/esm" npx graphile-worker&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Tasks in even more languages!
&lt;/h4&gt;

&lt;p&gt;And the fun doesn't stop there! We've added another built–in plugin that allows us to offer support for writing task executors in other languages entirely: python, bash, even &lt;em&gt;fortran&lt;/em&gt;; choose whichever language makes the most sense for the task at hand. All you need to do is place an executable file in the &lt;code&gt;tasks/&lt;/code&gt; folder and ensure it's named with the task identifier (extensions are ignored).&lt;/p&gt;

&lt;h4&gt;
  
  
  abortSignal
&lt;/h4&gt;

&lt;p&gt;We have added the JavaScript pattern of &lt;code&gt;abortSignal&lt;/code&gt; — a new ability to tell tasks to abort during shutdown. This means no more waiting for the task to complete during a graceful shutdown, so long as your task executor remembers to listen for the  &lt;code&gt;abortSignal&lt;/code&gt; your job can exit quickly when the worker is shutting down, and boot up again soon thereafter on a different worker.&lt;/p&gt;

&lt;h4&gt;
  
  
  Opt–in TypeScript typing of tasks
&lt;/h4&gt;

&lt;p&gt;Now you can take down the guard rails, and &lt;em&gt;assume&lt;/em&gt; the job type using the new &lt;code&gt;GraphileWorker.Tasks&lt;/code&gt; global interface. This is not for the faint of heart, and in fact we don’t generally recommend it! But it has been requested many times, and now it is available to use via a public–facing declaration–mergeable interface. Declaring a global task interface allows you to use auto–complete and payload safety for &lt;code&gt;addJob&lt;/code&gt; and &lt;code&gt;quickAddJob&lt;/code&gt;, and specifies the assumed types of the payloads of your task functions. More, including important caveats, can be found &lt;a href="https://worker.graphile.org/docs/typescript" rel="noopener noreferrer"&gt;in our documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/KEP1acj29-Y?si=4UDpo9oLW5zbrvnh&amp;amp;t=41" rel="noopener noreferrer"&gt;&lt;img src="https://media2.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%2Fqjgqw5ay40xvy79ljo3l.jpg" alt="Felix Unger from the Odd Couple shows the word assume makes an ass out of u and me." width="800" height="511"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Remember the caveats of &lt;a href="https://youtu.be/KEP1acj29-Y?si=4UDpo9oLW5zbrvnh&amp;amp;t=41" rel="noopener noreferrer"&gt;what it means to assume…&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Public jobs view
&lt;/h4&gt;

&lt;p&gt;This release makes it much clearer that the tables in which jobs and queues are stored are private implementation details — Graphile Worker needs to be able to change these tables to add new features or perform optimizations. For those users who look into the jobs table, even though we advise against it, we've created a public view that presents a stable interface into the queued jobs. We strongly advise against polling this, it will impact the performance of your worker, but it is now more suitable for usage in automated scripts since the interface is stable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Worker Pro: upgrade your experience!
&lt;/h4&gt;

&lt;p&gt;With thanks to each and every sponsor (past and present) for reinvesting back into open source, the growth of our community–based funding over the last six years has enabled us to spend more and more time maintaining and improving our &lt;a href="https://graphile.org" rel="noopener noreferrer"&gt;various open source packages&lt;/a&gt;. These past few months we're grateful to welcome Trigger.dev and Seam as the latest in the organizations reinvesting in the software they use — thank you! &lt;/p&gt;

&lt;p&gt;Alas, a significant amount of our maintenance and development time is still self–funded; so in an attempt to make this project more sustainable, we have introduced the proprietary Worker Pro plugin, and initially made it available to sponsors on the $25/mo tier and above.&lt;/p&gt;

&lt;p&gt;Worker Pro adds worker tracking to Graphile Worker, making it a clean separation from the open source version which does not track the individual workers. With Worker Pro, each worker checks in with a "heartbeat" every so often, and we can use this in various ways.&lt;/p&gt;

&lt;p&gt;For example, we have had feedback from the community that having to stop all workers in advance of updating to a new release is not ideal. With Worker Pro, before performing a breaking migration a graceful shutdown of all old workers is triggered, and further old workers are prevented from starting up. Once Worker Pro has confirmed all old workers have completed their graceful shutdowns, the migration can go ahead with significantly reduced risk of conflict. This avoids the need to “scale to zero” as all workers will communicate with each other to help the system as a whole remain consistent, and the newly running workers can gracefully take over from the old.&lt;/p&gt;

&lt;p&gt;This new plugin also helps with crashed worker recovery: once a configurable amount of time has passed without receiving a heartbeat from a registered worker, Worker Pro can assume that the worker is no longer running (power pulled, killed, crashed, etc) and release all of its locked jobs to be re–attempted.&lt;/p&gt;

&lt;p&gt;There are a couple more major features planned for “Worker Pro”, and once they are added it will be available via the $100 sponsorship tier. Now is a great time to &lt;a href="https://graphile.org/sponsor" rel="noopener noreferrer"&gt;sponsor Graphile&lt;/a&gt; and lock in this awesome 75% discount launch offer for at least 18 months! &lt;/p&gt;

&lt;p&gt;To get access to “Worker Pro”, please reach out to Benjie or Jem on Discord or email team [at] graphile [dot] org — for the introductory offer you must ensure you have access before the price goes up!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Join our community — we run &lt;a href="https://discord.gg/graphile" rel="noopener noreferrer"&gt;a Discord server&lt;/a&gt; which can be used for community support and to chat to others using the Graphile suite of developer tools. Find out how to sponsor us on &lt;a href="[https://graphile.org/sponsor](https://graphile.org/sponsor)"&gt;graphile.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full release notes found &lt;a href="https://worker.graphile.org/releases/" rel="noopener noreferrer"&gt;on the new Worker website&lt;/a&gt; or &lt;a href="https://github.com/graphile/worker/blob/main/RELEASE_NOTES.md" rel="noopener noreferrer"&gt;at GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ffv8601lrwrkn01uj9zic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ffv8601lrwrkn01uj9zic.png" alt="A handdrawn image of an ant holding up a green heart" width="650" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you Graphile sponsors!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>opensource</category>
      <category>queues</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Dev tools for databases, what is out there?</title>
      <dc:creator>Jem </dc:creator>
      <pubDate>Wed, 19 Aug 2020 13:50:08 +0000</pubDate>
      <link>https://dev.to/jem/dev-tools-for-databases-what-is-out-there-23ah</link>
      <guid>https://dev.to/jem/dev-tools-for-databases-what-is-out-there-23ah</guid>
      <description>&lt;p&gt;I've been spending a lot of my time this month thinking about databases and dev tooling. What's out there in this space? How do you know you're getting the best performance or security out of your database?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>database</category>
      <category>devtools</category>
      <category>security</category>
    </item>
    <item>
      <title>Get Started with Graphile</title>
      <dc:creator>Jem </dc:creator>
      <pubDate>Fri, 13 Dec 2019 14:31:41 +0000</pubDate>
      <link>https://dev.to/graphile/get-started-with-graphile-1ae</link>
      <guid>https://dev.to/graphile/get-started-with-graphile-1ae</guid>
      <description>&lt;p&gt;Last week, &lt;a href="https://www.twitter.com/Benjie" rel="noopener noreferrer"&gt;Benjie&lt;/a&gt; and I were very excited to unleash &lt;a href="https://github.com/graphile/starter" rel="noopener noreferrer"&gt;Graphile Starter&lt;/a&gt; on the world. This project is a gathering of many of our GraphQL &amp;amp; Postges tools, paired with Next.js and the AntD design framework to give developers a solid foundation for their React GraphQL apps.&lt;/p&gt;

&lt;p&gt;In next to no time you can get a basic app running, with React routing, a user account system, a basic design framework, the beginnings of a Postgres database with associated migration system and much, much more - all under the MIT license so you can take what you want and continue building as much as you like without having to worry about any restrictions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're already familiar with React&lt;/strong&gt;, then this is a great project to take and play with. You can use it for a fun side-project or a hack day, but it's also ready for agencies to quickly build their SaaS apps or client projects.&lt;/p&gt;

&lt;p&gt;The entire project is hosted on GitHub, take a look below:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/graphile" rel="noopener noreferrer"&gt;
        graphile
      &lt;/a&gt; / &lt;a href="https://github.com/graphile/starter" rel="noopener noreferrer"&gt;
        starter
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Opinionated SaaS quick-start with pre-built user account and organization system for full-stack application development in React, Node.js, GraphQL and PostgreSQL. Powered by PostGraphile, TypeScript, Apollo Client, Graphile Worker, Graphile Migrate, GraphQL Code Generator, Ant Design and Next.js
    &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;Graphile Starter&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Take it for a spin!&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;We're running the starter at:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://graphile-starter.herokuapp.com" rel="nofollow noopener noreferrer"&gt;https://graphile-starter.herokuapp.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Feel free to register an account and have a poke around as you see fit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: emails are sent from Graphile Starter, so please only enter email
addresses you control.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: every time we merge to master, we ship a new version of Graphile
Starter to Heroku and entirely wipe the database, so your data may not persist
If you wish to delete your data before this time you can do so via the delete
account feature baked into the starter.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;NOT FOR BEGINNERS&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;We do not advise that you build your own projects on top of this project until
you're comfortable with the various tools it uses
(&lt;a href="https://nodejs.org/en/docs/" rel="nofollow noopener noreferrer"&gt;Node.js&lt;/a&gt;
&lt;a href="https://expressjs.com/en/api.html" rel="nofollow noopener noreferrer"&gt;Express&lt;/a&gt;,
&lt;a href="https://www.postgresql.org/docs/current/index.html" rel="nofollow noopener noreferrer"&gt;PostgreSQL&lt;/a&gt;,
&lt;a href="https://graphql.org/learn/" rel="nofollow noopener noreferrer"&gt;GraphQL&lt;/a&gt;,
&lt;a href="https://www.graphile.org/postgraphile/introduction/" rel="nofollow noopener noreferrer"&gt;PostGraphile&lt;/a&gt;,
&lt;a href="https://github.com/graphile/worker" rel="noopener noreferrer"&gt;Graphile Worker&lt;/a&gt;,
&lt;a href="https://github.com/graphile/migrate" rel="noopener noreferrer"&gt;Graphile Migrate&lt;/a&gt;,
&lt;a href="https://www.typescriptlang.org/docs/" rel="nofollow noopener noreferrer"&gt;TypeScript&lt;/a&gt;,
&lt;a href="https://reactjs.org/docs/getting-started.html" rel="nofollow noopener noreferrer"&gt;React&lt;/a&gt;,
&lt;a href="https://www.apollographql.com/docs/react/" rel="nofollow noopener noreferrer"&gt;Apollo Client for React&lt;/a&gt;,
&lt;a href="https://github.com/dotansimha/graphql-code-generator" rel="noopener noreferrer"&gt;GraphQL&lt;/a&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/graphile/starter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Let's have a look at how to get it up and running! For this guide I'll be using VSCode, as the Starter has some handy editor and debugger settings as well as plugin recommendations built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download and set up
&lt;/h2&gt;

&lt;p&gt;First, visit the GitHub repo and download the latest zip file from the &lt;a href="https://github.com/graphile/starter/releases" rel="noopener noreferrer"&gt;"Releases" tab&lt;/a&gt;. This tab is sometimes hard to see, I often spend minutes looking for it and I help maintain the Graphile repos! You'll find it nestled in all the tabs at the top of the file list. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1i7kf9rqc3iouqc81jhc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1i7kf9rqc3iouqc81jhc.png" alt="The Releases tab is in among all the others at the top of the file list" width="800" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Extract the zip file into a new folder and then open it in VSCode. You'll see VSCode give a couple of warning dialog boxes, but these can be ignored to begin with. &lt;/p&gt;

&lt;h3&gt;
  
  
  Initialise version control
&lt;/h3&gt;

&lt;p&gt;Open a terminal pane and add version control to your project by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
git add .
git commit -m "Graphile Starter base"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install yarn
&lt;/h3&gt;

&lt;p&gt;Next, you need to install yarn if you don't already have it. Yarn is similar to npm - in fact installing yarn using npm is akin to downloading Firefox using Microsoft Edge. Graphile Starter uses yarn as it has smaller overheads and leads to better performance in the project. Install yarn using &lt;code&gt;npm install -g yarn&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run setup script
&lt;/h3&gt;

&lt;p&gt;Now is the time to set up your Graphile environment by running &lt;code&gt;yarn setup&lt;/code&gt;. This command will take you through a few questions to set everything up for you. It'll ask for a database name, a hostname, and a superuser connection string. All of these have defaults so you can just press enter for each question, if you like.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzm92jj6rk0c26fms8icu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzm92jj6rk0c26fms8icu.png" alt="Screen grab of the setup script in action" width="800" height="80"&gt;&lt;/a&gt;A few set up questions in your terminal, the answers you give are bright blue and the default answer is grey&lt;/p&gt;

&lt;p&gt;After running the script, you'll see that a node modules folder has been added to your file list, and the &lt;code&gt;/data/&lt;/code&gt; folder will show that it has been modified - this is where the database schema has been updated with your answers to the setup questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Address VSCode dialog boxes
&lt;/h3&gt;

&lt;p&gt;You'll notice that VSCode opens some dialog boxes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ft0d45gf195rusmdnfm73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ft0d45gf195rusmdnfm73.png" alt="VSCode docker suggestion" width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one is about using Docker with the Starter project. To continue using the Starter locally, you can press "Don't show again". The project includes a docker folder with some setup. If you're interested in this, &lt;a href="https://github.com/graphile/starter/tree/master/docker" rel="noopener noreferrer"&gt;visit the Docker read me on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fv7yo7eram5i0grukcpa3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fv7yo7eram5i0grukcpa3.png" alt="VSCode plugin recommendation" width="800" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one says there are VSCode plugin recommendations associated with the project. If you press "Show Recommendations", a sidebar will open with all the listed plugins. You can then choose which of these to install by pressing the green install button. &lt;/p&gt;

&lt;p&gt;The recommendations are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Debugger for Chrome&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;Apollo GraphQL&lt;/li&gt;
&lt;li&gt;Remote Development (only for Docker development)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are all handy for formatting, highlighting and debugging your code. They aren't strictly needed, but they will enhance your experience of using the Starter project within VSCode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start your server
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;yarn start&lt;/code&gt; in your terminal. &lt;/p&gt;

&lt;p&gt;After a little while, you'll be able to visit your localhost address in your browser and see the Starter app in action! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsklwpw4o39ahauohvhlm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsklwpw4o39ahauohvhlm.png" alt="Starter App" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll see that the Starter already includes a user account system, including things like sending out verification emails. There is a design framework included, known as &lt;a href="https://ant.design/docs/spec/introduce" rel="noopener noreferrer"&gt;AntD&lt;/a&gt; and the React routing and server side rendering is handled by &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visit &lt;code&gt;/graphiql&lt;/code&gt; and you'll get the PostGraphiQL IDE - a handy tool which lets you explore your GraphQL schema. There is already a very basic one included which handles the user accounts system. As you write your application's schema, you'll be able to visually explore it and draft GraphQL queries and mutations using this tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjzbif8zb5vaem2vx05z2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjzbif8zb5vaem2vx05z2.png" alt="GraphiQL" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Make it yours
&lt;/h2&gt;

&lt;p&gt;Now you're all set to make this project all yours! Take some time to read through the extensive &lt;a href="https://github.com/graphile/starter" rel="noopener noreferrer"&gt;readme&lt;/a&gt; or some of the pointers on the &lt;code&gt;localhost&lt;/code&gt; version of the project homepage. Next you'll want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the project name in package.json&lt;/li&gt;
&lt;li&gt;Change the project settings in @app/config/src/index.ts&lt;/li&gt;
&lt;li&gt;Replace the README.md file with your own&lt;/li&gt;
&lt;li&gt;Add your own copyright notices to the LICENSE.md file&lt;/li&gt;
&lt;li&gt;Commit to git as you usually would&lt;/li&gt;
&lt;li&gt;✨&lt;a href="https://www.graphile.org/sponsor/" rel="noopener noreferrer"&gt;Sponsor Graphile&lt;/a&gt; 😉&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are so excited to release this project out into the world. If you want to get in contact about anything, please leave a comment or join our &lt;a href="https://discord.gg/graphile" rel="noopener noreferrer"&gt;supportive Discord chat server&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope you enjoy this project, and 🥂here's to rapid development without the boilerplate🥂&lt;/p&gt;

</description>
      <category>graphile</category>
      <category>graphql</category>
      <category>react</category>
    </item>
  </channel>
</rss>
