gjtorikian / html-proofer

Test your rendered HTML files to make sure they're accurate.
MIT License
1.57k stars 198 forks source link

hash ref's on the same page aren't found #725

Closed jamespohalloran closed 2 years ago

jamespohalloran commented 2 years ago

My htmlproofer check is failing on hash links to the same page.

Getting the following errors:

  • At ./out/docs/cli-overview/index.html:312: internally linking to #init; the file exists, but the hash 'init' does not

You can see that the hash in the link does in fact exist at: https://tina.io/docs/cli-overview/#init

Setup

I'm using the following config:

arguments: --only_4xx --assume_extension --checks "Links,Images,Scripts,Favicon,OpenGraph" --ignore_status_codes "400, 403, 409, 429" --allow_hash_href --ignore_files "/.+\/(blog|404)\/.+/"

htmlproofer 4.0.1

gjtorikian commented 2 years ago

Unfortunately, it looks like Tina's website uses Javascript to add anchor tags. html-proofer only works on static site generators which produce their HTML beforehead.

When I look at the website's source, there's no reference to a id="tina". There is, however, a big JSON props hash which I assume is what constructs the anchors and the rest of the page.

jamespohalloran commented 2 years ago

So the site is built with NextJS, and the html is built built statically. This has always worked in the past with this package, until the latest 4.0.1 release

Here's the output for this file (it's ugly, but it does have a id="init" element (in your comment you mentioned id="tina", not sure if you searched for the wrong element )):

<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@tina_cms"/><meta name="twitter:creator" content="@tina_cms"/><meta property="og:type" content="website"/><meta property="og:locale" content="en_CA"/><meta property="og:site_name" content="Tina"/><link rel="shortcut icon" href="/favicon/favicon.ico"/><meta name="theme-color" content="#E6FAF8"/><script async="" src="https://www.googletagmanager.com/gtag/js?id=undefined"></script><script>
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());
            gtag('config', 'undefined', {
              page_path: window.location.pathname,
            });
          </script><title>The TinaCMS CLI | TinaCMS Docs</title><meta name="description" content=" Available Commands Basic Usage: init The init command must be run inside of a Next.js project This will, Install all of the dependencies you need Setup a basic content model in your schema.ts file&amp;hellip;"/><meta property="og:title" content="The TinaCMS CLI"/><meta property="og:description" content=" Available Commands Basic Usage: init The init command must be run inside of a Next.js project This will, Install all of the dependencies you need Setup a basic content model in your schema.ts file&amp;hellip;"/><meta property="og:image" content="https://res.cloudinary.com/forestry-demo/image/upload/l_text:tuner-regular.ttf_90_center:The%20TinaCMS%20CLI,g_center,x_0,y_50,w_850,c_fit,co_rgb:EC4815/v1581087220/TinaCMS/tinacms-social-empty-docs.png"/><meta property="og:image:alt" content="The TinaCMS CLI| TinaCMS Docs"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="628"/><meta name="robots" content="index,follow"/><meta name="googlebot" content="index,follow"/><meta property="og:url" content="https://tinacms.org/docs/cli-overview/"/><meta name="next-head-count" content="23"/><link rel="preload" href="/_next/static/css/4079ef4fc0dadb01.css" as="style"/><link rel="stylesheet" href="/_next/static/css/4079ef4fc0dadb01.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-5cd94c89d3acac5f.js"></script><script src="/_next/static/chunks/webpack-da87bf65ff0de540.js" defer=""></script><script src="/_next/static/chunks/framework-e4cb7b821148caf4.js" defer=""></script><script src="/_next/static/chunks/main-d3fa11b7f09200ca.js" defer=""></script><script src="/_next/static/chunks/pages/_app-9d4d4d75cc755d6f.js" defer=""></script><script src="/_next/static/chunks/1a48c3c1-56b0057cfca2f75c.js" defer=""></script><script src="/_next/static/chunks/943-4681da6861645f0a.js" defer=""></script><script src="/_next/static/chunks/82-6b3dcca5798197a6.js" defer=""></script><script src="/_next/static/chunks/63-a975ee6c44461a04.js" defer=""></script><script src="/_next/static/chunks/pages/docs/%5B...slug%5D-c55217f8610cf38a.js" defer=""></script><script src="/_next/static/6YFZ1_rI2Dy0VA1F87LGU/_buildManifest.js" defer=""></script><script src="/_next/static/6YFZ1_rI2Dy0VA1F87LGU/_ssgManifest.js" defer=""></script><script src="/_next/static/6YFZ1_rI2Dy0VA1F87LGU/_middlewareManifest.js" defer=""></script><style data-styled="" data-styled-version="5.3.3">:root{--tina-color-primary-light:#2296fe;--tina-color-primary:#2296fe;--tina-color-primary-dark:#0574e4;--tina-color-error-light:#eb6337;--tina-color-error:#ec4815;--tina-color-error-dark:#dc4419;--tina-color-warning-light:#f5e06e;--tina-color-warning:#e9d050;--tina-color-warning-dark:#d3ba38;--tina-color-success-light:#57c355;--tina-color-success:#3cad3a;--tina-color-success-dark:#249a21;--tina-color-grey-0:#ffffff;--tina-color-grey-1:#f6f6f9;--tina-color-grey-2:#edecf3;--tina-color-grey-3:#e1ddec;--tina-color-grey-4:#b2adbe;--tina-color-grey-5:#918c9e;--tina-color-grey-6:#716c7f;--tina-color-grey-7:#565165;--tina-color-grey-8:#433e52;--tina-color-grey-9:#363145;--tina-color-grey-10:#282828;--tina-radius-small:5px;--tina-radius-big:24px;--tina-padding-small:12px;--tina-padding-big:20px;--tina-font-size-0:12px;--tina-font-size-1:13px;--tina-font-size-2:15px;--tina-font-size-3:16px;--tina-font-size-4:18px;--tina-font-size-5:20px;--tina-font-size-6:22px;--tina-font-size-7:26px;--tina-font-size-8:32px;--tina-font-family:'Inter',sans-serif;--tina-font-weight-regular:400;--tina-font-weight-bold:600;--tina-shadow-big:0px 2px 3px rgba(0,0,0,0.05), 0 4px 12px rgba(0,0,0,0.1);--tina-shadow-small:0px 2px 3px rgba(0,0,0,0.12);--tina-timing-short:85ms;--tina-timing-medium:150ms;--tina-timing-long:250ms;--tina-z-index-0:500;--tina-z-index-1:1000;--tina-z-index-2:1500;--tina-z-index-3:2000;--tina-z-index-4:2500;--tina-z-index-5:3000;--tina-sidebar-width:340px;--tina-sidebar-header-height:60px;--tina-toolbar-height:62px;}/*!sc*/
data-styled.g1[id="sc-global-gTiHxx1"]{content:"sc-global-gTiHxx1,"}/*!sc*/
html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0;}/*!sc*/
ul{list-style:none;}/*!sc*/
button,input,select,textarea{margin:0;}/*!sc*/
html{box-sizing:border-box;}/*!sc*/
*,*:before,*:after{box-sizing:inherit;}/*!sc*/
img,video{height:auto;max-width:100%;}/*!sc*/
iframe{border:0;}/*!sc*/
table{border-collapse:collapse;border-spacing:0;}/*!sc*/
td,th{padding:0;text-align:left;}/*!sc*/
html{font-size:81.25%;font-weight:normal;font-family:'Inter',-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;line-height:1.6;width:100%;overflow-x:hidden;height:100%;min-height:100%;box-sizing:border-box;-webkit-font-smooth:'antialiased';-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;--color-white:#FFFFFF;--color-orange-light:#EB6337;--color-orange:#EC4815;--color-orange-dark:#CE411D;--color-secondary:#31215E;--color-secondary-dark:#241748;--color-blue:var(--color-secondary-dark);--color-blue-light:var(--color-secondary);--color-seafoam-100:#F2FDFC;--color-seafoam-200:#E6FAF8;--color-seafoam-300:#D1FAF6;--color-seafoam-400:#B4F4E0;--color-seafoam:var(--color-seafoam-200);--color-seafoam-dark:var(--color-seafoam-400);--color-light:#FAFAFA;--color-light-dark:#E9E9EC;--color-grey:#595959;--color-grey-dark:#404040;--color-warning-light:#FFFBEB;--color-warning:#FEF3C7;--color-warning-dark:#FDE68A;--breakpoint-small:400px;--breakpoint-medium:800px;--breakpoint-large:1200px;--spacer-size:4.5rem;--section-padding:calc(var(--spacer-size) * 2);--container-padding:2rem;--font-tuner:'tuner-regular',-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;}/*!sc*/
@media (min-width:450px){html{font-size:87.5%;}}/*!sc*/
@media (min-width:685px){html{font-size:100%;}}/*!sc*/
html *{box-sizing:inherit;font-variant-numeric:inherit;font-family:inherit;line-height:inherit;font-size:100%;font-weight:inherit;-webkit-scrollbar-width:thin;-moz-scrollbar-width:thin;-ms-scrollbar-width:thin;scrollbar-width:thin;-webkit-scrollbar-color:#E1DDEC var(--color-light);-moz-scrollbar-color:#E1DDEC var(--color-light);-ms-scrollbar-color:#E1DDEC var(--color-light);scrollbar-color:#E1DDEC var(--color-light);}/*!sc*/
html *::-webkit-scrollbar{width:9px;}/*!sc*/
html *::-webkit-scrollbar-track{background:transparent;border-left:1px solid var(--color-light-dark);border-right:1px solid var(--color-light-dark);}/*!sc*/
html *::-webkit-scrollbar-thumb{background-color:#E1DDEC;border-radius:0;border:none;}/*!sc*/
::-moz-selection{background:var(--color-seafoam-dark);color:var(--color-blue-light);}/*!sc*/
::selection{background:var(--color-seafoam-dark);color:var(--color-blue-light);}/*!sc*/
.fitVids-wrapper{position:relative;padding-bottom:56.25%;height:0;}/*!sc*/
.fitVids-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;}/*!sc*/
data-styled.g183[id="sc-global-drTEKw1"]{content:"sc-global-drTEKw1,"}/*!sc*/
.fvlWOS{padding:0;margin:0;list-style-type:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/
.fvlWOS li{margin:0;display:block;}/*!sc*/
.fvlWOS li:not(:last-child){margin-bottom:0.5rem;}/*!sc*/
.fvlWOS a{font-size:1.5rem;text-transform:uppercase;color:inherit;-webkit-text-decoration:none;text-decoration:none;cursor:pointer;font-family:var(--font-tuner);font-weight:regular;font-style:normal;opacity:1;-webkit-transition:-webkit-transform 180ms ease-out;-webkit-transition:transform 180ms ease-out;transition:transform 180ms ease-out;display:block;line-height:1;}/*!sc*/
.fvlWOS a:hover,.fvlWOS a:focus{-webkit-text-decoration:none;text-decoration:none;-webkit-transform:translate3d(-1px,-2px,0);-ms-transform:translate3d(-1px,-2px,0);transform:translate3d(-1px,-2px,0);}/*!sc*/
data-styled.g184[id="LinkNav-sc-1m4ljfq-0"]{content:"fvlWOS,"}/*!sc*/
.eMYFLI{font-size:1rem;border-radius:2rem;cursor:pointer;-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out;width:-webkit-max-content;width:-moz-max-content;width:max-content;-webkit-transform:translate3d(0px,0px,0px);-ms-transform:translate3d(0px,0px,0px);transform:translate3d(0px,0px,0px);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--color-seafoam);color:var(--color-orange);border-radius:2rem;text-transform:uppercase;padding:0 1.25rem;height:45px;border:1px solid #b4f4e0;font-family:var(--font-tuner);font-weight:regular;font-style:normal;-webkit-text-decoration:none !important;text-decoration:none !important;white-space:nowrap;opacity:1;line-height:1.25;padding:0 1.25rem;height:38px;font-size:0.95rem;line-height:1;background-color:white;color:var(--tina-color-primary);border-color:rgba(0,0,0,0.1);}/*!sc*/
.eMYFLI svg{fill:currentColor;margin-left:-0.25em;margin-right:0.125rem;}/*!sc*/
.eMYFLI:hover,.eMYFLI:focus{color:var(--color-orange);-webkit-text-decoration:none;text-decoration:none;-webkit-transform:translate3d(-1px,-2px,0);-ms-transform:translate3d(-1px,-2px,0);transform:translate3d(-1px,-2px,0);-webkit-transition:-webkit-transform 180ms ease-out;-webkit-transition:transform 180ms ease-out;transition:transform 180ms ease-out;}/*!sc*/
.eMYFLI:focus{box-shadow:rgba(0,0,0,0.08) 0px 0px 0px 1px inset,rgba(236,72,21,0.7) 0px 0px 0px 3px,rgba(0,0,0,0.12) 0px 2px 3px;}/*!sc*/
.eMYFLI:focus,.eMYFLI:active{outline:none;}/*!sc*/
.eMYFLI:active{-webkit-filter:none;filter:none;}/*!sc*/
.eMYFLI:focus{box-shadow:rgba(0,0,0,0.08) 0px 0px 0px 1px inset,var(--tina-color-primary) 0px 0px 0px 3px,rgba(0,0,0,0.12) 0px 2px 3px;}/*!sc*/
.eMYFLI:hover,.eMYFLI:focus{color:var(--tina-color-primary-dark);}/*!sc*/
.iRgvKV{font-size:1rem;border-radius:2rem;cursor:pointer;-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out;width:-webkit-max-content;width:-moz-max-content;width:max-content;-webkit-transform:translate3d(0px,0px,0px);-ms-transform:translate3d(0px,0px,0px);transform:translate3d(0px,0px,0px);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--color-seafoam);color:var(--color-orange);border-radius:2rem;text-transform:uppercase;padding:0 1.25rem;height:45px;border:1px solid #b4f4e0;font-family:var(--font-tuner);font-weight:regular;font-style:normal;-webkit-text-decoration:none !important;text-decoration:none !important;white-space:nowrap;opacity:1;line-height:1.25;padding:0 1.25rem;height:38px;font-size:0.95rem;line-height:1;background-color:var(--tina-color-primary);border-color:var(--tina-color-primary-dark);color:white;font-weight:bold;}/*!sc*/
.iRgvKV svg{fill:currentColor;margin-left:-0.25em;margin-right:0.125rem;}/*!sc*/
.iRgvKV:hover,.iRgvKV:focus{color:var(--color-orange);-webkit-text-decoration:none;text-decoration:none;-webkit-transform:translate3d(-1px,-2px,0);-ms-transform:translate3d(-1px,-2px,0);transform:translate3d(-1px,-2px,0);-webkit-transition:-webkit-transform 180ms ease-out;-webkit-transition:transform 180ms ease-out;transition:transform 180ms ease-out;}/*!sc*/
.iRgvKV:focus{box-shadow:rgba(0,0,0,0.08) 0px 0px 0px 1px inset,rgba(236,72,21,0.7) 0px 0px 0px 3px,rgba(0,0,0,0.12) 0px 2px 3px;}/*!sc*/
.iRgvKV:focus,.iRgvKV:active{outline:none;}/*!sc*/
.iRgvKV:active{-webkit-filter:none;filter:none;}/*!sc*/
.iRgvKV:hover,.iRgvKV:focus{color:white;}/*!sc*/
.iRgvKV:focus{box-shadow:rgba(0,0,0,0.08) 0px 0px 0px 1px inset,var(--tina-color-primary) 0px 0px 0px 3px,rgba(0,0,0,0.12) 0px 2px 3px;}/*!sc*/
data-styled.g185[id="Button-sc-1lz2l6c-0"]{content:"eMYFLI,iRgvKV,"}/*!sc*/
.bnYTHf{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:-1rem;margin-bottom:-1rem;}/*!sc*/
.bnYTHf .Button-sc-1lz2l6c-0{margin-right:1rem;margin-bottom:1rem;}/*!sc*/
data-styled.g186[id="Button__ButtonGroup-sc-1lz2l6c-1"]{content:"bnYTHf,"}/*!sc*/
.hRqSwU{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.08),0px 2px 3px rgba(0,0,0,0.12);border:0;border-radius:5px;background:white;color:var(--color-secondary);line-height:1.2;white-space:nowrap;-webkit-text-decoration:none;text-decoration:none;cursor:text;height:40px;width:100%;padding:0 16px;-webkit-transition:all 85ms ease-out;transition:all 85ms ease-out;font-family:var(--font-tuner);font-size:16px;}/*!sc*/
.hRqSwU::-webkit-input-placeholder{opacity:1;font-family:inherit;font-size:1rem;-webkit-transition:opacity 180ms ease-out;transition:opacity 180ms ease-out;}/*!sc*/
.hRqSwU::-moz-placeholder{opacity:1;font-family:inherit;font-size:1rem;-webkit-transition:opacity 180ms ease-out;transition:opacity 180ms ease-out;}/*!sc*/
.hRqSwU:-ms-input-placeholder{opacity:1;font-family:inherit;font-size:1rem;-webkit-transition:opacity 180ms ease-out;transition:opacity 180ms ease-out;}/*!sc*/
.hRqSwU::placeholder{opacity:1;font-family:inherit;font-size:1rem;-webkit-transition:opacity 180ms ease-out;transition:opacity 180ms ease-out;}/*!sc*/
.hRqSwU:hover{box-shadow:rgba(0,0,0,0.08) 0px 0px 0px 1px inset,rgba(236,72,21,0.2) 0px 0px 0px 3px,rgba(0,0,0,0.12) 0px 2px 3px;}/*!sc*/
.hRqSwU:focus{box-shadow:rgba(0,0,0,0.08) 0px 0px 0px 1px inset,rgba(236,72,21,0.7) 0px 0px 0px 3px,rgba(0,0,0,0.12) 0px 2px 3px;}/*!sc*/
.hRqSwU:focus,.hRqSwU:active{outline:none;}/*!sc*/
.hRqSwU:focus::-webkit-input-placeholder,.hRqSwU:active::-webkit-input-placeholder{opacity:0.5;-webkit-transition:opacity 200ms ease;transition:opacity 200ms ease;}/*!sc*/
.hRqSwU:focus::-moz-placeholder,.hRqSwU:active::-moz-placeholder{opacity:0.5;-webkit-transition:opacity 200ms ease;transition:opacity 200ms ease;}/*!sc*/
.hRqSwU:focus:-ms-input-placeholder,.hRqSwU:active:-ms-input-placeholder{opacity:0.5;-webkit-transition:opacity 200ms ease;transition:opacity 200ms ease;}/*!sc*/
.hRqSwU:focus::placeholder,.hRqSwU:active::placeholder{opacity:0.5;-webkit-transition:opacity 200ms ease;transition:opacity 200ms ease;}/*!sc*/
data-styled.g187[id="Input-sc-1dgks6g-0"]{content:"hRqSwU,"}/*!sc*/
.fwbGFA{background:transparent;border:none;outline:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;width:2.75rem;height:2.75rem;padding:0.5rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}/*!sc*/
.fwbGFA span{width:20px;height:2px;margin-top:-1px;border-radius:3px;display:block;position:absolute;background-color:var(--color-orange);top:50%;left:50%;-webkit-transition:all 180ms ease-out;transition:all 180ms ease-out;-webkit-transform:translate3d(-50%,-6px,0);-ms-transform:translate3d(-50%,-6px,0);transform:translate3d(-50%,-6px,0);}/*!sc*/
.fwbGFA span:nth-child(2){-webkit-transform:translate3d(-50%,0,0);-ms-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);}/*!sc*/
.fwbGFA span:last-child{-webkit-transform:translate3d(-50%,6px,0);-ms-transform:translate3d(-50%,6px,0);transform:translate3d(-50%,6px,0);}/*!sc*/
data-styled.g191[id="NavToggle-sc-1fhnk6m-0"]{content:"fwbGFA,"}/*!sc*/
.fJygGt{pointer-events:none;display:block;position:fixed;z-index:-1;top:0;left:0;width:100%;height:100%;background-color:var(--color-secondary);-webkit-transition:all 180ms ease-out;transition:all 180ms ease-out;opacity:0;z-index:1200;}/*!sc*/
data-styled.g192[id="Overlay-sc-1jblu14-0"]{content:"fJygGt,"}/*!sc*/
.jpuiuz{margin-top:2rem !important;font-size:1rem !important;color:inherit;opacity:0.5;}/*!sc*/
data-styled.g203[id="LastEdited-sc-zvmo16-0"]{content:"jpuiuz,"}/*!sc*/
.jOCLGF{display:grid;grid-template-rows:auto auto;grid-template-columns:auto;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-gap:1rem;width:100%;max-width:38rem;padding:0;width:auto;}/*!sc*/
@media (min-width:800px){.jOCLGF{grid-template-rows:auto;grid-template-columns:auto 8rem;}}/*!sc*/
.jOCLGF .Input-sc-1dgks6g-0{width:18rem;background:rgba(0,0,0,0.1);color:white;}/*!sc*/
.jOCLGF .Input-sc-1dgks6g-0::-webkit-input-placeholder{color:white;}/*!sc*/
.jOCLGF .Input-sc-1dgks6g-0::-moz-placeholder{color:white;}/*!sc*/
.jOCLGF .Input-sc-1dgks6g-0:-ms-input-placeholder{color:white;}/*!sc*/
.jOCLGF .Input-sc-1dgks6g-0::placeholder{color:white;}/*!sc*/
data-styled.g204[id="EmailForm__StyledEmailForm-sc-1ixwarn-0"]{content:"jOCLGF,"}/*!sc*/
.iuQlla{-webkit-text-decoration:none;text-decoration:none;fill:var(--color-orange);}/*!sc*/
.iuQlla h1{margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/
.iuQlla span{font-size:1.5rem;margin-left:0.675rem;font-family:var(--font-tuner);font-weight:bold;color:var(--color-orange);margin-top:0.5rem;}/*!sc*/
.iuQlla svg{height:40px;width:auto;}/*!sc*/
data-styled.g205[id="TinaIcon-sc-18svf2u-0"]{content:"iuQlla,"}/*!sc*/
.jcVyCJ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:inherit;margin-bottom:1rem;}/*!sc*/
@media (min-width:600px){.jcVyCJ{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:0;}}/*!sc*/
.jcVyCJ a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:inherit;}/*!sc*/
.jcVyCJ svg{width:2rem;height:auto;fill:inherit;margin-left:1rem;}/*!sc*/
data-styled.g207[id="Footer__FooterSocial-sc-xdyusa-0"]{content:"jcVyCJ,"}/*!sc*/
.gugmmW{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;color:inherit;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:1.5rem;}/*!sc*/
.gugmmW span{margin:0.5rem 1rem 0.5rem 0;white-space:nowrap;font-size:1.25rem;line-height:1;}/*!sc*/
@media (min-width:550px){.gugmmW{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}}/*!sc*/
data-styled.g208[id="Footer__FooterForm-sc-xdyusa-1"]{content:"gugmmW,"}/*!sc*/
.czCWKP{display:grid;grid-gap:1rem;padding:2.5rem 2rem;background-color:var(--color-background);-webkit-align-items:start;-webkit-box-align:start;-ms-flex-align:start;align-items:start;grid-template-areas:'logo' 'social' 'nav';}/*!sc*/
@media (min-width:600px){.czCWKP{grid-template-areas:'logo social' 'nav nav';}}/*!sc*/
@media (min-width:800px){.czCWKP{grid-template-columns:1fr 3fr 1fr;grid-template-areas:'logo nav social';}}/*!sc*/
.czCWKP .TinaIcon-sc-18svf2u-0{grid-area:logo;margin-bottom:1rem;}/*!sc*/
.czCWKP .LinkNav-sc-1m4ljfq-0{grid-area:nav;}/*!sc*/
.czCWKP .Footer__FooterSocial-sc-xdyusa-0{grid-area:social;}/*!sc*/
data-styled.g209[id="Footer__FooterTop-sc-xdyusa-2"]{content:"czCWKP,"}/*!sc*/
.caEWpB{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;padding:1.5rem 2rem 0 2rem;background-color:var(--color-background);}/*!sc*/
@media (min-width:1200px){.caEWpB{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}/*!sc*/
data-styled.g210[id="Footer__FooterBottom-sc-xdyusa-3"]{content:"caEWpB,"}/*!sc*/
.NJIno{display:inline-block;padding:0.5rem 0 0.5rem 1rem;}/*!sc*/
data-styled.g211[id="Footer__FootnoteLinks-sc-xdyusa-4"]{content:"NJIno,"}/*!sc*/
.LwcPJ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;color:inherit;font-size:1rem;margin-bottom:1.5rem;}/*!sc*/
.LwcPJ button{height:40px;color:white;background-color:var(--color-orange);}/*!sc*/
.LwcPJ button:hover,.LwcPJ button:focus{color:white;fill:white;}/*!sc*/
.LwcPJ button:focus{border-color:white;}/*!sc*/
.LwcPJ button svg{fill:white;}/*!sc*/
.LwcPJ p,.LwcPJ a,.LwcPJ button{white-space:nowrap;}/*!sc*/
.LwcPJ p{color:inherit;margin:0;font-size:1rem;opacity:0.65;}/*!sc*/
.LwcPJ a{-webkit-text-decoration:none;text-decoration:none;color:inherit;opacity:0.65;}/*!sc*/
.LwcPJ a:hover{color:inherit;opacity:1;}/*!sc*/
@media (min-width:500px){.LwcPJ{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}/*!sc*/
data-styled.g212[id="Footer__Footnote-sc-xdyusa-5"]{content:"LwcPJ,"}/*!sc*/
.wqvyL:after{content:'—';margin:0.5rem 0;opacity:0.3;}/*!sc*/
@media (min-width:500px){.wqvyL:after{content:'|';margin:0 0.5rem;opacity:0.3;}}/*!sc*/
data-styled.g213[id="Footer__FooterDivider-sc-xdyusa-6"]{content:"wqvyL,"}/*!sc*/
.kjmqLC{grid-area:footer;color:white;--color-background:var(--color-orange);--color-background-dark:var(--color-orange-dark);position:relative;z-index:1000;border-top:1px solid var(--color-light-dark);color:var(--color-orange);--color-background:var(--color-light);--color-background-dark:var(--color-light-dark);}/*!sc*/
.kjmqLC .TinaIcon-sc-18svf2u-0{fill:var(--color-white);}/*!sc*/
.kjmqLC .TinaIcon-sc-18svf2u-0 svg{height:3.5rem;}/*!sc*/
.kjmqLC .Footer__FooterSocial-sc-xdyusa-0{fill:white;}/*!sc*/
.kjmqLC .Footer__FooterBottom-sc-xdyusa-3{--color-background:var(--color-orange-dark);}/*!sc*/
.kjmqLC .TinaIcon-sc-18svf2u-0{fill:var(--color-orange);}/*!sc*/
.kjmqLC .Footer__FooterSocial-sc-xdyusa-0{fill:var(--color-orange);}/*!sc*/
.kjmqLC .Footer__FooterBottom-sc-xdyusa-3{color:white;--color-background:var(--color-orange);}/*!sc*/
data-styled.g214[id="Footer-sc-xdyusa-7"]{content:"kjmqLC,"}/*!sc*/
.itkhvo{position:absolute;right:0;top:0;cursor:pointer;border:1px solid var(--tina-color-grey-3);opacity:0.6;background:rgba(0,0,0,0.03);color:var(--tina-color-grey-7);border-right-width:0;-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out;border-top-width:0;font-size:var(--tina-font-size-1);border-radius:0 0 0 5px;}/*!sc*/
.itkhvo:hover{color:var(--color-orange);opacity:1;}/*!sc*/
data-styled.g219[id="MarkdownContent__StyledCopyCodeButton-sc-1dnb0ow-0"]{content:"itkhvo,"}/*!sc*/
.gnpKzD{position:relative;}/*!sc*/
data-styled.g220[id="MarkdownContent__CodeWrapper-sc-1dnb0ow-1"]{content:"gnpKzD,"}/*!sc*/
.dYVUfN{fill:var(--color-secondary);opacity:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:1rem;left:-0.25rem;height:1.3em;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:all 180ms ease-out;transition:all 180ms ease-out;}/*!sc*/
.dYVUfN svg{width:1.25rem;height:1.25rem;}/*!sc*/
.dYVUfN:hover,.dYVUfN:focus,*:hover > .dYVUfN{opacity:1;}/*!sc*/
data-styled.g221[id="MarkdownContent__HeadingLink-sc-1dnb0ow-2"]{content:"dYVUfN,"}/*!sc*/
.jinSeo h1,.jinSeo h2,.jinSeo h3,.jinSeo h4,.jinSeo h5,.jinSeo h6{padding-top:1rem;margin:1rem 0 1.5rem 0;}/*!sc*/
.jinSeo h1:first-child,.jinSeo h2:first-child,.jinSeo h3:first-child,.jinSeo h4:first-child,.jinSeo h5:first-child,.jinSeo h6:first-child{margin-top:0;padding-top:0;}/*!sc*/
.jinSeo h1:last-child,.jinSeo h2:last-child,.jinSeo h3:last-child,.jinSeo h4:last-child,.jinSeo h5:last-child,.jinSeo h6:last-child{margin-bottom:0;}/*!sc*/
.jinSeo p,.jinSeo iframe,.jinSeo blockquote,.jinSeo image{margin:1.5rem 0;}/*!sc*/
.jinSeo p:first-child,.jinSeo iframe:first-child,.jinSeo blockquote:first-child,.jinSeo image:first-child{margin-top:0;}/*!sc*/
.jinSeo p:last-child,.jinSeo iframe:last-child,.jinSeo blockquote:last-child,.jinSeo image:last-child{margin-bottom:0;}/*!sc*/
.jinSeo ul,.jinSeo ol{padding-left:2rem;margin-bottom:1.5rem;}/*!sc*/
.jinSeo li{margin-bottom:0.5rem;}/*!sc*/
.jinSeo h1,.jinSeo h2,.jinSeo h3,.jinSeo h4,.jinSeo h5,.jinSeo h6{position:relative;font-family:var(--font-tuner);font-weight:regular;font-style:normal;}/*!sc*/
.jinSeo h1 em,.jinSeo h2 em,.jinSeo h3 em,.jinSeo h4 em,.jinSeo h5 em,.jinSeo h6 em{font-style:normal;}/*!sc*/
.jinSeo h1,.jinSeo .h1,.jinSeo h2,.jinSeo .h2,.jinSeo h3,.jinSeo .h3,.jinSeo h4,.jinSeo .h4{line-height:1.3;-webkit-letter-spacing:0.1px;-moz-letter-spacing:0.1px;-ms-letter-spacing:0.1px;letter-spacing:0.1px;color:var(--color-secondary-dark);}/*!sc*/
.jinSeo h1,.jinSeo .h1,.jinSeo h2,.jinSeo .h2{font-weight:bold;color:var(--color-orange);}/*!sc*/
.jinSeo h1 em,.jinSeo .h1 em,.jinSeo h2 em,.jinSeo .h2 em{color:var(--color-orange);font-style:italic;}/*!sc*/
.jinSeo h3,.jinSeo .h3,.jinSeo h4,.jinSeo .h4{color:var(--color-secondary);}/*!sc*/
.jinSeo h3 em,.jinSeo .h3 em,.jinSeo h4 em,.jinSeo .h4 em{color:var(--color-secondary);font-style:italic;}/*!sc*/
.jinSeo h1,.jinSeo .h1{font-size:2rem;}/*!sc*/
@media (min-width:1200px){.jinSeo h1,.jinSeo .h1{font-size:2.5rem;}}/*!sc*/
.jinSeo h2,.jinSeo .h2{font-size:1.5rem;}/*!sc*/
@media (min-width:1200px){.jinSeo h2,.jinSeo .h2{font-size:1.625rem;}}/*!sc*/
.jinSeo h3,.jinSeo .h3{font-size:1.3125rem;}/*!sc*/
.jinSeo h4,.jinSeo .h4{font-size:1.125rem;}/*!sc*/
.jinSeo p{font-size:16px;color:var(--color-secondary-dark);}/*!sc*/
@media (min-width:685px){.jinSeo p{font-size:18px;}}/*!sc*/
.jinSeo p img{display:block;margin:1.5rem auto;border-radius:5px;border-width:1px;border-style:solid;border-color:rgb(237,238,238);border-image:initial;overflow:hidden;}/*!sc*/
.jinSeo iframe{display:block;margin:1.5rem auto;border-radius:5px;border-width:1px;border-style:solid;border-color:rgb(237,238,238);border-image:initial;overflow:hidden;}/*!sc*/
.jinSeo iframe.wide{position:relative;min-width:66vw;max-width:1400px;left:50%;-webkit-transform:translate3d(-50%,0,0);-ms-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);}/*!sc*/
.jinSeo a:not([class]){color:inherit;opacity:0.8;-webkit-text-decoration:underline rgba(0,0,0,0.3);text-decoration:underline rgba(0,0,0,0.3);-webkit-transition:all 185ms ease-out;transition:all 185ms ease-out;}/*!sc*/
.jinSeo a:not([class]):hover,.jinSeo a:not([class]):focus{opacity:1;color:var(--color-orange);-webkit-text-decoration-color:var(--color-orange);text-decoration-color:var(--color-orange);}/*!sc*/
.jinSeo blockquote{display:block;font-size:1.125rem;background-color:var(--color-seafoam);border:1px solid var(--color-seafoam-dark);border-left-width:6px;border-radius:3px;padding:1em;}/*!sc*/
.jinSeo li blockquote{display:block;border:none;border-radius:0;background:none;padding:0 0 0 1rem;border-left:1px solid var(--color-seafoam-dark);margin:-1rem 0 1.5rem 0 !important;}/*!sc*/
.jinSeo li blockquote a{font-size:1rem;}/*!sc*/
.jinSeo hr{border-top:none;border-right:none;border-left:none;border-image:initial;border-bottom:5px dotted var(--color-seafoam-dark);width:6rem;max-width:100%;display:block;height:0px;margin:2rem 0px;}/*!sc*/
.jinSeo strong{font-weight:bold;}/*!sc*/
.jinSeo ul{list-style-type:disc;}/*!sc*/
.jinSeo li{font-size:1.125rem;color:var(--color-secondary-dark);}/*!sc*/
.jinSeo *:not(pre) > code{padding:0.1em 0.2em;border-radius:0.3em;background-color:var(--color-light);border:1px solid var(--color-light-dark);border-radius:0.3rem;color:var(--color-orange);font-size:1em;line-height:inherit;}/*!sc*/
.jinSeo pre{border-radius:5px;border-width:1px;border-style:solid;border-color:rgb(237,238,238);border-image:initial;max-width:100%;overflow-x:auto;white-space:pre-wrap !important;white-space:-moz-pre-wrap !important;white-space:-pre-wrap !important;white-space:-o-pre-wrap !important;word-wrap:break-word !important;}/*!sc*/
.jinSeo pre code{white-space:pre-wrap !important;white-space:-moz-pre-wrap !important;white-space:-pre-wrap !important;white-space:-o-pre-wrap !important;word-wrap:break-word !important;}/*!sc*/
.jinSeo table{width:100%;line-height:1.375;}/*!sc*/
.jinSeo tr:nth-child(even){background-color:var(--color-light);}/*!sc*/
.jinSeo th,.jinSeo td{padding:0.4rem 0.5rem;}/*!sc*/
.jinSeo th{border-bottom:3px solid var(--color-light-dark);font-family:var(--font-tuner);font-weight:regular;font-style:normal;color:var(--color-orange);-webkit-letter-spacing:0.5px;-moz-letter-spacing:0.5px;-ms-letter-spacing:0.5px;letter-spacing:0.5px;font-size:1.125rem;line-height:1.3;-webkit-letter-spacing:0.1px;-moz-letter-spacing:0.1px;-ms-letter-spacing:0.1px;letter-spacing:0.1px;}/*!sc*/
.jinSeo td{border-bottom:1px solid var(--color-light-dark);}/*!sc*/
.jinSeo .callout{margin:2rem 0;padding:1.5rem 2rem;background-image:url(/img/clouds.jpg);background-position:center top;background-repeat:no-repeat;background-size:cover;display:grid;grid-gap:2rem;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:0.3rem;border:1px solid var(--color-seafoam);overflow:hidden;}/*!sc*/
@media (min-width:1000px){.jinSeo .callout{grid-gap:2.5rem;grid-template-columns:1fr 2fr;}}/*!sc*/
.jinSeo .callout div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}/*!sc*/
.jinSeo .callout h3{color:var(--color-orange);font-size:1.5rem;margin-bottom:1.25rem;}/*!sc*/
.jinSeo .callout p{font-size:1rem;margin:0 0 1.375rem 0;}/*!sc*/
.jinSeo .callout img{position:relative;max-width:14rem;margin:-1rem 0;}/*!sc*/
@media (min-width:1000px){.jinSeo .callout img{margin:-1rem 0 -3rem 0;}}/*!sc*/
.jinSeo .calloutButton{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;position:relative;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-size:1.125rem;line-height:1;font-weight:bold;padding:0.75rem 1.625rem;border-radius:0.25rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;white-space:nowrap;outline:none;background:var(--color-orange);-webkit-transition:background 150ms ease-out;transition:background 150ms ease-out;color:white;}/*!sc*/
.jinSeo .calloutButton:hover,.jinSeo .calloutButton::focus,.jinSeo .calloutButton:active{background:var(--color-orange-light);}/*!sc*/
.jinSeo .calloutButton svg{display:inline-block;width:auto;height:1.125em;margin-left:0.75rem;}/*!sc*/
data-styled.g229[id="DocsTextWrapper__TextWrapper-sc-q3u5c2-0"]{content:"jinSeo,"}/*!sc*/
.iRDZEC{line-height:1.25;background-color:white;border-right:1px solid var(--tina-color-grey-2);padding:0;position:fixed;z-index:250;left:0;top:0;width:80%;min-width:16rem;max-width:24rem;height:100%;z-index:1250;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:all 140ms ease-in;transition:all 140ms ease-in;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-content:space-between;-ms-flex-line-pack:space-between;align-content:space-between;overflow:visible;}/*!sc*/
.iRDZEC > ul{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1px 1rem 0;background:linear-gradient(to bottom,white,rgba(255,255,255,0) 1rem),linear-gradient(to bottom,var(--tina-color-grey-1),white 1rem);background-attachment:local,scroll;background-repeat:no-repeat;background-size:100% 1rem,100% 1rem;margin-right:-1px;}/*!sc*/
@media (min-width:840px){.iRDZEC{position:-webkit-sticky;position:sticky;height:100vh;top:0;grid-area:sidebar;place-self:stretch;width:100%;left:0;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0);}}/*!sc*/
data-styled.g230[id="DocsLeftSidebar-sc-1436pxj-0"]{content:"iRDZEC,"}/*!sc*/
.ksaWTD{position:relative;display:block;-webkit-text-decoration:none;text-decoration:none;-webkit-transition:all 180ms ease-out 0s;transition:all 180ms ease-out 0s;cursor:pointer;color:var(--color-secondary);font-family:var(--font-primary);font-size:0.9375rem;opacity:0.75;line-height:1.3;padding:0.125rem 0.5rem 0.125rem 1.125rem;opacity:1;color:var(--color-orange);font-family:var(--font-tuner);font-size:1.25rem;padding:0.5rem 0.5rem 0.125rem 1.125rem;}/*!sc*/
.ksaWTD:hover{opacity:1;}/*!sc*/
.ksaWTD span{display:inline-block;background:white;padding-right:0.75rem;}/*!sc*/
.ksaWTD span:before{content:'';display:block;position:absolute;left:1.125rem;top:50%;height:1px;margin-top:-3px;width:100%;border-bottom:5px dotted var(--tina-color-grey-1);z-index:-1;}/*!sc*/
.ceiNfw{position:relative;display:block;-webkit-text-decoration:none;text-decoration:none;-webkit-transition:all 180ms ease-out 0s;transition:all 180ms ease-out 0s;cursor:pointer;color:var(--color-secondary);font-family:var(--font-primary);font-size:0.9375rem;opacity:0.75;line-height:1.3;padding:0.125rem 0.5rem 0.125rem 1.125rem;font-size:1rem;opacity:1;}/*!sc*/
.ceiNfw:hover{opacity:1;}/*!sc*/
.ceiNfw span{display:inline-block;background:white;padding-right:0.75rem;}/*!sc*/
.ceiNfw span:before{content:'';display:block;position:absolute;left:1.125rem;top:50%;height:1px;margin-top:-3px;width:100%;border-bottom:5px dotted var(--tina-color-grey-1);z-index:-1;}/*!sc*/
.ikOmvk{position:relative;display:block;-webkit-text-decoration:none;text-decoration:none;-webkit-transition:all 180ms ease-out 0s;transition:all 180ms ease-out 0s;cursor:pointer;color:var(--color-secondary);font-family:var(--font-primary);font-size:0.9375rem;opacity:0.75;line-height:1.3;padding:0.125rem 0.5rem 0.125rem 1.125rem;opacity:0.875;}/*!sc*/
.ikOmvk:hover{opacity:1;}/*!sc*/
.ikOmvk span{display:inline-block;background:white;padding-right:0.75rem;}/*!sc*/
.ikOmvk span:before{content:'';display:block;position:absolute;left:1.125rem;top:50%;height:1px;margin-top:-3px;width:100%;border-bottom:5px dotted var(--tina-color-grey-1);z-index:-1;}/*!sc*/
.kYegUj{position:relative;display:block;-webkit-text-decoration:none;text-decoration:none;-webkit-transition:all 180ms ease-out 0s;transition:all 180ms ease-out 0s;cursor:pointer;color:var(--color-secondary);font-family:var(--font-primary);font-size:0.9375rem;opacity:0.75;line-height:1.3;padding:0.125rem 0.5rem 0.125rem 1.125rem;font-size:1rem;opacity:1;opacity:1;color:var(--color-orange);font-weight:bold;}/*!sc*/
.kYegUj:hover{opacity:1;}/*!sc*/
.kYegUj span{display:inline-block;background:white;padding-right:0.75rem;}/*!sc*/
.kYegUj span:before{content:'';display:block;position:absolute;left:1.125rem;top:50%;height:1px;margin-top:-3px;width:100%;border-bottom:5px dotted var(--tina-color-grey-1);z-index:-1;}/*!sc*/
data-styled.g231[id="DocsNavigationList__NavTitle-sc-1b0uukm-0"]{content:"ksaWTD,ceiNfw,ikOmvk,kYegUj,"}/*!sc*/
.dBIoBq{position:relative;display:block;padding-left:0.675rem;padding-top:0.125rem;padding-bottom:0.125rem;padding-left:0.75rem;padding-top:0.25rem;padding-bottom:0.125rem;}/*!sc*/
.iRgrTf{position:relative;display:block;padding-left:0.675rem;padding-top:0.125rem;padding-bottom:0.125rem;}/*!sc*/
data-styled.g232[id="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1"]{content:"dBIoBq,iRgrTf,"}/*!sc*/
.zQCwO{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/
.zQCwO:last-child{padding-bottom:0.375rem;}/*!sc*/
.fOIpIm{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/
.fOIpIm:last-child{padding-bottom:0.375rem;}/*!sc*/
.fOIpIm a::after{display:-ms-inline-flexbox;content:'Experimental';font-size:12px;font-weight:bold;background-color:#f9ebe6;border:1px solid #edcdc4;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;padding:2px 5px;border-radius:5px;-webkit-letter-spacing:0.25px;-moz-letter-spacing:0.25px;-ms-letter-spacing:0.25px;letter-spacing:0.25px;color:#ec4815;margin-right:5px;margin-left:5px;line-height:1;vertical-align:middle;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;}/*!sc*/
data-styled.g233[id="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2"]{content:"zQCwO,fOIpIm,"}/*!sc*/
.lmJcFY{padding:0.5rem 0;background:var(--tina-color-grey-1);border-bottom:1px solid var(--color-light-dark);}/*!sc*/
.lmJcFY a{display:block;-webkit-text-decoration:none;text-decoration:none;font-size:1rem;font-weight:bold;padding:0.375rem 1rem 0.375rem 1rem;color:var(--color-orange);margin:0;font-family:var(--font-tuner);font-style:normal;opacity:1;-webkit-transition:-webkit-transform 180ms ease-out;-webkit-transition:transform 180ms ease-out;transition:transform 180ms ease-out;line-height:1;}/*!sc*/
.lmJcFY a:hover,.lmJcFY a:focus{-webkit-text-decoration:none;text-decoration:none;-webkit-transform:translate3d(-1px,-2px,0);-ms-transform:translate3d(-1px,-2px,0);transform:translate3d(-1px,-2px,0);}/*!sc*/
@media (min-width:1200px){.lmJcFY{display:none;}}/*!sc*/
data-styled.g234[id="DocsNavigationList__MobileMainNav-sc-1b0uukm-3"]{content:"lmJcFY,"}/*!sc*/
.bbzqQM{overflow-y:auto;overflow-x:hidden;padding:0.5rem 0 1.5rem 0;margin-right:-1px;}/*!sc*/
@media (min-width:1600px){.bbzqQM{padding:1rem 1rem 2rem 1rem;}}/*!sc*/
data-styled.g235[id="DocsNavigationList__DocsNavigationContainer-sc-1b0uukm-4"]{content:"bbzqQM,"}/*!sc*/
.lmgfKU{position:relative;grid-area:header;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1rem 2rem;--color-background:white;--color-foreground:var(--color-orange);--color-background:var(--color-light);--color-foreground:var(--color-orange);}/*!sc*/
.lmgfKU ul{list-style-type:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin:0 1rem 0 0;}/*!sc*/
@media (max-width:1200px){.lmgfKU ul{display:none;}}/*!sc*/
.lmgfKU li{margin:0 1.5rem;}/*!sc*/
.lmgfKU li a{color:var(--color-blue);font-weight:500;opacity:0.7;-webkit-transition:opacity 150ms ease-out;transition:opacity 150ms ease-out;-webkit-text-decoration:none;text-decoration:none;font-size:1.125rem;}/*!sc*/
.lmgfKU li a:hover{opacity:1;}/*!sc*/
.lmgfKU .actions{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}/*!sc*/
.lmgfKU .actions > *{width:auto;}/*!sc*/
.lmgfKU .Button-sc-1lz2l6c-0{border:1px solid var(--color-light-dark);}/*!sc*/
data-styled.g237[id="DocsHeaderNav-sc-1xewo4o-0"]{content:"lmgfKU,"}/*!sc*/
.zNUfi{position:absolute;right:0;width:44px;height:44px;fill:var(--color-orange);pointer-events:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/
.zNUfi svg{fill:inherit;padding:0;width:1.5rem;height:auto;}/*!sc*/
data-styled.g239[id="styles__IconWrapper-sc-fbvnb4-1"]{content:"zNUfi,"}/*!sc*/
.crzYKd{outline:none;border:none;width:2.75rem;background:transparent;-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out;opacity:0;padding:0 1.25rem;box-sizing:border-box;cursor:pointer;color:inherit;width:100%;opacity:1;cursor:text;padding:0 2.25rem 0 1rem;}/*!sc*/
@media (max-width:684px){.crzYKd{width:100%;}}/*!sc*/
data-styled.g240[id="styles__Input-sc-fbvnb4-2"]{content:"crzYKd,"}/*!sc*/
.hutlFE{position:relative;font-size:1rem;padding:0.625rem 0;font-family:var(--font-tuner);background-color:white;box-shadow:3px 3px 4px var(--tina-color-grey-2),-4px -4px 6px white;color:var(--color-foreground);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:filter 250ms ease;transition:filter 250ms ease;border-radius:100px;text-transform:uppercase;border:1px solid var(--color-light-dark);}/*!sc*/
.hutlFE:hover,.hutlFE:focus{-webkit-text-decoration:none;text-decoration:none;-webkit-transition:filter 250ms ease;transition:filter 250ms ease;}/*!sc*/
data-styled.g241[id="styles__SearchContainer-sc-fbvnb4-3"]{content:"hutlFE,"}/*!sc*/
.cXCLqt{display:block;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;position:relative;}/*!sc*/
@media (min-width:840px){.cXCLqt{display:inline-block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;}}/*!sc*/
.cXCLqt select{position:relative;font-size:0.875rem;padding:0.375rem 0.75rem;background-color:white;border:1px solid var(--tina-color-grey-1);color:var(--tina-color-grey-7);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:filter 250ms ease;transition:filter 250ms ease;border-radius:100px;box-shadow:3px 3px 4px var(--tina-color-grey-2),-4px -4px 6px white;-moz-appearance:none;-webkit-appearance:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E');background-repeat:no-repeat;background-position:right 0.7em top 50%;background-size:0.65em auto;}/*!sc*/
data-styled.g248[id="VersionSelect__SelectWrapper-sc-12e9kbk-0"]{content:"cXCLqt,"}/*!sc*/
.gPBYgd{position:fixed;background:var(--color-light);border:1px solid var(--color-light-dark);margin-top:1rem;padding:0 0 0 1rem;border-radius:0 2rem 2rem 0;width:3.25rem;z-index:1300;}/*!sc*/
@media (min-width:840px){.gPBYgd{display:none;}}/*!sc*/
data-styled.g249[id="DocumentationNavigation__MobileNavToggle-sc-1cawrzy-0"]{content:"gPBYgd,"}/*!sc*/
.eliKkz{position:relative;display:none;}/*!sc*/
@media (min-width:840px){.eliKkz{display:block;}}/*!sc*/
data-styled.g251[id="DocumentationNavigation__DocsDesktopTinaIcon-sc-1cawrzy-2"]{content:"eliKkz,"}/*!sc*/
.dTjTYi{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:1rem;}/*!sc*/
.dTjTYi .DocumentationNavigation__DocsDesktopTinaIcon-sc-1cawrzy-2{margin-right:1rem;}/*!sc*/
data-styled.g252[id="DocumentationNavigation__DocsSidebarHeader-sc-1cawrzy-3"]{content:"dTjTYi,"}/*!sc*/
.lczHyo{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;background-color:white;background:linear-gradient(to bottom,white,var(--tina-color-grey-1));z-index:500;padding:1rem 1rem 1.25rem 1rem;border-bottom:1px solid var(--tina-color-grey-2);position:relative;}/*!sc*/
.lczHyo .styles__HitsWrapper-sc-fbvnb4-6{right:auto;left:1.25rem;margin-top:-1.625rem;}/*!sc*/
@media (max-width:839px){.lczHyo{padding-left:4.5rem;}}/*!sc*/
@media (min-width:1600px){.lczHyo{padding:1rem 1.75rem 1.5rem 1.75rem;}}/*!sc*/
data-styled.g253[id="DocumentationNavigation__DocsSidebarHeaderWrapper-sc-1cawrzy-4"]{content:"lczHyo,"}/*!sc*/
@media (min-width:840px){.jzEaFe{width:100%;display:grid;grid-template-columns:min(33vw,20rem) minmax(0,1fr);grid-template-rows:auto 1fr auto;grid-template-areas:'sidebar header' 'sidebar main' 'sidebar footer';}.jzEaFe .Overlay-sc-1jblu14-0{display:none;}}/*!sc*/
@media (min-width:1200px){.jzEaFe{grid-template-columns:20rem minmax(0,1fr);}}/*!sc*/
@media (min-width:1600px){.jzEaFe{grid-template-columns:22rem minmax(0,1fr);}}/*!sc*/
data-styled.g254[id="DocsLayout__DocsLayoutGrid-sc-upb6ik-0"]{content:"jzEaFe,"}/*!sc*/
.leeSVM{grid-area:main;place-self:stretch;}/*!sc*/
data-styled.g255[id="DocsLayout__DocsMain-sc-upb6ik-1"]{content:"leeSVM,"}/*!sc*/
.hExube{display:none;font-size:1rem;color:var(--color-secondary);opacity:0.5;background:transparent;line-height:1;margin-bottom:1.125rem;}/*!sc*/
@media (min-width:1200px){.hExube{display:block;}}/*!sc*/
data-styled.g256[id="toc__TocDesktopHeader-sc-s358mc-0"]{content:"hExube,"}/*!sc*/
.dOOqmo{margin-bottom:-0.375rem;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;}/*!sc*/
@media (min-width:1200px){.dOOqmo{position:-webkit-sticky;position:sticky;top:1.5rem;}}/*!sc*/
data-styled.g257[id="toc__TocWrapper-sc-s358mc-1"]{content:"dOOqmo,"}/*!sc*/
.dBTqwd{display:block;padding:0;outline:none;border:none;color:var(--color-secondary);opacity:0.65;background:transparent;cursor:pointer;-webkit-transition:opacity 185ms ease-out;transition:opacity 185ms ease-out;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1;margin-bottom:1.125rem;}/*!sc*/
.dBTqwd span{margin-right:0.5rem;}/*!sc*/
.dBTqwd svg{position:relative;width:1.25rem;height:auto;fill:var(--color-grey);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:opacity 180ms ease-out,-webkit-transform 180ms ease-out;-webkit-transition:opacity 180ms ease-out,transform 180ms ease-out;transition:opacity 180ms ease-out,transform 180ms ease-out;opacity:0.5;}/*!sc*/
.dBTqwd:hover,.dBTqwd:focus{opacity:1;}/*!sc*/
.dBTqwd:hover svg,.dBTqwd:focus svg{opacity:1;}/*!sc*/
@media (min-width:1200px){.dBTqwd{display:none;}}/*!sc*/
data-styled.g258[id="toc__TocButton-sc-s358mc-2"]{content:"dBTqwd,"}/*!sc*/
.cDtaME{display:block;width:100%;line-height:1.25;height:auto;max-height:0;overflow:hidden;-webkit-transition:all 400ms ease-out;transition:all 400ms ease-out;}/*!sc*/
@media (min-width:1200px){.cDtaME{max-height:none;}}/*!sc*/
.cDtaME ul{list-style-type:none;padding:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;}/*!sc*/
.cDtaME li{display:block;margin:0;padding:0.375rem 0 0.375rem 0;}/*!sc*/
.cDtaME a{color:var(--color-secondary);}/*!sc*/
.cDtaME a:not(:focus):not(:hover){-webkit-text-decoration-color:transparent !important;text-decoration-color:transparent !important;}/*!sc*/
.cDtaME ul ul{padding:0.125rem 0 0.125rem 0.75rem;}/*!sc*/
.cDtaME ul ul li{padding:0.25rem 1.5rem 0.25rem 0;}/*!sc*/
.cDtaME ul ul li:last-child{padding-bottom:0rem;}/*!sc*/
.cDtaME ul ul a{font-size:0.9375rem;font-family:var(--font-primary);}/*!sc*/
data-styled.g259[id="toc__TocContent-sc-s358mc-3"]{content:"cDtaME,"}/*!sc*/
.jxbdwa{list-style-type:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:0 !important;margin:0 0 0 0 !important;}/*!sc*/
@media (min-width:1200px){.jxbdwa{margin:-0.25rem 0 0.5rem 0 !important;}}/*!sc*/
.jxbdwa li{position:relative;list-style-type:none;padding:0;margin:0;}/*!sc*/
.jxbdwa svg{opacity:0.2;color:currentColor;fill:currentColor;height:1.25rem;width:auto;margin:0 0.3rem 0 0.5rem;text-align:center;}/*!sc*/
.jxbdwa a{-webkit-text-decoration-color:transparent !important;text-decoration-color:transparent !important;-webkit-transition:all 185ms ease-out;transition:all 185ms ease-out;font-size:1rem;text-transform:uppercase;opacity:0.5 !important;color:var(--color-secondary);line-height:1 !important;}/*!sc*/
.jxbdwa a:hover{-webkit-text-decoration-color:currentColor !important;text-decoration-color:currentColor !important;opacity:1 !important;}/*!sc*/
data-styled.g260[id="Breadcrumbs__BreadcrumbList-sc-m2pnd4-0"]{content:"jxbdwa,"}/*!sc*/
.cgNgsx{display:block;width:100%;position:relative;padding:1rem 2rem 3rem 2rem;max-width:768px;margin:0 auto;}/*!sc*/
@media (min-width:500px){.cgNgsx{padding:1rem 3rem 3rem 3rem;}}/*!sc*/
@media (min-width:1200px){.cgNgsx{display:grid;max-width:none;padding:2rem 0rem 4rem 0rem;grid-template-areas:'. header header .' '. content toc .';grid-auto-columns:minmax(0,auto) minmax(300px,800px) clamp(17.5rem,10rem + 10vw,21.25rem) minmax(0,auto);grid-column-gap:3rem;}}/*!sc*/
data-styled.g261[id="slug__DocsGrid-sc-mwp08i-0"]{content:"cgNgsx,"}/*!sc*/
.jzaFHw{grid-area:header;width:100%;}/*!sc*/
data-styled.g262[id="slug__DocGridHeader-sc-mwp08i-1"]{content:"jzaFHw,"}/*!sc*/
.dWRZrf{grid-area:toc;width:100%;}/*!sc*/
@media (min-width:1200px){.dWRZrf{padding-top:4.5rem;}}/*!sc*/
data-styled.g263[id="slug__DocGridToc-sc-mwp08i-2"]{content:"dWRZrf,"}/*!sc*/
.jxPzoq{grid-area:content;width:100%;}/*!sc*/
data-styled.g264[id="slug__DocGridContent-sc-mwp08i-3"]{content:"jxPzoq,"}/*!sc*/
.iGcFds{font-size:2rem;line-height:1.2 !important;-webkit-letter-spacing:0.1px;-moz-letter-spacing:0.1px;-ms-letter-spacing:0.1px;letter-spacing:0.1px;color:var(--color-orange);position:relative;font-family:var(--font-tuner);font-style:normal;margin:0 0 0 0 !important;}/*!sc*/
@media (max-width:1199px){.iGcFds{margin:0 0 1.25rem 0 !important;}}/*!sc*/
data-styled.g265[id="slug__DocsPageTitle-sc-mwp08i-4"]{content:"iGcFds,"}/*!sc*/
</style></head><body><div id="__next" data-reactroot=""><div id="modal-root"></div><div id="modal-root"></div><div class="DocsLayout__DocsLayoutGrid-sc-upb6ik-0 jzEaFe"><button class="NavToggle-sc-1fhnk6m-0 DocumentationNavigation__MobileNavToggle-sc-1cawrzy-0 fwbGFA gPBYgd"><span></span><span></span><span></span></button><div class="DocsLeftSidebar-sc-1436pxj-0 iRDZEC"><div class="DocumentationNavigation__DocsSidebarHeaderWrapper-sc-1cawrzy-4 lczHyo"><div class="DocumentationNavigation__DocsSidebarHeader-sc-1cawrzy-3 dTjTYi"><a class="TinaIcon-sc-18svf2u-0 DocumentationNavigation__DocsDesktopTinaIcon-sc-1cawrzy-2 iuQlla eliKkz" href="/docs/"><h1><svg viewBox="0 0 49 68" fill="inherit" aria-labelledby="title desc"><path d="M31.462 30.178c3.301-2.73 4.764-18.868 6.193-24.669 1.43-5.8 7.34-5.507 7.34-5.507s-1.534 2.671-.909 4.664C44.712 6.659 49 8.44 49 8.44l-.925 2.438s-1.93-.247-3.08 2.052c-1.15 2.298.739 25.058.739 25.058s-6.907 13.623-6.907 19.374c0 5.752 2.723 10.572 2.723 10.572h-3.82s-5.605-6.67-6.754-10.002c-1.15-3.333-.69-6.666-.69-6.666s-6.091-.345-11.493 0c-5.401.345-9.004 4.988-9.654 7.585-.65 2.598-.92 9.083-.92 9.083H5.2C3.361 62.26 1.9 60.227 2.693 57.362c2.194-7.935 1.763-12.436 1.255-14.44C3.44 40.917 0 39.168 0 39.168c1.685-3.433 3.405-5.083 10.803-5.255 7.398-.172 17.357-1.004 20.658-3.735z"></path><path d="M12.25 57.03s.78 7.223 4.927 10.904h3.554c-3.554-4.026-3.941-14.519-3.941-14.519-1.808.589-4.31 2.696-4.54 3.615z"></path></svg><span>Docs</span></h1></a><div class="VersionSelect__SelectWrapper-sc-12e9kbk-0 cXCLqt"><select aria-label="Version"><option selected="" arial-label="vLatest" aria-current="true" value="https://tina.io">v.Latest</option><option arial-label="vLatest" aria-current="false" value="https://pre-beta.tina.io">v.Pre-Beta</option></select></div></div><div class="styles__SearchContainer-sc-fbvnb4-3 hutlFE"><input type="text" placeholder="Search" aria-label="Search" class="styles__Input-sc-fbvnb4-2 crzYKd"/><div class="styles__IconWrapper-sc-fbvnb4-1 zNUfi"><svg width="32" height="32" viewBox="0 0 32 32" fill="inherit" xmlns="http://www.w3.org/2000/svg"><path d="M21.3733 18.9312H20.3295L19.9595 18.5745C21.2544 17.0681 22.034 15.1125 22.034 12.9851C22.034 8.24146 18.1889 4.39631 13.4452 4.39631C8.70153 4.39631 4.85638 8.24146 4.85638 12.9851C4.85638 17.7288 8.70153 21.5739 13.4452 21.5739C15.5726 21.5739 17.5282 20.7943 19.0345 19.4994L19.3913 19.8694V20.9133L25.9981 27.5068L27.9669 25.538L21.3733 18.9312V18.9312ZM13.4452 18.9312C10.155 18.9312 7.4991 16.2753 7.4991 12.9851C7.4991 9.69495 10.155 7.03902 13.4452 7.03902C16.7354 7.03902 19.3913 9.69495 19.3913 12.9851C19.3913 16.2753 16.7354 18.9312 13.4452 18.9312Z"></path></svg></div></div></div><div class="DocsNavigationList__MobileMainNav-sc-1b0uukm-3 lmJcFY"><a href="/">Home</a><a href="/blog/">Blog</a><a href="/community/">Community</a><a href="https://tina-gql-playground.vercel.app/">Playground</a></div><div class="DocsNavigationList__DocsNavigationContainer-sc-1b0uukm-4 bbzqQM"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Introduction</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Overview</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/product-tour/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Product Tour</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/setup-overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Getting Started</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/using-tina-editor/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Using the Tina editor</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/schema/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Core Concepts</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/schema/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Content Modeling</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/features/data-fetching/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Data Fetching</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tinacms-context/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Contextual Editing</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/graphql/overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Using the GraphQL API</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/graphql/overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Overview</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/graphql/cli/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Running the Local GraphQL API</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/graphql/queries/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Querying the API</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 fOIpIm"><a href="/docs/graphql/client/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Autogenerated GraphQL Client</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/editing/overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Editing</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/editing/overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Overview</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/editing/markdown/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Markdown</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/editing/mdx/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Rich Text with MDX</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/editing/blocks/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Block-based editing</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 fOIpIm"><a href="/docs/editing/active-field-indicator/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Active Field Indicator</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/extending-tina/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Extending Tina</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/extending-tina/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Overview</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/configuring-field-plugin/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Configuring a field</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/extending-field-plugin/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Extending a field plugin</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/creating-field-component/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Creating a custom field component</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/customizing-forms/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Customizing a form</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/customizing-ui/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Customizing Tina&#x27;s UI</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/advanced/edit-state/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Manually editing Tina&#x27;s edit state</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Going To Production</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Overview</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/dashboard/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Tina Cloud Dashboard</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 iRgrTf"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/dashboard/registration/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">Registration</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/dashboard/projects/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">Projects</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/dashboard/users/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">Users</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/connecting-site/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Connecting the site</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/faq/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">FAQ</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/tina-cloud/api-versioning/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">API Versioning</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 fOIpIm"><a href="/docs/tina-cloud/branching/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Branching</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/cli-overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Reference</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Content Types</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 iRgrTf"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/string/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">string</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/number/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">number</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/datetime/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">datetime</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/boolean/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">boolean</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/image/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">image</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/reference/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">reference</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/object/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">object</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/types/rich-text/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">rich-text</a></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a selected="" href="/docs/cli-overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 kYegUj"><span>@tinacms/cli</span></a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/media-cloudinary/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">next-tinacms-cloudinary</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/toolkit/overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">@tinacms/toolkit</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 iRgrTf"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/toolkit/cms/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">The CMS</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/toolkit/forms/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">Forms</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/docs/reference/toolkit/fields/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">Field Plugins</a></div></div></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/guides/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ksaWTD">Guides</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 dBIoBq"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/guides/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">Overview</a></div><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/guides/#tina-cloud" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ceiNfw">TinaCMS</a></div><div class="DocsNavigationList__NavLevelChildContainer-sc-1b0uukm-1 iRgrTf"><div class="DocsNavigationList__NavLabelContainer-sc-1b0uukm-2 zQCwO"><a href="/guides/tina-cloud/add-tinacms-to-existing-site/overview/" class="DocsNavigationList__NavTitle-sc-1b0uukm-0 ikOmvk">Adding TinaCMS to an existing Next.js app</a></div></div></div></div></div><div class="Overlay-sc-1jblu14-0 fJygGt"></div><div class="DocsHeaderNav-sc-1xewo4o-0 lmgfKU"><ul><li><a href="/">Home</a></li><li><a href="/blog/">Blog</a></li><li><a href="/community/">Community</a></li><li><a href="https://tina-gql-playground.vercel.app/">Playground</a></li></ul><div class="actions"><div class="Button__ButtonGroup-sc-1lz2l6c-1 bnYTHf"><button color="blueInverted" class="Button-sc-1lz2l6c-0 eMYFLI">Sign In</button><button color="blue" class="Button-sc-1lz2l6c-0 iRgvKV">Get Started</button></div></div></div><div class="DocsLayout__DocsMain-sc-upb6ik-1 leeSVM"><div class="DocsTextWrapper__TextWrapper-sc-q3u5c2-0 jinSeo"><div class="slug__DocsGrid-sc-mwp08i-0 cgNgsx"><div class="slug__DocGridHeader-sc-mwp08i-1 jzaFHw"><ul class="Breadcrumbs__BreadcrumbList-sc-m2pnd4-0 jxbdwa"><li><a href="/docs/cli-overview/">Reference</a></li></ul><h1 class="slug__DocsPageTitle-sc-mwp08i-4 iGcFds">The TinaCMS CLI</h1></div><div class="slug__DocGridToc-sc-mwp08i-2 dWRZrf"><div class="toc__TocWrapper-sc-s358mc-1 dOOqmo"><button class="toc__TocButton-sc-s358mc-2 dBTqwd"><span>Show<!-- --> Table of Contents</span> <svg viewBox="0 0 32 32" fill="inherit"><path d="M11 24.792L12.265 26l9.212-8.794a1.653 1.653 0 000-2.412L12.265 6 11 7.208 20.21 16 11 24.792z"></path></svg></button><div class="toc__TocContent-sc-s358mc-3 cDtaME"><span class="toc__TocDesktopHeader-sc-s358mc-0 hExube">Table of Contents</span><ul><li><a href="#available-commands">Available Commands</a></li><li><a href="#basic-usage">Basic Usage:</a><ul><li><a href="#init">init</a></li><li><a href="#tinacms-serverstart"><code>tinacms server:start</code></a></li></ul></li><li><a href="#advanced-usage">Advanced Usage:</a><ul><li><a href="#tinacms-schemacompile"><code>tinacms schema:compile</code></a></li><li><a href="#tinacms-schematypes"><code>tinacms schema:types</code></a></li><li><a href="#tinacms-audit-experimental"><code>tinacms audit</code> (Experimental)</a></li></ul></li></ul></div></div></div><div class="slug__DocGridContent-sc-mwp08i-3 jxPzoq"><hr/><h2 id="available-commands"><a href="#available-commands" aria-label="Available Commands" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a>Available Commands</h2><div class="MarkdownContent__CodeWrapper-sc-1dnb0ow-1 gnpKzD"><pre style="color:black;background:#FAFAFA;text-shadow:0 1px white;font-family:Consolas, Monaco, &#x27;Andale Mono&#x27;, &#x27;Ubuntu Mono&#x27;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:.5em 0;overflow:auto"><code style="color:black;background:none;text-shadow:0 1px white;font-family:Consolas, Monaco, &#x27;Andale Mono&#x27;, &#x27;Ubuntu Mono&#x27;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none">&gt; yarn run tinacms

Usage: @tinacms/cli command [options]

Options:
  -V, --version             output the version number
  -h, --help                display help for command

Commands:
  server:start [options]    Start Filesystem Graphql Server
  schema:compile [options]  Compile schema into static files for the server
  schema:types [options]    Generate a GraphQL query for your site&#x27;s schema, (and optionally Typescript types)
  init [options]            Add Tina Cloud to an existing project
  audit [options]           Audit your schema and the files to check for errors
  help [command]            display help for command</code></pre></div><h2 id="basic-usage"><a href="#basic-usage" aria-label="Basic Usage:" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a>Basic Usage:</h2><h3 id="init"><a href="#init" aria-label="init" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a>init</h3><blockquote><p>The init command must be run inside of a Next.js project</p></blockquote><div class="MarkdownContent__CodeWrapper-sc-1dnb0ow-1 gnpKzD"><pre style="color:black;background:#FAFAFA;text-shadow:0 1px white;font-family:Consolas, Monaco, &#x27;Andale Mono&#x27;, &#x27;Ubuntu Mono&#x27;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:.5em 0;overflow:auto"><code style="color:black;background:none;text-shadow:0 1px white;font-family:Consolas, Monaco, &#x27;Andale Mono&#x27;, &#x27;Ubuntu Mono&#x27;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none">npx @tinacms/cli init</code></pre><button class="MarkdownContent__StyledCopyCodeButton-sc-1dnb0ow-0 itkhvo">Copy</button></div><p>This will,</p><ol><li>Install all of the dependencies you need</li><li>Setup a basic content model in your <a href="/docs/schema/"><code>schema.ts</code> file</a></li><li>Drop in a ready to go <code>_app.js</code> file</li><li>Add an editable page at <a href="http://localhost:3000/demo/blog/helloWorld">http://localhost:3000/demo/blog/helloWorld</a></li></ol><h3 id="tinacms-serverstart"><a href="#tinacms-serverstart" aria-label="tinacms server:start" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a><code>tinacms server:start</code></h3><blockquote><p>To run this command, you must have a valid <code>.tina/schema.ts</code> file.</p></blockquote><p><code>server:start</code> will compile the schema into static files, generates typescript types for you to use in your project and starts a graphQL server on <a href="http://localhost:4001">http://localhost:4001</a></p><p>This command also takes the following arguments</p><table><thead><tr><th>Argument</th><th>Description</th></tr></thead><tbody><tr><td><code>-c</code></td><td><code>-c</code> allows you to run a command as a child process. For example, you could run your next project alongside the graphQL server <code>yarn tinacms server:start -c next dev</code>.</td></tr><tr><td><code>--port &lt;port&gt;</code></td><td>Specify a port to run the server on. (default 4001)</td></tr><tr><td><code>--noWatch</code></td><td>Don&#x27;t regenerate config on file changes. This option is good to add when building in CI or if you do not want to watch the file system for changes.</td></tr><tr><td><code>--noSDK</code></td><td>Don&#x27;t generate the generated client SDK. <a href="/docs/graphql/client/">Read here</a> for more details about the SDK</td></tr></tbody></table><h2 id="advanced-usage"><a href="#advanced-usage" aria-label="Advanced Usage:" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a>Advanced Usage:</h2><h3 id="tinacms-schemacompile"><a href="#tinacms-schemacompile" aria-label="tinacms schema:compile" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a><code>tinacms schema:compile</code></h3><p><code>schema:compile</code> is used to compile and transpile the schema files into static file(s) ready to be used with the server. The compilation can be found in the <code>.tina/__generated__/config</code> directory.</p><h3 id="tinacms-schematypes"><a href="#tinacms-schematypes" aria-label="tinacms schema:types" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a><code>tinacms schema:types</code></h3><p><code>schema:types</code> will generate a GraphQL query for your site&#x27;s schema and typescript files. You will find the generated files in the <code>.tina/__generated__/</code> directory.</p><h3 id="tinacms-audit-experimental"><a href="#tinacms-audit-experimental" aria-label="tinacms audit (Experimental)" class="MarkdownContent__HeadingLink-sc-1dnb0ow-2 dYVUfN anchor"><svg viewBox="0 0 24 24" fill="inherit" class="link_svg__sc-AykKC link_svg__fRbkUu"><path d="M8.465 11.293c1.133-1.133 3.109-1.133 4.242 0l.707.707 1.414-1.414-.707-.707c-.943-.944-2.199-1.465-3.535-1.465s-2.592.521-3.535 1.465L4.929 12a5.008 5.008 0 000 7.071 4.983 4.983 0 003.535 1.462A4.982 4.982 0 0012 19.071l.707-.707-1.414-1.414-.707.707a3.007 3.007 0 01-4.243 0 3.005 3.005 0 010-4.243l2.122-2.121z"></path><path d="M12 4.929l-.707.707 1.414 1.414.707-.707a3.007 3.007 0 014.243 0 3.005 3.005 0 010 4.243l-2.122 2.121c-1.133 1.133-3.109 1.133-4.242 0L10.586 12l-1.414 1.414.707.707c.943.944 2.199 1.465 3.535 1.465s2.592-.521 3.535-1.465L19.071 12a5.008 5.008 0 000-7.071 5.006 5.006 0 00-7.071 0z"></path></svg></a><code>tinacms audit</code> (Experimental)</h3><p><code>audit</code> is used for checking for errors in your in your files. It currently does two things.</p><ol><li>Checks to see if the files have the correct extension</li><li>Submits each file as a Graphql mutation and checks for Graphql errors</li></ol><p>By default the mutation will not change the content of the files.</p><p>Takes the following options,</p><table><thead><tr><th>Argument</th><th>Description</th></tr></thead><tbody><tr><td><code>--clean</code></td><td>When this flag is used, it really submits the Graphql mutations to the file system. This means that it will clean out any fields that are not defined in your <code>schema.ts</code>. It is a good practice to do a <code>git commit</code> before doing this so one can undo changes easily.</td></tr></tbody></table></div></div></div></div><div class="Footer-sc-xdyusa-7 kjmqLC"><div class="Footer__FooterTop-sc-xdyusa-2 czCWKP"><a class="TinaIcon-sc-18svf2u-0 iuQlla" href="/"><h1><svg viewBox="0 0 49 68" fill="inherit" aria-labelledby="title desc"><path d="M31.462 30.178c3.301-2.73 4.764-18.868 6.193-24.669 1.43-5.8 7.34-5.507 7.34-5.507s-1.534 2.671-.909 4.664C44.712 6.659 49 8.44 49 8.44l-.925 2.438s-1.93-.247-3.08 2.052c-1.15 2.298.739 25.058.739 25.058s-6.907 13.623-6.907 19.374c0 5.752 2.723 10.572 2.723 10.572h-3.82s-5.605-6.67-6.754-10.002c-1.15-3.333-.69-6.666-.69-6.666s-6.091-.345-11.493 0c-5.401.345-9.004 4.988-9.654 7.585-.65 2.598-.92 9.083-.92 9.083H5.2C3.361 62.26 1.9 60.227 2.693 57.362c2.194-7.935 1.763-12.436 1.255-14.44C3.44 40.917 0 39.168 0 39.168c1.685-3.433 3.405-5.083 10.803-5.255 7.398-.172 17.357-1.004 20.658-3.735z"></path><path d="M12.25 57.03s.78 7.223 4.927 10.904h3.554c-3.554-4.026-3.941-14.519-3.941-14.519-1.808.589-4.31 2.696-4.54 3.615z"></path></svg></h1></a><ul class="LinkNav-sc-1m4ljfq-0 fvlWOS"><li><a href="/docs/">Docs</a></li><li><a href="/blog/">Blog</a></li><li><a href="/community/">Community</a></li></ul><div class="Footer__FooterSocial-sc-xdyusa-0 jcVyCJ"><iframe src="https://ghbtns.com/github-btn.html?user=tinacms&amp;repo=tinacms&amp;type=star&amp;count=true&amp;size=large" frameBorder="0" scrolling="0" width="150px" height="30px"></iframe><a href="https://twitter.com/tina_cms" target="_blank"><svg fill="inherit" viewBox="0 0 61 46"><path d="M19.358 45.17c22.663 0 35.059-17.065 35.059-31.863 0-.484 0-.967-.036-1.447a23.936 23.936 0 006.147-5.797 26.547 26.547 0 01-7.077 1.762c2.572-1.4 4.498-3.6 5.417-6.193a26.244 26.244 0 01-7.824 2.718c-1.857-1.796-4.315-2.984-6.99-3.383-2.677-.398-5.423.016-7.814 1.18-2.39 1.162-4.293 3.009-5.413 5.253a10.273 10.273 0 00-.781 7.163c-4.899-.223-9.691-1.38-14.066-3.396S7.745 6.322 4.652 2.863c-1.576 2.465-2.059 5.383-1.35 8.16.709 2.778 2.556 5.205 5.164 6.788a13.18 13.18 0 01-5.592-1.401v.142c0 2.585.986 5.09 2.787 7.091 1.802 2.001 4.31 3.374 7.098 3.886a13.5 13.5 0 01-5.563.192c.787 2.225 2.32 4.17 4.384 5.565 2.064 1.395 4.556 2.168 7.127 2.212-4.363 3.116-9.753 4.808-15.302 4.803-.98-.002-1.96-.056-2.933-.162 5.635 3.287 12.191 5.03 18.886 5.022"></path></svg></a><a class="github" href="https://github.com/tinacms/tinacms" target="_blank"><svg fill="inherit" viewBox="0 0 32 31.21"><g data-name="Layer 2"><path d="M16 0a16 16 0 00-5.06 31.18c.8.15 1.09-.34 1.09-.77v-2.72c-4.45 1-5.39-2.14-5.39-2.14a4.25 4.25 0 00-1.79-2.35c-1.46-1 .11-1 .11-1a3.39 3.39 0 012.45 1.65 3.39 3.39 0 004.65 1.33 3.44 3.44 0 011-2.14c-3.55-.4-7.29-1.78-7.29-7.91a6.21 6.21 0 011.65-4.29 5.67 5.67 0 01.18-4.2s1.34-.43 4.4 1.64a15.12 15.12 0 018 0c3-2.07 4.39-1.64 4.39-1.64a5.72 5.72 0 01.16 4.23 6.16 6.16 0 011.65 4.29c0 6.15-3.74 7.5-7.31 7.9A3.79 3.79 0 0120 26v4.39c0 .52.29.93 1.1.77A16 16 0 0016 0z" data-name="Layer 1"></path></g></svg></a></div></div><div class="Footer__FooterBottom-sc-xdyusa-3 caEWpB"><div class="Footer__FooterForm-sc-xdyusa-1 gugmmW"><span>Stay in touch 👉</span><form id="newsletter-signup" class="EmailForm__StyledEmailForm-sc-1ixwarn-0 jOCLGF"><input type="text" placeholder="Your email..." name="email" class="Input-sc-1dgks6g-0 hRqSwU"/></form></div><span class="Footer__Footnote-sc-xdyusa-5 LwcPJ"><span class="Footer__FootnoteLinks-sc-xdyusa-4 NJIno"><a href="/security/">Security</a><span class="Footer__FooterDivider-sc-xdyusa-6 wqvyL"></span><a href="/terms-of-service/">Terms of Service</a><span class="Footer__FooterDivider-sc-xdyusa-6 wqvyL"></span><a href="/privacy-notice/">Privacy Notice</a><span class="Footer__FooterDivider-sc-xdyusa-6 wqvyL"></span><a href="https://github.com/tinacms/tinacms/blob/master/LICENSE" target="_blank">License</a><br/><p>© TinaCMS 2019–<!-- -->2022</p></span></span></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"error":null,"preview":false,"file":{"sha":"","fileRelativePath":"content/docs/cli-overview.md","data":{"frontmatter":{"title":"The TinaCMS CLI"},"excerpt":" Available Commands Basic Usage: init The init command must be run inside of a Next.js project This will, Install all of the dependencies you need Setup a basic content model in your schema.ts file\u0026hellip;","markdownBody":"\n## Available Commands\n\n```sh\n\u003e yarn run tinacms\n\nUsage: @tinacms/cli command [options]\n\nOptions:\n  -V, --version             output the version number\n  -h, --help                display help for command\n\nCommands:\n  server:start [options]    Start Filesystem Graphql Server\n  schema:compile [options]  Compile schema into static files for the server\n  schema:types [options]    Generate a GraphQL query for your site's schema, (and optionally Typescript types)\n  init [options]            Add Tina Cloud to an existing project\n  audit [options]           Audit your schema and the files to check for errors\n  help [command]            display help for command\n```\n\n## Basic Usage:\n\n### init\n\n\u003e The init command must be run inside of a Next.js project\n\n```bash,copy\nnpx @tinacms/cli init\n```\n\nThis will,\n\n1. Install all of the dependencies you need\n2. Setup a basic content model in your [`schema.ts` file](/docs/schema/)\n3. Drop in a ready to go `_app.js` file\n4. Add an editable page at http://localhost:3000/demo/blog/helloWorld\n\n### `tinacms server:start`\n\n\u003e To run this command, you must have a valid `.tina/schema.ts` file.\n\n`server:start` will compile the schema into static files, generates typescript types for you to use in your project and starts a graphQL server on http://localhost:4001\n\nThis command also takes the following arguments\n\n| Argument        | Description                                                                                                                                                             |\n| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `-c`            | `-c` allows you to run a command as a child process. For example, you could run your next project alongside the graphQL server `yarn tinacms server:start -c next dev`. |\n| `--port \u003cport\u003e` | Specify a port to run the server on. (default 4001)                                                                                                                     |\n| `--noWatch`     | Don't regenerate config on file changes. This option is good to add when building in CI or if you do not want to watch the file system for changes.                     |\n| `--noSDK`       | Don't generate the generated client SDK. [Read here](/docs/graphql/client/) for more details about the SDK                                                              |\n\n\n\n\n## Advanced Usage:\n### `tinacms schema:compile`\n\n`schema:compile` is used to compile and transpile the schema files into static file(s) ready to be used with the server. The compilation can be found in the `.tina/__generated__/config` directory.\n\n\n### `tinacms schema:types` \n\n`schema:types` will generate a GraphQL query for your site's schema and typescript files. You will find the generated files in the `.tina/__generated__/` directory.\n\n### `tinacms audit` (Experimental)\n\n`audit` is used for checking for errors in your in your files. It currently does two things.\n\n1. Checks to see if the files have the correct extension\n2. Submits each file as a Graphql mutation and checks for Graphql errors\n\nBy default the mutation will not change the content of the files.\n\nTakes the following options,\n\n| Argument  | Description                                                                                                                                                                                                                                                             |\n| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `--clean` | When this flag is used, it really submits the Graphql mutations to the file system. This means that it will clean out any fields that are not defined in your `schema.ts`. It is a good practice to do a `git commit` before doing this so one can undo changes easily. |"}},"tocItems":"  - [Available Commands](#available-commands)\n  - [Basic Usage:](#basic-usage)\n    - [init](#init)\n    - [`tinacms server:start`](#tinacms-serverstart)\n  - [Advanced Usage:](#advanced-usage)\n    - [`tinacms schema:compile`](#tinacms-schemacompile)\n    - [`tinacms schema:types`](#tinacms-schematypes)\n    - [`tinacms audit` (Experimental)](#tinacms-audit-experimental)\n","docsNav":[{"category":"Introduction","slug":"/docs/","description":"Quickly Setup Tina on your site","items":[{"id":"/docs/","slug":"/docs/","title":"Overview"},{"id":"/docs/product-tour/","slug":"/docs/product-tour/","title":"Product Tour"},{"id":"/docs/setup-overview/","slug":"/docs/setup-overview/","title":"Getting Started"},{"id":"/docs/using-tina-editor/","slug":"/docs/using-tina-editor/","title":"Using the Tina editor"}]},{"category":"Core Concepts","slug":"/docs/schema/","description":"The JavaScript toolkit for building content management interfaces","items":[{"title":"Content Modeling","id":"/docs/schema","slug":"/docs/schema/"},{"title":"Data Fetching","id":"/docs/features/data-fetching","slug":"/docs/features/data-fetching/"},{"title":"Contextual Editing","id":"/docs/tinacms-context","slug":"/docs/tinacms-context/"}]},{"category":"Using the GraphQL API","slug":"/docs/graphql/overview/","items":[{"id":"/docs/graphql/overview/","slug":"/docs/graphql/overview/","title":"Overview"},{"id":"/docs/graphql/cli/","slug":"/docs/graphql/cli/","title":"Running the Local GraphQL API"},{"id":"/docs/graphql/queries/","slug":"/docs/graphql/queries/","title":"Querying the API"},{"id":"/docs/graphql/client/","slug":"/docs/graphql/client/","title":"Autogenerated GraphQL Client","beta":true}]},{"title":"Editing","id":"/docs/editing/overview","slug":"/docs/editing/overview/","items":[{"title":"Overview","id":"/docs/editing/overview","slug":"/docs/editing/overview/"},{"title":"Markdown","id":"/docs/editing/markdown","slug":"/docs/editing/markdown/"},{"title":"Rich Text with MDX","id":"/docs/editing/mdx","slug":"/docs/editing/mdx/"},{"title":"Block-based editing","id":"/docs/editing/blocks","slug":"/docs/editing/blocks/"},{"title":"Active Field Indicator","id":"/docs/editing/active-field-indicator","slug":"/docs/editing/active-field-indicator/","beta":true}]},{"title":"Extending Tina","id":"/docs/advanced/extending-tina","slug":"/docs/advanced/extending-tina/","items":[{"title":"Overview","id":"/docs/advanced/extending-tina","slug":"/docs/advanced/extending-tina/"},{"title":"Configuring a field","id":"/docs/advanced/configuring-field-plugin","slug":"/docs/advanced/configuring-field-plugin/"},{"title":"Extending a field plugin","id":"/docs/advanced/extending-field-plugin","slug":"/docs/advanced/extending-field-plugin/"},{"title":"Creating a custom field component","id":"/docs/advanced/creating-field-component","slug":"/docs/advanced/creating-field-component/"},{"title":"Customizing a form","id":"/docs/advanced/customizing-forms","slug":"/docs/advanced/customizing-forms/"},{"title":"Customizing Tina's UI","id":"/docs/advanced/customizing-ui","slug":"/docs/advanced/customizing-ui/"},{"title":"Manually editing Tina's edit state","id":"/docs/advanced/edit-state/","slug":"/docs/advanced/edit-state/"}]},{"category":"Going To Production","slug":"/docs/tina-cloud","description":"Powerful Git-based content management for teams","items":[{"id":"/docs/tina-cloud/","slug":"/docs/tina-cloud/","title":"Overview"},{"id":"/docs/tina-cloud/dashboard/","slug":"/docs/tina-cloud/dashboard/","title":"Tina Cloud Dashboard","items":[{"id":"/docs/tina-cloud/dashboard/registration/","slug":"/docs/tina-cloud/dashboard/registration/","title":"Registration"},{"id":"/docs/tina-cloud/dashboard/projects/","slug":"/docs/tina-cloud/dashboard/projects/","title":"Projects"},{"id":"/docs/tina-cloud/dashboard/users/","slug":"/docs/tina-cloud/dashboard/users/","title":"Users"}]},{"id":"/docs/tina-cloud/connecting-site/","slug":"/docs/tina-cloud/connecting-site/","title":"Connecting the site"},{"id":"/docs/tina-cloud/faq/","slug":"/docs/tina-cloud/faq/","title":"FAQ"},{"id":"/docs/tina-cloud/api-versioning/","slug":"/docs/tina-cloud/api-versioning/","title":"API Versioning"},{"id":"/docs/tina-cloud/branching/","slug":"/docs/tina-cloud/branching/","title":"Branching","beta":true}]},{"category":"Reference","slug":"/docs/cli-overview/","description":"The JavaScript toolkit for building content management interfaces","items":[{"id":"/docs/reference/types/","slug":"/docs/reference/types/","title":"Content Types","items":[{"id":"/docs/reference/types/string/","slug":"/docs/reference/types/string/","title":"string"},{"id":"/docs/reference/types/number/","slug":"/docs/reference/types/number/","title":"number"},{"id":"/docs/reference/types/datetime/","slug":"/docs/reference/types/datetime/","title":"datetime"},{"id":"/docs/reference/types/boolean/","slug":"/docs/reference/types/boolean/","title":"boolean"},{"id":"/docs/reference/types/image/","slug":"/docs/reference/types/image/","title":"image"},{"id":"/docs/reference/types/reference/","slug":"/docs/reference/types/reference/","title":"reference"},{"id":"/docs/reference/types/object/","slug":"/docs/reference/types/object/","title":"object"},{"id":"/docs/reference/types/rich-text/","slug":"/docs/reference/types/rich-text/","title":"rich-text"}]},{"id":"/docs/cli-overview/","slug":"/docs/cli-overview/","title":"@tinacms/cli"},{"title":"next-tinacms-cloudinary","id":"/docs/media-cloudinary/","slug":"/docs/media-cloudinary/"},{"title":"@tinacms/toolkit","id":"/docs/reference/toolkit/overview/","slug":"/docs/reference/toolkit/overview/","items":[{"id":"/docs/reference/toolkit/cms/","slug":"/docs/reference/toolkit/cms/","title":"The CMS"},{"id":"/docs/reference/toolkit/forms/","slug":"/docs/reference/toolkit/forms/","title":"Forms"},{"title":"Field Plugins","id":"fields/","slug":"/docs/reference/toolkit/fields/","expandOnSelect":true,"items":[{"id":"/docs/reference/toolkit/fields/text/","slug":"/docs/reference/toolkit/fields/text/","title":"Text"},{"id":"/docs/reference/toolkit/fields/textarea/","slug":"/docs/reference/toolkit/fields/textarea/","title":"Text Area"},{"id":"/docs/reference/toolkit/fields/number/","slug":"/docs/reference/toolkit/fields/number/","title":"Number"},{"id":"/docs/reference/toolkit/fields/image/","slug":"/docs/reference/toolkit/fields/image/","title":"Image"},{"id":"/docs/reference/toolkit/fields/color/","slug":"/docs/reference/toolkit/fields/color/","title":"Color"},{"id":"/docs/reference/toolkit/fields/toggle/","slug":"/docs/reference/toolkit/fields/toggle/","title":"Toggle"},{"id":"/docs/reference/toolkit/fields/radio-group/","slug":"/docs/reference/toolkit/fields/radio-group/","title":"Radio Group"},{"id":"/docs/reference/toolkit/fields/select/","slug":"/docs/reference/toolkit/fields/select/","title":"Select"},{"id":"/docs/reference/toolkit/fields/tags/","slug":"/docs/reference/toolkit/fields/tags/","title":"Tags"},{"id":"/docs/reference/toolkit/fields/list/","slug":"/docs/reference/toolkit/fields/list/","title":"List"},{"id":"/docs/reference/toolkit/fields/group/","slug":"/docs/reference/toolkit/fields/group/","title":"Group"},{"id":"/docs/reference/toolkit/fields/group-list/","slug":"/docs/reference/toolkit/fields/group-list/","title":"Group List"},{"id":"/docs/reference/toolkit/fields/blocks/","slug":"/docs/reference/toolkit/fields/blocks/","title":"Blocks"},{"id":"/docs/reference/toolkit/fields/date/","slug":"/docs/reference/toolkit/fields/date/","title":"Date \u0026 Time"},{"id":"/docs/reference/toolkit/fields/markdown/","slug":"/docs/reference/toolkit/fields/markdown/","title":"Markdown"},{"id":"/docs/reference/toolkit/fields/html/","slug":"/docs/reference/toolkit/fields/html/","title":"HTML"}]}]}]},{"category":"Guides","slug":"/guides","description":"Learn to use Tina step-by-step","items":[{"id":"/guides/","slug":"/guides/","title":"Overview"},{"id":"/guides#tina-cloud","slug":"/guides#tina-cloud","title":"TinaCMS","items":[{"id":"/guides/tina-cloud/add-tinacms-to-existing-site/overview/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/overview/","title":"Adding TinaCMS to an existing Next.js app","expandOnSelect":true,"items":[{"title":"Overview","id":"/guides/tina-cloud/add-tinacms-to-existing-site/overview/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/overview/","data":"./overview.md"},{"title":"Creating our Application","id":"/guides/tina-cloud/add-tinacms-to-existing-site/create-app/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/create-app/","data":"./create-app.md"},{"title":"Content Modelling","id":"/guides/tina-cloud/add-tinacms-to-existing-site/content-modelling/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/content-modelling/","data":"./content-modelling.md"},{"title":"Add Tina to our pages","id":"/guides/tina-cloud/add-tinacms-to-existing-site/next-changes/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/next-changes/","data":"./next-changes.md"},{"title":"Adding Plugins","id":"/guides/tina-cloud/add-tinacms-to-existing-site/markdown-plugin/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/markdown-plugin/","data":"./markdown-plugin.md"},{"title":"Tina Cloud and Deployment","id":"/guides/tina-cloud/add-tinacms-to-existing-site/deployment/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/deployment/","data":"./deployment.md"},{"title":"Next Steps","id":"/guides/tina-cloud/add-tinacms-to-existing-site/next-steps/","slug":"/guides/tina-cloud/add-tinacms-to-existing-site/next-steps/","data":"./next-steps.md"}]}]}]}],"nextPage":{"slug":null,"title":null},"prevPage":{"slug":null,"title":null}},"__N_SSG":true},"page":"/docs/[...slug]","query":{"slug":["cli-overview"]},"buildId":"6YFZ1_rI2Dy0VA1F87LGU","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body></html>
gjtorikian commented 2 years ago

Hmm, odd. Let me take a closer look.

gjtorikian commented 2 years ago

Here's the output for this file (it's ugly, but it does have a id="init" element (in your comment you mentioned id="tina", not sure if you searched for the wrong element )):

I see href="#init", but no id="init". What are the lines around it?

If this worked before, it may have been working incorrectly (i.e., passing when it shouldn't have passed).

jamespohalloran commented 2 years ago

I see href="#init", but no id="init". What are the lines around it?

In the html output I included above? It's next to the href tag:

Screen Shot 2022-07-15 at 6 49 01 PM
gjtorikian commented 2 years ago

I think I see. Remove --assume_extension from your system call and report back.

Edit: HTML-Proofer 4 now assumes extension by default, and the behavior of this option has changed here.

jamespohalloran commented 2 years ago

I think I see. Remove --assume_extension from your system call and report back.

Just tried removing that flag and still getting the same error. (Also, thanks a lot for looking into this by the way! )

riccardoporreca commented 2 years ago

Hi @jamespohalloran, was curious about this and did a quick check: I can second @gjtorikian on

Unfortunately, it looks like Tina's website uses Javascript to add anchor tags. html-proofer only works on static site generators which produce their HTML beforehead.

When I look at the website's source, there's no reference to a id="tina". There is, however, a big JSON props hash which I assume is what constructs the anchors and the rest of the page.

If you look at view-source:https://tina.io/docs/cli-overview in a browser like Chrome or Firefox, there is no instance of "init". If you save the page from the browser (or, even better, retrieve it via curl) and open the downloaded HTML file, there is no populated content (because the necessary Javascript is not available I guess).

Not sure about the HTML you included above https://github.com/gjtorikian/html-proofer/issues/725#issuecomment-1185423701, perhaps it is the content of the page after being populated by Javascript

Hope this helps

jamespohalloran commented 2 years ago

If you look at view-source:https://tina.io/docs/cli-overview in a browser like Chrome or Firefox, there is no instance of "init". If you save the page from the browser (or, even better, retrieve it via curl) and open the downloaded HTML file, there is no populated content (because the necessary Javascript is not available I guess).

Hmm, well I'm a bit stumped about why that may be. But! I'm actually running the check on pregenerated html in an output directory and not our live site. The generated output file does have these id's

Screen Shot 2022-07-18 at 11 51 10 AM

If I'm the only one running into this though, maybe there is something weird going on in my stack..

gjtorikian commented 2 years ago

@jamespohalloran Could you zip up your build output and attach it here?

riccardoporreca commented 2 years ago

I'm actually running the check on pregenerated html in an output directory and not our live site. The generated output file does have these id's

I see... if I save what you pasted in the comment above to tina-cli-overview-gh-comment.html and run htmlproofer on the file

~/gems/gems/html-proofer-4.0.1/bin/htmlproofer tina-cli-overview-gh-comment.html --only_4xx --assume_extension --checks "Links,Images,Scripts,Favicon,OpenGraph" --ignore_status_codes "400, 403, 409, 429" --allow_hash_href --ignore_files "/.+\/(blog|404)\/.+/"

(Running with 4.0.1 explicitly, same for the latest 4.2.0) I only see the obvious missing internal links (due to the rest of the file being unavailable) but no error on missing hash, meaning I cannot reproduce the issue

~/gems/gems/html-proofer-4.0.1/bin/htmlproofer tina-cli-overview-gh-comment.html \
  --only_4xx --assume_extension --checks "Links,Images,Scripts,Favicon,OpenGraph" --ignore_status_codes "400, 403, 409, 429" --allow_hash_href --ignore_files "/.+\/(blog|404)\/.+/" \
  2>&1 | grep hash

For comparison, saving the live website page as tina-cli-overview-live.html and running on that file yields

~/gems/gems/html-proofer-4.0.1/bin/htmlproofer tina-cli-overview-live.html --only_4xx --assume_extension --checks "Links,Images,Scripts,Favicon,OpenGraph" --ignore_status_codes "400, 403, 409, 429" --allow_hash_href --ignore_files "/.+\/(blog|404)\/.+/" 2>&1 | grep hash
  internally linking to #available-commands; the file exists, but the hash 'available-commands' does not
  internally linking to #basic-usage; the file exists, but the hash 'basic-usage' does not
  internally linking to #init; the file exists, but the hash 'init' does not
  internally linking to #optional-parameters; the file exists, but the hash 'optional-parameters' does not
  internally linking to #tinacms-serverstart; the file exists, but the hash 'tinacms-serverstart' does not
  internally linking to #advanced-usage; the file exists, but the hash 'advanced-usage' does not
  internally linking to #tinacms-schemacompile; the file exists, but the hash 'tinacms-schemacompile' does not
  internally linking to #tinacms-schematypes; the file exists, but the hash 'tinacms-schematypes' does not
  internally linking to #tinacms-audit-experimental; the file exists, but the hash 'tinacms-audit-experimental' does not
  internally linking to #tinacms-serverwaitfordb-experimental; the file exists, but the hash 'tinacms-serverwaitfordb-experimental' does not
yktoo commented 2 years ago

I face the same issue, HTMLProofer fails to find hash links that work perfectly in the browser, here's an example of a failed build: https://github.com/yktoo/yktoo.com/runs/7522465522

It's about a static website, fully generated out at build time by Hugo.

Adding --check-external-hash false or --check-internal-hash false doesn't seem to have any effect.

gjtorikian commented 2 years ago

@yktoo I was able to fix your issue in #741, and I am hoping that it also resolves the issue @jamespohalloran is seeing. Feel free to reopen if it's not correct.

jamespohalloran commented 2 years ago

I'm using this tool to run htmlproofer as a GitHub action, is there a known way to test this change? (My builds are still using htmlproofer 4.2.0) (Sorry, this is might be a bit out of scope. I've seen this chabad360/htmlproofer referenced within this repo though, so not certain on the relationship)

riccardoporreca commented 2 years ago

@jamespohalloran, the action chabad360/htmlproofer seems to have nightly builds picking up the latest released version of html-proofer... so it should upgrade to 4.3.0 in a few hours

yktoo commented 2 years ago

@gjtorikian I'm now getting (see this build):

bundler: failed to load command: htmlproofer (/home/runner/work/yktoo.com/yktoo.com/vendor/bundle/ruby/3.0.0/bin/htmlproofer)
/home/runner/work/yktoo.com/yktoo.com/vendor/bundle/ruby/3.0.0/gems/mercenary-0.4.0/lib/mercenary/program.rb:33:in `go': missing argument: --ignore_empty_mailto (OptionParser::MissingArgument)
    from /home/runner/work/yktoo.com/yktoo.com/vendor/bundle/ruby/3.0.0/gems/mercenary-0.4.0/lib/mercenary.rb:21:in `program'
    from /home/runner/work/yktoo.com/yktoo.com/vendor/bundle/ruby/3.0.0/gems/html-proofer-4.3.0/bin/htmlproofer:11:in `<top (required)>'
    from /home/runner/work/yktoo.com/yktoo.com/vendor/bundle/ruby/3.0.0/bin/htmlproofer:25:in `load'
    from /home/runner/work/yktoo.com/yktoo.com/vendor/bundle/ruby/3.0.0/bin/htmlproofer:25:in `<top (required)>'
    from /opt/hostedtoolcache/Ruby/3.0.3/x[6](https://github.com/yktoo/yktoo.com/runs/7536467749?check_suite_focus=true#step:6:6)4/lib/ruby/3.0.0/bundler/cli/exec.rb:58:in `load'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/cli/exec.rb:58:in `kernel_load'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/cli/exec.rb:23:in `run'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/cli.rb:4[7](https://github.com/yktoo/yktoo.com/runs/7536467749?check_suite_focus=true#step:6:7)[8](https://github.com/yktoo/yktoo.com/runs/7536467749?check_suite_focus=true#step:6:8):in `exec'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor.rb:3[9](https://github.com/yktoo/yktoo.com/runs/7536467749?check_suite_focus=true#step:6:9)2:in `dispatch'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/cli.rb:31:in `dispatch'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/cli.rb:25:in `start'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/gems/3.0.0/gems/bundler-2.2.32/libexec/bundle:49:in `block in <top (required)>'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/3.0.0/bundler/friendly_errors.rb:[10](https://github.com/yktoo/yktoo.com/runs/7536467749?check_suite_focus=true#step:6:10)3:in `with_friendly_errors'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/lib/ruby/gems/3.0.0/gems/bundler-2.2.32/libexec/bundle:37:in `<top (required)>'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/bin/bundle:[23](https://github.com/yktoo/yktoo.com/runs/7536467749?check_suite_focus=true#step:6:23):in `load'
    from /opt/hostedtoolcache/Ruby/3.0.3/x64/bin/bundle:23:in `<main>'
Error: Process completed with exit code 1.

That used to work in the previous version of HTMLProofer.

Update: I seem to have been sloppy with the arguments. With HTMLProofer 4.3.0 this command succeeds:

bundle exec htmlproofer public/
    --allow-missing-href  true
    --checks              Links,Images,Scripts,Favicon,OpenGraph
    --disable-external    true
    --enforce-https       false
    --ignore-empty-mailto true

Thanks for the fix!