CINXE.COM
Forestry.io CMS | TinaCMS
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/a21a12b81d68c556.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/e25ae0f408b08140.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/b4ef80af4316d518.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/e4bfdb3bf5c78794.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f042891856ad1cff.js"/><script src="/_next/static/chunks/6f01dbf3-e849b78737c1f503.js" async=""></script><script src="/_next/static/chunks/477-5e840344e78b4170.js" async=""></script><script src="/_next/static/chunks/main-app-2d48c77688a7c2ef.js" async=""></script><script src="/_next/static/chunks/36e1c10d-2c75c85bfcd15184.js" async=""></script><script src="/_next/static/chunks/47d8844f-d460cfc195a1b131.js" async=""></script><script src="/_next/static/chunks/fee69bc6-d849e61ff56d71aa.js" async=""></script><script src="/_next/static/chunks/b63b1b3f-0250379bcc006b00.js" async=""></script><script src="/_next/static/chunks/3cde7dfc-932df3bc62e9f49c.js" async=""></script><script src="/_next/static/chunks/9ca845be-c2881f71963e3e16.js" async=""></script><script src="/_next/static/chunks/5f881512-0c723aad1c032cc4.js" async=""></script><script src="/_next/static/chunks/24a46c76-3bb4aea579f1257f.js" async=""></script><script src="/_next/static/chunks/8127-431c188c056dc939.js" async=""></script><script src="/_next/static/chunks/8719-52960ab5f93872bc.js" async=""></script><script src="/_next/static/chunks/2971-7a9d45818d8b9152.js" async=""></script><script src="/_next/static/chunks/527-78caf0adbad54443.js" async=""></script><script src="/_next/static/chunks/1712-679033401756eef3.js" async=""></script><script src="/_next/static/chunks/4720-f49273d8c0d1a1fe.js" async=""></script><script src="/_next/static/chunks/2393-5c29fc68dc1b5970.js" async=""></script><script src="/_next/static/chunks/5248-7d9cdd3cfda2d7ff.js" async=""></script><script src="/_next/static/chunks/9507-3e3899073a49e836.js" async=""></script><script src="/_next/static/chunks/app/layout-83ca06937e351397.js" async=""></script><script src="/_next/static/chunks/app/error-1ee4842b82036da4.js" async=""></script><script src="/_next/static/chunks/app/not-found-a64dca83a85b5fa4.js" async=""></script><script src="/_next/static/chunks/b9ba547f-e4bc6e4ef83642ea.js" async=""></script><script src="/_next/static/chunks/7a8a3e83-d415e92019f96bff.js" async=""></script><script src="/_next/static/chunks/9746af58-5a842c3cf0df5782.js" async=""></script><script src="/_next/static/chunks/7f27ae6c-2bdb8ffe9e2ab46e.js" async=""></script><script src="/_next/static/chunks/171d8454-5034688345ae4380.js" async=""></script><script src="/_next/static/chunks/702565d7-900e5569f9bae283.js" async=""></script><script src="/_next/static/chunks/3438-da0e03dc19cf5890.js" async=""></script><script src="/_next/static/chunks/224-db9420e1faa8d146.js" async=""></script><script src="/_next/static/chunks/2267-1113b0e2d8acd655.js" async=""></script><script src="/_next/static/chunks/9295-6b730bcfd9aae16c.js" async=""></script><script src="/_next/static/chunks/5835-680704ea25937d10.js" async=""></script><script src="/_next/static/chunks/app/%5Bslug%5D/page-4e04ec9758768ad4.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtm.js?id=GTM-K35ZHHJF" as="script"/><meta name="theme-color" content="#E6FAF8"/><link rel="alternate" type="application/rss+xml" href="/rss.xml"/><meta name="googlebot" content="index,follow"/><meta name="robots" content="index,follow"/><title>Forestry.io CMS | TinaCMS</title><meta name="description" content="The Forestry.io team is now focused on building TinaCMS. If you wish to migrate your Forestry site to Tina, follow the guide below."/><meta property="og:title" content="Forestry.io CMS"/><meta property="og:description" content="The Forestry.io team is now focused on building TinaCMS. If you wish to migrate your Forestry site to Tina, follow the guide below."/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@tinacms"/><meta name="twitter:title" content="TinaCMS – Headless CMS with GitHub & Markdown Support"/><meta name="twitter:description" content="TinaCMS is a fully open-source headless CMS that supports Git"/><link rel="icon" href="/favicon/favicon.ico"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script><style data-styled="" data-styled-version="6.1.14">.bUKlzx h1,.bUKlzx h2,.bUKlzx h3,.bUKlzx h4,.bUKlzx h5,.bUKlzx h6{margin:2rem 0 1.5rem 0;}/*!sc*/ .bUKlzx h1:first-child,.bUKlzx h2:first-child,.bUKlzx h3:first-child,.bUKlzx h4:first-child,.bUKlzx h5:first-child,.bUKlzx h6:first-child{margin-top:0;}/*!sc*/ .bUKlzx h1:last-child,.bUKlzx h2:last-child,.bUKlzx h3:last-child,.bUKlzx h4:last-child,.bUKlzx h5:last-child,.bUKlzx h6:last-child{margin-bottom:0;}/*!sc*/ .bUKlzx p,.bUKlzx iframe,.bUKlzx blockquote,.bUKlzx image{margin:1.5rem 0;}/*!sc*/ .bUKlzx p:first-child,.bUKlzx iframe:first-child,.bUKlzx blockquote:first-child,.bUKlzx image:first-child{margin-top:0;}/*!sc*/ .bUKlzx p:last-child,.bUKlzx iframe:last-child,.bUKlzx blockquote:last-child,.bUKlzx image:last-child{margin-bottom:0;}/*!sc*/ .bUKlzx ul,.bUKlzx ol{padding-left:2rem;margin-bottom:1.5rem;}/*!sc*/ .bUKlzx li{margin-bottom:0.5rem;}/*!sc*/ .bUKlzx h1,.bUKlzx h2,.bUKlzx h3,.bUKlzx h4,.bUKlzx h5,.bUKlzx h6{position:relative;font-family:var(--font-tuner);font-weight:regular;font-style:normal;}/*!sc*/ .bUKlzx h1 em,.bUKlzx h2 em,.bUKlzx h3 em,.bUKlzx h4 em,.bUKlzx h5 em,.bUKlzx h6 em{font-style:normal;}/*!sc*/ .bUKlzx h1,.bUKlzx .h1{display:inline-block;font-size:2.5rem;line-height:1.3;letter-spacing:0.1px;color:transparent;background:linear-gradient( to bottom right,var(--color-orange-light),var(--color-orange),var(--color-orange-dark) );-webkit-background-clip:text;background-clip:text;}/*!sc*/ .bUKlzx h1 em,.bUKlzx .h1 em{color:var(--color-secondary-dark);}/*!sc*/ @media (min-width:800px){.bUKlzx h1,.bUKlzx .h1{font-size:3rem;}}/*!sc*/ @media (min-width:1200px){.bUKlzx h1,.bUKlzx .h1{font-size:4rem;}}/*!sc*/ .bUKlzx h2,.bUKlzx .h2{display:inline-block;font-size:2.25rem;line-height:1.3;letter-spacing:0.1px;color:transparent;background:linear-gradient( to bottom right,var(--color-orange-light),var(--color-orange),var(--color-orange-dark) );-webkit-background-clip:text;background-clip:text;font-weight:bold;}/*!sc*/ .bUKlzx h2 em,.bUKlzx .h2 em{color:var(--color-secondary-dark);}/*!sc*/ .bUKlzx h3,.bUKlzx .h3{font-size:1.5rem;font-weight:bold;line-height:1.3;letter-spacing:0.1px;color:var(--color-secondary-dark);}/*!sc*/ .bUKlzx h3 em,.bUKlzx .h3 em{color:var(--color-orange);}/*!sc*/ .bUKlzx h4,.bUKlzx .h4{font-size:1.25rem;font-weight:bold;line-height:1.3;letter-spacing:0.1px;color:var(--color-secondary-dark);}/*!sc*/ .bUKlzx h4 em,.bUKlzx .h4 em{color:var(--color-orange);}/*!sc*/ .bUKlzx p{font-size:16px;color:var(--color-secondary-dark);}/*!sc*/ @media (min-width:685px){.bUKlzx p{font-size:18px;}}/*!sc*/ .bUKlzx 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*/ .bUKlzx 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*/ .bUKlzx a:not([class]){color:inherit;opacity:0.8;text-decoration:underline rgba(0,0,0,0.3);transition:all 185ms ease-out;}/*!sc*/ .bUKlzx a:not([class]):hover,.bUKlzx a:not([class]):focus{opacity:1;color:var(--color-orange);text-decoration-color:var(--color-orange);}/*!sc*/ .bUKlzx 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*/ .bUKlzx hr{display:block;border:none;border-image:initial;background:url('/svg/hr.svg');background-size:auto 100%;background-repeat:no-repeat;height:7px;width:100%;margin:2rem 0px;}/*!sc*/ .bUKlzx strong{font-weight:bold;}/*!sc*/ .bUKlzx ul{list-style-type:disc;}/*!sc*/ .bUKlzx li{font-size:1.125rem;color:var(--color-secondary-dark);}/*!sc*/ .bUKlzx *: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*/ .bUKlzx pre{border-radius:5px;border-width:1px;border-style:solid;border-color:rgb(237,238,238);border-image:initial;}/*!sc*/ .bUKlzx table{width:100%;line-height:1.375;}/*!sc*/ .bUKlzx tr:nth-child(even){background-color:var(--color-light);}/*!sc*/ .bUKlzx th,.bUKlzx td{padding:0.4rem 0.5rem;}/*!sc*/ .bUKlzx th{border-bottom:3px solid var(--color-light-dark);font-family:var(--font-tuner);font-weight:regular;font-style:normal;color:var(--color-orange);letter-spacing:0.5px;font-size:1.125rem;line-height:1.3;letter-spacing:0.1px;}/*!sc*/ .bUKlzx td{border-bottom:1px solid var(--color-light-dark);}/*!sc*/ data-styled.g22[id="sc-6ec7f2e8-0"]{content:"bUKlzx,"}/*!sc*/ </style></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-K35ZHHJF" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div class=" relative z-10 w-full flex flex-col items-center justify-center py-3 px-4 text-base leading-[1.2] bg-[linear-gradient(90deg,white,#f2fdfc_33.3%,#e6faf8_100%)] shadow-[0_0_8px_2px_rgba(0,0,0,0.03)] border-b border-[#d1faf6] text-[var(--color-tina-blue)] lg:flex-row lg:pl-8 lg:pr-10 "><div class=" flex items-center mt-[0.3rem] mb-2 lg:mb-0 "><span class="pr-2 text-[#2296FE]">Loving Tina? ⭐️ us on<!-- --> <a href="https://github.com/tinacms/tinacms" target="_blank" rel="noopener noreferrer" class="underline">GitHub</a></span><span><a href="https://github.com/tinacms/tinacms" data-size="medium" data-show-count="true" aria-label="Star TinaCMS on GitHub">Star</a></span></div></div><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><div class="flex flex-col min-h-screen blob-bg font-sans bg-blob-bg bg-[length:100%_100%] bg-top bg-fixed "><div class="pb-0 lg:pb-20"><div class="relative w-full"><div class="flex min-[1300px]:hidden w-full py-4 pl-4 pr-18 items-center justify-between gap-6"><div class="fixed top-0 right-0 h-full w-3/4 bg-gradient-to-t from-blue-50 to-white shadow-2xl z-50 transition ease-out duration-200 translate-x-full"><button class="absolute top-6 left-0 -translate-x-full transition duration-150 ease-out rounded-l-full flex items-center font-tuner whitespace-nowrap leading-tight hover:shadow active:shadow-none text-orange-500 hover:text-orange-400 border border-gray-100/60 bg-gradient-to-br from-white to-gray-50 pr-3 pl-4 pt-[8px] pb-[6px] text-sm font-medium cursor-pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="h-6 w-auto transition ease-out duration-200 " height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z"></path></svg><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="absolute h-6 w-auto transition ease-out duration-150 -rotate-90 opacity-0" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M405 136.798L375.202 107 256 226.202 136.798 107 107 136.798 226.202 256 107 375.202 136.798 405 256 285.798 375.202 405 405 375.202 285.798 256z"></path></svg></button><ul class="flex flex-col py-4 px-6 relative z-20"><li class="pb-4 pt-2"><a href="/"><svg viewBox="0 0 1020 254" fill="none" class="flex items-center w-36 h-auto fill-orange-500"><path d="M115.685 110.921c17.034-12.222 19.608-68.63 24.945-90.294C145.968-1.037 168.043.062 168.043.062s-5.731 9.973-3.394 17.416C166.987 24.921 183 31.573 183 31.573l-3.454 9.106s-7.212-.923-11.503 7.662c-11.21 22.423 8.325 87.895 8.325 87.895s-31.361 44.523-31.361 78.046c0 21.481 10.167 39.483 10.167 39.483h-14.267s-20.929-24.907-25.222-37.355c-4.292-12.448-2.576-24.895-2.576-24.895s-22.75-1.288-42.923 0c-20.173 1.287-33.626 18.629-36.054 28.329-2.428 9.7-3.434 33.921-3.434 33.921H19.417c-6.866-21.189-12.32-28.783-9.361-39.483 8.194-29.635 6.585-46.443 4.687-53.93C12.846 152.866 0 146.331 0 146.331c6.293-12.82 16.415-19.066 40.346-19.623 27.63-.642 58.306-3.566 75.339-15.787z" fill="#EC4815"></path><path d="M44.113 213.041s2.915 26.977 18.402 40.724h13.272c-13.272-15.035-14.72-54.225-14.72-54.225-6.75 2.198-16.096 10.067-16.954 13.501zM290 124v29.6h-28.4v42c0 9.4 3.4 13 15.6 13 4.2 0 9.4-.4 14.4-.8V237c-5.4 1.2-14.2 2.6-25.2 2.6-34.8 0-41.2-20-41.2-35.4v-50.6h-18V124h18v-17.8l34.4-15.8h2V124H290zM320.581 81.2h39.2v29.2h-39.2V81.2zm-17.8 72.4V124h56.8v112h-36.4v-82.4h-20.4zM420.022 138.8h3.6c3.6-11.2 11.4-18.8 33.4-18.8 23 0 40.4 11.2 40.4 38.4V236h-36.4v-66.8c0-12.2-6.8-17.8-18-17.8-12.6 0-19.6 6.2-19.6 21.4V236h-36.4V124h33v14.8zM592.605 219h-2c-5.8 10.8-19.6 19.8-36.6 19.8-25 0-37.8-12.4-37.8-31.8 0-19.2 11.4-30.4 32.6-33.8l31.6-5c7-1.2 8.8-5 8.8-8.4v-2.2c0-5-3.6-11.2-15.6-11.2-10.2 0-16.2 4.6-16.8 12.4h-34.8c1.4-22.6 16.8-38.8 50-38.8 34.8 0 52 14 52 36.4v50.4h12.6V236h-44v-17zm-3.4-26.6V183h-2c-2 2.2-4.8 3.8-9.2 4.8l-14.8 3.6c-6.6 1.6-9.8 5.4-9.8 11.6 0 7.4 4.8 11.2 14.4 11.2 14.2 0 21.4-9.8 21.4-21.8zM726.356 200h21c-3.6 27.8-18.8 40-46.4 40-34.6 0-50.2-20.4-50.2-60 0-34.2 12-60 50.2-60 32 0 42.6 17.2 45.4 40h-21.2c-2-14.6-9-23.4-24.2-23.4-20 0-29.6 13.2-29.6 43.4 0 28 8 43 29.6 43 15 0 23.2-8.4 25.4-23zM846.18 139.6h2c3.6-11.6 12.2-19.6 26.2-19.6 18.6 0 26.2 12.4 26.2 38.4V236h-20v-74.4c0-13.6-2.8-22.8-14.8-22.8-11.6 0-18 10-18 28.6V236h-19.6v-74.4c0-13.4-3.2-22.8-14.6-22.8-13.8 0-18.4 11-18.4 30.4V236h-20V124h18.8v15.6h2.4c4.2-12.4 11.4-19.6 25.6-19.6 13.4 0 20.8 6.8 24.2 19.6zM1018.2 155h-21.6c-1.4-11.6-7.4-19.4-23-19.4-12 0-22.6 5-22.6 16.2 0 7.6 3.8 12.8 14.8 15.4l22.6 5.2c20.6 4.6 31.6 15.6 31.6 32.8 0 19.6-13 34.8-44.4 34.8-27.8 0-44.6-10.4-48.6-35h23c3.2 14.2 11.6 19.4 26 19.4 12 0 23.2-4.4 23.2-17.2 0-7.6-4.8-13.4-17.2-16.4l-26.4-6.2c-15.2-3.6-25-13.4-25-30.6 0-20 15.2-34 43.4-34 32 0 42.4 17.8 44.2 35z" fill="#EC4815"></path></svg></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2" href="/docs">Docs</a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2" href="/pricing">Cloud Pricing</a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/about"><span class="">About TinaCMS</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/blog"><span class="">Blog</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/compare-tina"><span class="">Compare Tina</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/examples"><span class="">Examples</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/whats-new/tinacms"><span class="">Whats New - TinaCMS</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/whats-new/tinacloud"><span class="">Whats New - TinaCloud</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/showcase"><span class="">Showcase</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/roadmap"><span class="">Roadmap</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="/docs/support"><span class="">Support</span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="https://github.com/tinacms/awesome-tinacms"><span class="">Awesome TinaCMS<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-blue-200 text-sm inline ml-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="m13 3 3.293 3.293-7 7 1.414 1.414 7-7L21 11V3z"></path><path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"></path></svg></span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="https://discord.com/invite/zumN63Ybpf"><span class="">Discord<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-blue-200 text-sm inline ml-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="m13 3 3.293 3.293-7 7 1.414 1.414 7-7L21 11V3z"></path><path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"></path></svg></span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><a href="https://github.com/tinacms/tinacms/discussions"><span class="">Forum<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-blue-200 text-sm inline ml-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="m13 3 3.293 3.293-7 7 1.414 1.414 7-7L21 11V3z"></path><path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"></path></svg></span></a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2" href="/enterprise">Enterprise</a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2" href="https://app.tina.io/signin">My TinaCloud</a></li></ul></div><div class="fixed top-0 left-0 w-full h-full bg-gray-900/70 z-30 opacity-0 pointer-events-none"></div><a href="/"><svg viewBox="0 0 49 68" fill="inherit" aria-labelledby="title desc" class="flex items-center w-9 h-auto fill-orange-500"><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></a><div class="flex space-x-2 gap-2 cursor-pointer"><button class="transition duration-150 ease-out rounded-full flex items-center font-tuner whitespace-nowrap leading-snug focus:outline-none focus:shadow-outline hover:-translate-y-px active:translate-y-px hover:-translate-x-px active:translate-x-px leading-tight hover:shadow active:shadow-none text-orange-500 hover:text-orange-400 border border-gray-100/60 bg-gradient-to-br from-white to-gray-50 px-4 pt-[8px] pb-[6px] text-xs font-medium "><span class="mr-2"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></svg></span>Subscribe</button><button class="transition duration-150 ease-out rounded-full flex items-center font-tuner whitespace-nowrap leading-snug focus:outline-none focus:shadow-outline hover:-translate-y-px active:translate-y-px hover:-translate-x-px active:translate-x-px leading-tight hover:shadow active:shadow-none text-white hover:text-gray-50 border border-orange-600 bg-gradient-to-br from-orange-400 to-orange-600 px-4 pt-[8px] pb-[6px] text-xs font-medium "><span class="mr-2"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"></path></svg></span>Book a demo</button></div></div><div class="absolute translate-y-2 px-4 pt-4 pb-6 z-40 w-full min-[1300px]:px-10 hidden min-[1300px]:flex items-center justify-between gap-6"><a href="/"><svg viewBox="0 0 1020 254" fill="none" class="w-40 flex items-center h-auto fill-orange-500 mb-4"><path d="M115.685 110.921c17.034-12.222 19.608-68.63 24.945-90.294C145.968-1.037 168.043.062 168.043.062s-5.731 9.973-3.394 17.416C166.987 24.921 183 31.573 183 31.573l-3.454 9.106s-7.212-.923-11.503 7.662c-11.21 22.423 8.325 87.895 8.325 87.895s-31.361 44.523-31.361 78.046c0 21.481 10.167 39.483 10.167 39.483h-14.267s-20.929-24.907-25.222-37.355c-4.292-12.448-2.576-24.895-2.576-24.895s-22.75-1.288-42.923 0c-20.173 1.287-33.626 18.629-36.054 28.329-2.428 9.7-3.434 33.921-3.434 33.921H19.417c-6.866-21.189-12.32-28.783-9.361-39.483 8.194-29.635 6.585-46.443 4.687-53.93C12.846 152.866 0 146.331 0 146.331c6.293-12.82 16.415-19.066 40.346-19.623 27.63-.642 58.306-3.566 75.339-15.787z" fill="#EC4815"></path><path d="M44.113 213.041s2.915 26.977 18.402 40.724h13.272c-13.272-15.035-14.72-54.225-14.72-54.225-6.75 2.198-16.096 10.067-16.954 13.501zM290 124v29.6h-28.4v42c0 9.4 3.4 13 15.6 13 4.2 0 9.4-.4 14.4-.8V237c-5.4 1.2-14.2 2.6-25.2 2.6-34.8 0-41.2-20-41.2-35.4v-50.6h-18V124h18v-17.8l34.4-15.8h2V124H290zM320.581 81.2h39.2v29.2h-39.2V81.2zm-17.8 72.4V124h56.8v112h-36.4v-82.4h-20.4zM420.022 138.8h3.6c3.6-11.2 11.4-18.8 33.4-18.8 23 0 40.4 11.2 40.4 38.4V236h-36.4v-66.8c0-12.2-6.8-17.8-18-17.8-12.6 0-19.6 6.2-19.6 21.4V236h-36.4V124h33v14.8zM592.605 219h-2c-5.8 10.8-19.6 19.8-36.6 19.8-25 0-37.8-12.4-37.8-31.8 0-19.2 11.4-30.4 32.6-33.8l31.6-5c7-1.2 8.8-5 8.8-8.4v-2.2c0-5-3.6-11.2-15.6-11.2-10.2 0-16.2 4.6-16.8 12.4h-34.8c1.4-22.6 16.8-38.8 50-38.8 34.8 0 52 14 52 36.4v50.4h12.6V236h-44v-17zm-3.4-26.6V183h-2c-2 2.2-4.8 3.8-9.2 4.8l-14.8 3.6c-6.6 1.6-9.8 5.4-9.8 11.6 0 7.4 4.8 11.2 14.4 11.2 14.2 0 21.4-9.8 21.4-21.8zM726.356 200h21c-3.6 27.8-18.8 40-46.4 40-34.6 0-50.2-20.4-50.2-60 0-34.2 12-60 50.2-60 32 0 42.6 17.2 45.4 40h-21.2c-2-14.6-9-23.4-24.2-23.4-20 0-29.6 13.2-29.6 43.4 0 28 8 43 29.6 43 15 0 23.2-8.4 25.4-23zM846.18 139.6h2c3.6-11.6 12.2-19.6 26.2-19.6 18.6 0 26.2 12.4 26.2 38.4V236h-20v-74.4c0-13.6-2.8-22.8-14.8-22.8-11.6 0-18 10-18 28.6V236h-19.6v-74.4c0-13.4-3.2-22.8-14.6-22.8-13.8 0-18.4 11-18.4 30.4V236h-20V124h18.8v15.6h2.4c4.2-12.4 11.4-19.6 25.6-19.6 13.4 0 20.8 6.8 24.2 19.6zM1018.2 155h-21.6c-1.4-11.6-7.4-19.4-23-19.4-12 0-22.6 5-22.6 16.2 0 7.6 3.8 12.8 14.8 15.4l22.6 5.2c20.6 4.6 31.6 15.6 31.6 32.8 0 19.6-13 34.8-44.4 34.8-27.8 0-44.6-10.4-48.6-35h23c3.2 14.2 11.6 19.4 26 19.4 12 0 23.2-4.4 23.2-17.2 0-7.6-4.8-13.4-17.2-16.4l-26.4-6.2c-15.2-3.6-25-13.4-25-30.6 0-20 15.2-34 43.4-34 32 0 42.4 17.8 44.2 35z" fill="#EC4815"></path></svg></a><nav class="flex-1 flex flex-wrap-reverse justify-end items-end min-[1300px]:items-center gap-2 min-[1300px]:gap-x-12"><ul class="flex gap-6 min-[1300px]:gap-8 min-[1300px]:gap-12 relative z-20"><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2 w-max" href="/docs">Docs</a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2 w-max" href="/pricing">Cloud Pricing</a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><div class="relative group"><span class="flex items-center cursor-pointer">Resources<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="ml-1 text-blue-200 group-hover:text-blue-400 transition-transform duration-200 group-hover:rotate-90" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M10.707 17.707 16.414 12l-5.707-5.707-1.414 1.414L13.586 12l-4.293 4.293z"></path></svg></span><ul class="absolute left-0 top-full mt-2 min-w-full w-max bg-white shadow-lg rounded-md p-2 opacity-0 pointer-events-none group-hover:opacity-100 group-hover:pointer-events-auto transition-opacity duration-500 ease-in-out"><li class="py-2 px-2 flex items-center"><a href="/about"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">About TinaCMS</span></a></li><li class="py-2 px-2 flex items-center"><a href="/blog"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Blog</span></a></li><li class="py-2 px-2 flex items-center"><a href="/compare-tina"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Compare Tina</span></a></li><li class="py-2 px-2 flex items-center"><a href="/examples"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Examples</span></a></li><li class="py-2 px-2 flex items-center"><a href="/whats-new/tinacms"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Whats New - TinaCMS</span></a></li><li class="py-2 px-2 flex items-center"><a href="/whats-new/tinacloud"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Whats New - TinaCloud</span></a></li></ul></div></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><div class="relative group"><span class="flex items-center cursor-pointer">Community<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="ml-1 text-blue-200 group-hover:text-blue-400 transition-transform duration-200 group-hover:rotate-90" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M10.707 17.707 16.414 12l-5.707-5.707-1.414 1.414L13.586 12l-4.293 4.293z"></path></svg></span><ul class="absolute left-0 top-full mt-2 min-w-full w-max bg-white shadow-lg rounded-md p-2 opacity-0 pointer-events-none group-hover:opacity-100 group-hover:pointer-events-auto transition-opacity duration-500 ease-in-out"><li class="py-2 px-2 flex items-center"><a href="/showcase"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Showcase</span></a></li><li class="py-2 px-2 flex items-center"><a href="/roadmap"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Roadmap</span></a></li><li class="py-2 px-2 flex items-center"><a href="/docs/support"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Support</span></a></li><li class="py-2 px-2 flex items-center"><a href="https://github.com/tinacms/awesome-tinacms"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Awesome TinaCMS<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-blue-200 text-sm group-hover:text-blue-400 inline ml-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="m13 3 3.293 3.293-7 7 1.414 1.414 7-7L21 11V3z"></path><path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"></path></svg></span></a></li><li class="py-2 px-2 flex items-center"><a href="https://discord.com/invite/zumN63Ybpf"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Discord<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-blue-200 text-sm group-hover:text-blue-400 inline ml-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="m13 3 3.293 3.293-7 7 1.414 1.414 7-7L21 11V3z"></path><path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"></path></svg></span></a></li><li class="py-2 px-2 flex items-center"><a href="https://github.com/tinacms/tinacms/discussions"><span class="text-gray-600 hover:text-blue-500 transition text-md ease-out duration-150">Forum<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="text-blue-200 text-sm group-hover:text-blue-400 inline ml-1" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="m13 3 3.293 3.293-7 7 1.414 1.414 7-7L21 11V3z"></path><path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"></path></svg></span></a></li></ul></div></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2 w-max" href="/enterprise">Enterprise</a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium"><a class="py-2 w-max" href="https://app.tina.io/signin">My TinaCloud</a></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><button class="transition duration-150 ease-out rounded-full flex items-center font-tuner whitespace-nowrap leading-snug focus:outline-none focus:shadow-outline hover:-translate-y-px active:translate-y-px hover:-translate-x-px active:translate-x-px leading-tight hover:shadow active:shadow-none text-orange-500 hover:text-orange-400 border border-gray-100/60 bg-gradient-to-br from-white to-gray-50 px-5 pt-[10px] pb-[8px] text-sm font-medium "><span class="mr-2"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></svg></span>Subscribe</button></li><li class="group flex items-center text-blue-700 hover:text-blue-500 transition ease-out duration-150 cursor-pointer drop-shadow-sm text-base font-medium py-2"><button class="transition duration-150 ease-out rounded-full flex items-center font-tuner whitespace-nowrap leading-snug focus:outline-none focus:shadow-outline hover:-translate-y-px active:translate-y-px hover:-translate-x-px active:translate-x-px leading-tight hover:shadow active:shadow-none text-white hover:text-gray-50 border border-orange-600 bg-gradient-to-br from-orange-400 to-orange-600 px-5 pt-[10px] pb-[8px] text-sm font-medium "><span class="mr-2"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"></path></svg></span>Book a demo</button></li></ul></nav></div></div></div><div class="flex flex-col flex-1"><div class="pt-28 last:pb-30"><section class="relative overflow-visible z-10 text-center px-8 py-12 lg:py-16"><div class="jsx-2f43f2d772225fae container narrow center"><div class="jsx-318eabc17e7772bd flex flex-col gap-6"><h2 data-tina-field="" class="jsx-318eabc17e7772bd heading">Goodbye Forestry.io, Hello TinaCMS</h2><p data-tina-field="" class="jsx-318eabc17e7772bd text-xl">The Forestry.io team is focused on building TinaCMS, the next iteration of our vision. See the migration guide or test it with the following command. </p><div class="jsx-318eabc17e7772bd flex justify-center items-center gap-10"><div class="jsx-8da988214986d2c4 items-center flex flex-col sm:flex-row md:flex-row lg:flex-row"><a class="transition duration-150 ease-out rounded-full flex items-center font-tuner whitespace-nowrap leading-snug focus:outline-none focus:shadow-outline hover:-translate-y-px active:translate-y-px hover:-translate-x-px active:translate-x-px leading-tight hover:shadow active:shadow-none text-white hover:text-gray-50 border border-blue-400 bg-gradient-to-br from-blue-300 via-blue-400 to-blue-600 px-5 pt-[10px] pb-[8px] text-sm font-medium " id="tina-migration-guide" target="_self" data-tina-field="" href="/">Tina Migration Guide</a></div><button id="npx-create-tina-applatest" class="jsx-a16bc0bdb4e97f23 code-button event-cmd-button"><div class="jsx-a16bc0bdb4e97f23 content"><span class="jsx-a16bc0bdb4e97f23 text"><span class="jsx-a16bc0bdb4e97f23 bash">></span> </span><span class="jsx-a16bc0bdb4e97f23 label">npx create-tina-app@latest</span><span class="jsx-a16bc0bdb4e97f23 icon"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M20 2H10c-1.103 0-2 .897-2 2v4H4c-1.103 0-2 .897-2 2v10c0 1.103.897 2 2 2h10c1.103 0 2-.897 2-2v-4h4c1.103 0 2-.897 2-2V4c0-1.103-.897-2-2-2zM4 20V10h10l.002 10H4zm16-6h-4v-4c0-1.103-.897-2-2-2h-4V4h10v10z"></path></svg></span></div><span id="npx-create-tina-applatest" class="jsx-a16bc0bdb4e97f23 success-message ">Copied to clipboard!</span></button></div></div></div></section></div><div class="pt-28 last:pb-30"><section class="relative z-0 w-full pb-20" style="overflow:visible"><div class="jsx-2f43f2d772225fae container wide "><div class="grid gap-[0.5px] grid-flow-row grid-cols-auto-sm md:grid-cols-auto-lg auto-rows-auto w-full rounded-xl overflow-visible shadow border border-blue-50/50 bg-gradient-to-br from-seafoam-200/30 to-blue-100/30"><a target="_blank" rel="noopener noreferrer" class="group block py-6 px-8 md:py-9 md:px-11 lg:py-12 lg:px-14 rounded-sm bg-gradient-to-br from-white via-white to-white/50 shadow-[inset_0_0_0_1px_rgba(223,219,252,0.15),_0_0_1px_1px_rgba(223,219,252,0.5)] transition duration-500 hover:scale-105 hover:bg-gradient-to-br hover:from-orange-200 hover:via-orange-400 hover:to-orange-600 hover:z-20" style="text-decoration:none;overflow:visible" id="frameworks-agnostic"><div data-tina-field="" class="flex flex-col gap-4"><h3 class="text-2xl md:text-xl lg:text-2xl font-tuner leading-tight text-transparent bg-gradient-to-br from-blue-700/80 via-blue-900/90 to-blue-1000 bg-clip-text mb-2 group-hover:text-white break-words">Frameworks-Agnostic</h3><p class="group-hover:text-white">Tina supports all frameworks and static site generators.</p></div></a><a target="_blank" rel="noopener noreferrer" class="group block py-6 px-8 md:py-9 md:px-11 lg:py-12 lg:px-14 rounded-sm bg-gradient-to-br from-white via-white to-white/50 shadow-[inset_0_0_0_1px_rgba(223,219,252,0.15),_0_0_1px_1px_rgba(223,219,252,0.5)] transition duration-500 hover:scale-105 hover:bg-gradient-to-br hover:from-orange-200 hover:via-orange-400 hover:to-orange-600 hover:z-20" style="text-decoration:none;overflow:visible" id="git-sync"><div data-tina-field="" class="flex flex-col gap-4"><h3 class="text-2xl md:text-xl lg:text-2xl font-tuner leading-tight text-transparent bg-gradient-to-br from-blue-700/80 via-blue-900/90 to-blue-1000 bg-clip-text mb-2 group-hover:text-white break-words">Git-Sync</h3><p class="group-hover:text-white">Similar to Forestry, Tina commits content changes to your repository.</p></div></a><a target="_blank" rel="noopener noreferrer" class="group block py-6 px-8 md:py-9 md:px-11 lg:py-12 lg:px-14 rounded-sm bg-gradient-to-br from-white via-white to-white/50 shadow-[inset_0_0_0_1px_rgba(223,219,252,0.15),_0_0_1px_1px_rgba(223,219,252,0.5)] transition duration-500 hover:scale-105 hover:bg-gradient-to-br hover:from-orange-200 hover:via-orange-400 hover:to-orange-600 hover:z-20" style="text-decoration:none;overflow:visible" id="basic-or-visual-editing"><div data-tina-field="" class="flex flex-col gap-4"><h3 class="text-2xl md:text-xl lg:text-2xl font-tuner leading-tight text-transparent bg-gradient-to-br from-blue-700/80 via-blue-900/90 to-blue-1000 bg-clip-text mb-2 group-hover:text-white break-words">Basic or Visual Editing</h3><p class="group-hover:text-white">Tina's basic editing mode is similar to editing content with Forestry. Tina also supports visual editing which shows a live preview of your site as you edit content. </p></div></a><a target="_blank" rel="noopener noreferrer" class="group block py-6 px-8 md:py-9 md:px-11 lg:py-12 lg:px-14 rounded-sm bg-gradient-to-br from-white via-white to-white/50 shadow-[inset_0_0_0_1px_rgba(223,219,252,0.15),_0_0_1px_1px_rgba(223,219,252,0.5)] transition duration-500 hover:scale-105 hover:bg-gradient-to-br hover:from-orange-200 hover:via-orange-400 hover:to-orange-600 hover:z-20" style="text-decoration:none;overflow:visible" id="multi-branch"><div data-tina-field="" class="flex flex-col gap-4"><h3 class="text-2xl md:text-xl lg:text-2xl font-tuner leading-tight text-transparent bg-gradient-to-br from-blue-700/80 via-blue-900/90 to-blue-1000 bg-clip-text mb-2 group-hover:text-white break-words">Multi-Branch</h3><p class="group-hover:text-white">Create new branches and switch between them right from the Tina UI.</p></div></a><a target="_blank" rel="noopener noreferrer" class="group block py-6 px-8 md:py-9 md:px-11 lg:py-12 lg:px-14 rounded-sm bg-gradient-to-br from-white via-white to-white/50 shadow-[inset_0_0_0_1px_rgba(223,219,252,0.15),_0_0_1px_1px_rgba(223,219,252,0.5)] transition duration-500 hover:scale-105 hover:bg-gradient-to-br hover:from-orange-200 hover:via-orange-400 hover:to-orange-600 hover:z-20" style="text-decoration:none;overflow:visible" id="open-source-and-extensible"><div data-tina-field="" class="flex flex-col gap-4"><h3 class="text-2xl md:text-xl lg:text-2xl font-tuner leading-tight text-transparent bg-gradient-to-br from-blue-700/80 via-blue-900/90 to-blue-1000 bg-clip-text mb-2 group-hover:text-white break-words">Open-Source and Extensible</h3><p class="group-hover:text-white">Tina is very customizable and extensible due to it's open-source nature.</p></div></a><a target="_blank" rel="noopener noreferrer" class="group block py-6 px-8 md:py-9 md:px-11 lg:py-12 lg:px-14 rounded-sm bg-gradient-to-br from-white via-white to-white/50 shadow-[inset_0_0_0_1px_rgba(223,219,252,0.15),_0_0_1px_1px_rgba(223,219,252,0.5)] transition duration-500 hover:scale-105 hover:bg-gradient-to-br hover:from-orange-200 hover:via-orange-400 hover:to-orange-600 hover:z-20" style="text-decoration:none;overflow:visible" id="local-development"><div data-tina-field="" class="flex flex-col gap-4"><h3 class="text-2xl md:text-xl lg:text-2xl font-tuner leading-tight text-transparent bg-gradient-to-br from-blue-700/80 via-blue-900/90 to-blue-1000 bg-clip-text mb-2 group-hover:text-white break-words">Local Development</h3><p class="group-hover:text-white">TinaCMS can be run locally alongside your site. You can make changes to your content models and fields, and see the results immediately.</p></div></a></div></div><svg preserveAspectRatio="none" viewBox="0 0 194 89" fill="none" class="absolute w-full h-auto bottom-0 left-0 -z-1"><g clip-path="url(#grad-glow_svg__clip0_615_319)"><mask id="grad-glow_svg__a" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="19" width="194" height="70"><path transform="matrix(1 0 0 -1 0 89)" fill="url(#grad-glow_svg__paint0_linear_615_319)" d="M0 0h194v70H0z"></path></mask><g mask="url(#grad-glow_svg__a)"><path transform="matrix(1 0 0 -1 0 89)" fill="url(#grad-glow_svg__paint1_linear_615_319)" d="M0 0h194v73H0z"></path></g></g><defs><linearGradient id="grad-glow_svg__paint0_linear_615_319" x1="97" y1="0" x2="97" y2="70" gradientUnits="userSpaceOnUse"><stop stop-color="#D9D9D9" stop-opacity="0.45"></stop><stop offset="0.272" stop-color="#D9D9D9" stop-opacity="0.168"></stop><stop offset="0.67" stop-color="#D9D9D9" stop-opacity="0.051"></stop><stop offset="1" stop-color="#D9D9D9" stop-opacity="0"></stop></linearGradient><linearGradient id="grad-glow_svg__paint1_linear_615_319" x1="0" y1="36.5" x2="194" y2="36.5" gradientUnits="userSpaceOnUse"><stop stop-color="#53E9DD"></stop><stop offset="0.344" stop-color="#68D7E4"></stop><stop offset="0.594" stop-color="#59BFF2"></stop><stop offset="1" stop-color="#4BA8FF"></stop></linearGradient><clipPath id="grad-glow_svg__clip0_615_319"><path fill="#fff" transform="matrix(1 0 0 -1 0 89)" d="M0 0h194v89H0z"></path></clipPath></defs></svg></section></div><div class="pt-28 last:pb-30"><section class="relative overflow-hidden w-full"><div class="relative z-10"><div class="jsx-2f43f2d772225fae container narrow "><div class="faq-wrapper"><div class="mb-10"><h3 class="font-tuner text-3xl text-orange-500 mb-8">FAQ</h3><div class="text-xl"></div></div><div class="sc-6ec7f2e8-0 bUKlzx"><div><h4>How are Tina and Forestry different?</h4><p>Forestry and Tina share a lot in common but there are some key differences.</p><ul><li><div>Tina's UI is an open-source single page application that you host with your site (i.e. mysite.com/admin).</div></li><li><div>Tina does not have a preview button like Forestry. If previewing is needed, we recommend setting up visual editing for a live preview.</div></li><li><div>Tina only supports GitHub repositories at this time.</div></li><li><div>Tina offers an API so you can query for your content much like you would with a traditional headless CMS. This supports complex queries (filter, sort, etc), server-side rendering, client-side rendering, and incremental static regeneration.</div></li></ul><p>You can see a full list of missing features between Forestry.io and TinaCMS <a href="https://tina.io/docs/forestry/missing-forestry-features/">here</a>.</p><hr/></div><div><h4>How do I migrate my site from Forestry to Tina?</h4><p>To migrate a Forestry site to Tina, see this <a href="https://gmail.us20.list-manage.com/track/click?u=1fea337bee20e7270d025ea8a&id=5196507034&e=963e000296">migration guide</a> or <a href="https://gmail.us20.list-manage.com/track/click?u=1fea337bee20e7270d025ea8a&id=4589793572&e=963e000296">video walkthrough</a></p><hr/></div><div><h4>More questions? </h4><p>Contact us at <a href="mailto:info@tina.io">info@tina.io</a></p></div></div></div></div></div></section></div></div><div><div class="flex flex-col md:flex-row gap-6 w-full justify-between items-start bg-[url('/svg/orange-bg.svg')] bg-cover bg-center px-6 py-8 lg:py-12 lg:px-12 -mt-px"><div class="max-w-[20%] flex-1 drop-shadow-sm"><a class="" href="/"><h1 class="flex items-center"><svg viewBox="0 0 49 68" fill="inherit" aria-labelledby="title desc" class="w-20 h-auto fill-white"><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></div><div class="flex-1 flex flex-col py-2 lg:py-0 md:grid md:grid-cols-2 lg:grid-cols-4 gap-8"><div class="flex flex-col items-stretch justify-start gap-2"><p class="uppercase text-orange-100 font-bold -mt-1">Product</p><a class="cursor-pointer" href="/showcase"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Showcase</div></a><a class="cursor-pointer" href="https://app.tina.io"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">TinaCloud</div></a><a class="cursor-pointer" href="/docs"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Introduction</div></a><a class="cursor-pointer" href="/docs/product-tour"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">How Tina Works</div></a><a class="cursor-pointer" href="/roadmap"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Roadmap</div></a></div><div class="flex flex-col items-stretch justify-start gap-2"><p class="uppercase text-orange-100 font-bold -mt-1">Resources</p><a class="cursor-pointer" href="/blog"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Blog</div></a><a class="cursor-pointer" href="/examples"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Examples</div></a><a class="cursor-pointer" href="/compare-tina"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Compare Tina</div></a><a class="cursor-pointer" href="/docs/support"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Support</div></a><a class="cursor-pointer" href="/media"><div class="inline-block drop-shadow-sm relative opacity-90 hover:opacity-100 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px">Media</div></a></div><div class="flex flex-col items-stretch justify-start gap-2"><p class="uppercase text-orange-100 font-bold -mt-1"></p><details class="inline-block drop-shadow-sm relative opacity-90 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out "><summary class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Whats New</summary><div class="p-4"><div><a class="cursor-pointer" href="/whats-new/tinacms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">TinaCMS</div></a></div><div><a class="cursor-pointer" href="/whats-new/tinacloud"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">TinaCloud</div></a></div></div></details><details class="inline-block drop-shadow-sm relative opacity-90 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out "><summary class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Use Cases</summary><div class="p-4"><div><a class="cursor-pointer" href="/agencies"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Agencies</div></a></div><div><a class="cursor-pointer" href="/documentation"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Documentation</div></a></div><div><a class="cursor-pointer" href="/cms-for-teams"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Teams</div></a></div><div><a class="cursor-pointer" href="/jamstack-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Jamstack CMS</div></a></div></div></details><details class="inline-block drop-shadow-sm relative opacity-90 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out "><summary class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Benefits</summary><div class="p-4"><div><a class="cursor-pointer" href="/mdx-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">MDX</div></a></div><div><a class="cursor-pointer" href="/markdown-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Markdown</div></a></div><div><a class="cursor-pointer" href="/git-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Git</div></a></div><div><a class="cursor-pointer" href="/editorial-workflow"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Editorial Workflow</div></a></div><div><a class="cursor-pointer" href="/flexible-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Customization</div></a></div><div><a class="cursor-pointer" href="/seo"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">SEO</div></a></div></div></details><details class="inline-block drop-shadow-sm relative opacity-90 text-white uppercase text-lg lg:text-xl font-tuner transition duration-150 ease-out "><summary class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Integrations</summary><div class="p-4"><div><a class="cursor-pointer" href="/astro"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Astro</div></a></div><div><a class="cursor-pointer" href="/hugo-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Hugo</div></a></div><div><a class="cursor-pointer" href="/nextjs-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">NextJS</div></a></div><div><a class="cursor-pointer" href="/jekyll-cms"><div class="hover:-translate-y-px hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] active:translate-y-px hover:-translate-x-px active:translate-x-px hover:opacity-100 cursor-pointer">Jekyll</div></a></div></div></details></div><div class="flex flex-col lg:items-center font-tuner"><div class="flex w-1/2 flex-col lg:items-start gap-4 drop-shadow-sm font-tuner"><a class="transition ease-out duration-150 opacity-80 hover:opacity-100 flex items-center gap-2 text-white font-tuner" href="https://github.com/tinacms/tinacms" target="_blank"><svg fill="inherit" width="24" height="24" viewBox="0 0 32 31.21" class="w-7 h-auto fill-current opacity-80"><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> <!-- -->GitHub</a><a class="transition ease-out duration-150 opacity-80 hover:opacity-100 flex items-center gap-2 text-white font-tuner" href="https://twitter.com/tinacms" target="_blank"><svg width="24" height="24" class="w-7 h-auto fill-current opacity-80"><path d="M14.095 10.316L22.286 1h-1.94L13.23 9.088 7.551 1H1l8.59 12.231L1 23h1.94l7.51-8.543L16.45 23H23l-8.905-12.684zm-2.658 3.022l-.872-1.218L3.64 2.432h2.98l5.59 7.821.869 1.219 7.265 10.166h-2.982l-5.926-8.3z"></path></svg> <!-- -->Twitter</a><a class="transition ease-out duration-150 opacity-80 hover:opacity-100 flex items-center gap-2 text-white font-tuner" href="https://discord.com/invite/zumN63Ybpf" target="_blank"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" class="w-7 h-auto fill-current opacity-80" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M13.545 2.907a13.227 13.227 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.19 12.19 0 0 0-3.658 0 8.258 8.258 0 0 0-.412-.833.051.051 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.041.041 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032c.001.014.01.028.021.037a13.276 13.276 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019c.308-.42.582-.863.818-1.329a.05.05 0 0 0-.01-.059.051.051 0 0 0-.018-.011 8.875 8.875 0 0 1-1.248-.595.05.05 0 0 1-.02-.066.051.051 0 0 1 .015-.019c.084-.063.168-.129.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.052.052 0 0 1 .053.007c.08.066.164.132.248.195a.051.051 0 0 1-.004.085 8.254 8.254 0 0 1-1.249.594.05.05 0 0 0-.03.03.052.052 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.235 13.235 0 0 0 4.001-2.02.049.049 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.034.034 0 0 0-.02-.019Zm-8.198 7.307c-.789 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612Zm5.316 0c-.788 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612Z"></path></svg> <!-- -->Discord</a><a class="transition ease-out duration-150 opacity-80 hover:opacity-100 flex items-center gap-2 text-white font-tuner" href="https://www.youtube.com/@TinaCMS" target="_blank"><svg width="24" height="24" class="w-7 h-auto fill-current opacity-80"><path fill="currentColor" d="M4.652 0h1.44l.988 3.702L7.996 0H9.45L7.785 5.505v3.757H6.354V5.505L4.652 0zm6.594 2.373c-1.119 0-1.861.74-1.861 1.835v3.349c0 1.204.629 1.831 1.861 1.831 1.022 0 1.826-.683 1.826-1.831V4.208c0-1.069-.797-1.835-1.826-1.835zm.531 5.127c0 .372-.19.646-.532.646-.351 0-.554-.287-.554-.646V4.321c0-.374.172-.651.529-.651.39 0 .557.269.557.651V7.5zm4.729-5.07v5.186c-.155.194-.5.512-.747.512-.271 0-.338-.186-.338-.46V2.43h-1.27v5.71c0 .675.206 1.22.887 1.22.384 0 .918-.2 1.468-.853v.754h1.27V2.43h-1.27zm2.203 13.858c-.448 0-.541.315-.541.763v.659h1.069v-.66c.001-.44-.092-.762-.528-.762zm-4.703.04a.927.927 0 00-.25.198v4.055c.099.106.194.182.287.229.197.1.485.107.619-.067.07-.092.105-.241.105-.449v-3.359c0-.22-.043-.386-.129-.5-.147-.193-.42-.214-.632-.107zm4.827-5.195c-2.604-.177-11.066-.177-13.666 0C2.353 11.325 2.021 13.025 2 17.5c.021 4.467.35 6.175 3.167 6.367 2.6.177 11.062.177 13.666 0 2.814-.192 3.146-1.893 3.167-6.367-.021-4.467-.35-6.175-3.167-6.367zM6.509 21.819H5.146v-7.54h-1.41v-1.28h4.182v1.28h-1.41v7.54zm4.846 0h-1.21v-.718a2.645 2.645 0 01-.696.605c-.652.374-1.547.365-1.547-.955v-5.438h1.209v4.988c0 .262.063.438.322.438.236 0 .564-.303.711-.487v-4.939h1.21v6.506zm4.657-1.348c0 .805-.301 1.431-1.106 1.431-.443 0-.812-.162-1.149-.583v.5h-1.221v-8.82h1.221v2.84c.273-.333.644-.608 1.076-.608.886 0 1.18.749 1.18 1.631v3.609zm4.471-1.752h-2.314v1.228c0 .488.042.91.528.91.511 0 .541-.344.541-.91v-.452h1.245v.489c0 1.253-.538 2.013-1.813 2.013-1.155 0-1.746-.842-1.746-2.013v-2.921c0-1.129.746-1.914 1.837-1.914 1.161 0 1.721.738 1.721 1.914v1.656z"></path></svg> <!-- -->YouTube</a><a class="transition ease-out duration-150 opacity-80 hover:opacity-100 flex items-center gap-2 text-white font-tuner" href="https://www.linkedin.com/company/tinacms" target="_blank"><svg width="24" height="24" class="w-7 h-auto fill-current opacity-80"><path d="M19 0H5a5 5 0 00-5 5v14a5 5 0 005 5h14a5 5 0 005-5V5a5 5 0 00-5-5zM8 19H5V8h3v11zM6.5 6.732c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zM20 19h-3v-5.604c0-3.368-4-3.113-4 0V19h-3V8h3v1.765c1.396-2.586 7-2.777 7 2.476V19z"></path></svg> <!-- -->LinkedIn</a></div></div></div></div><div class="flex justify-end flex-col lg:flex-row w-full lg:items-center bg-gradient-to-br from-orange-600 via-orange-800 to-orange-900 text-white px-6 py-8 lg:px-18 gap-6"><div class="flex drop-shadow-sm flex-wrap gap-6"><div class="flex flex-wrap gap-x-6 gap-y-2"><a class="transition ease-out duration-150 hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] hover:opacity-100 opacity-70 whitespace-nowrap" href="/security">Security</a><a class="transition ease-out duration-150 hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] hover:opacity-100 opacity-70 whitespace-nowrap" href="/telemetry">Open Source Telemetry</a><a class="transition ease-out duration-150 hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] hover:opacity-100 opacity-70 whitespace-nowrap" href="/terms-of-service">Terms of Service</a><a class="transition ease-out duration-150 hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] hover:opacity-100 opacity-70 whitespace-nowrap" href="/privacy-notice">Privacy Notice</a><a class="transition ease-out duration-150 hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] hover:opacity-100 opacity-70 whitespace-nowrap" href="https://github.com/tinacms/tinacms/blob/master/LICENSE">License</a><a class="transition ease-out duration-150 hover:drop-shadow-[0_0_6px_rgba(255,255,255,0.5)] hover:opacity-100 opacity-70 whitespace-nowrap" href="/docs/support">Support</a></div><div><p>© TinaCMS 2019–<!-- -->2025</p></div></div></div></div></div><script src="/_next/static/chunks/webpack-f042891856ad1cff.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/a21a12b81d68c556.css\",\"style\"]\n2:HL[\"/_next/static/css/e25ae0f408b08140.css\",\"style\"]\n3:HL[\"/_next/static/css/b4ef80af4316d518.css\",\"style\"]\n4:HL[\"/_next/static/css/e4bfdb3bf5c78794.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"5:I[94978,[],\"\"]\n8:I[68611,[],\"\"]\na:I[54148,[],\"\"]\nd:I[93090,[],\"\"]\n9:[\"slug\",\"forestry\",\"d\"]\ne:[]\n0:[\"$\",\"$L5\",null,{\"buildId\":\"qIkH41z3gF8mmCwdnQe85\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"forestry\"],\"initialTree\":[\"\",{\"children\":[[\"slug\",\"forestry\",\"d\"],{\"children\":[\"__PAGE__?{\\\"slug\\\":\\\"forestry\\\"}\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[[\"slug\",\"forestry\",\"d\"],{\"children\":[\"__PAGE__\",{},[[\"$L6\",\"$L7\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/e4bfdb3bf5c78794.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]]],null],null]},[null,[\"$\",\"$L8\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$9\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/a21a12b81d68c556.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/e25ae0f408b08140.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/b4ef80af4316d518.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],\"$Lb\"],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"f:I[39020,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"default\"]\n10:I[46069,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"CloudBanner\"]\n11:I[21531,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-"])</script><script>self.__next_f.push([1,"0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"default\"]\n12:I[58906,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"default\"]\n13:\"$Sreact.suspense\"\n14:I[44707,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"957"])</script><script>self.__next_f.push([1,"4\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"BailoutToCSR\"]\n15:I[11712,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"\"]\n16:I[48698,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"stati"])</script><script>self.__next_f.push([1,"c/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"AppNavBar\"]\n17:I[37650,[\"7601\",\"static/chunks/app/error-1ee4842b82036da4.js\"],\"default\"]\n18:I[66522,[\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"9160\",\"static/chunks/app/not-found-a64dca83a85b5fa4.js\"],\"default\"]\n19:I[45597,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"AppFooter\"]\n1a:I[17192,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"5228\",\"static/chunks/5f881512-0c723aad1c032cc4.js\",\"9574\",\"static/chunks/24a46c76-3bb4aea579f1257f.js\",\"812"])</script><script>self.__next_f.push([1,"7\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"1712\",\"static/chunks/1712-679033401756eef3.js\",\"4720\",\"static/chunks/4720-f49273d8c0d1a1fe.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"9507\",\"static/chunks/9507-3e3899073a49e836.js\",\"3185\",\"static/chunks/app/layout-83ca06937e351397.js\"],\"GoogleTagManager\"]\n"])</script><script>self.__next_f.push([1,"b:[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#E6FAF8\"}],[\"$\",\"link\",null,{\"rel\":\"alternate\",\"type\":\"application/rss+xml\",\"href\":\"/rss.xml\"}]]}],[\"$\",\"body\",null,{\"children\":[[\"$\",\"$Lf\",null,{\"children\":[[\"$\",\"meta\",null,{\"name\":\"googlebot\",\"content\":\"index,follow\"}],[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"index,follow\"}],[\"$\",\"noscript\",null,{\"children\":[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-K35ZHHJF\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"}}]}],[\"$\",\"$L10\",null,{}],[\"$\",\"$L11\",null,{}],[\"$\",\"$L12\",null,{}],[\"$\",\"$13\",null,{\"fallback\":null,\"children\":[\"$\",\"$L14\",null,{\"reason\":\"next/dynamic\",\"children\":[\"$\",\"$L15\",null,{\"src\":\"https://www.chatbase.co/embed.min.js\",\"id\":\"mJl22IM4pXzWC60JoM5Fj\",\"defer\":true,\"async\":true,\"strategy\":\"lazyOnload\"}]}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col min-h-screen blob-bg font-sans bg-blob-bg bg-[length:100%_100%] bg-top bg-fixed \",\"children\":[[\"$\",\"div\",null,{\"className\":\"pb-0 lg:pb-20\",\"children\":[\"$\",\"$L16\",null,{\"sticky\":true}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col flex-1\",\"children\":[\"$\",\"$L8\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$17\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$\",\"div\",null,{\"className\":\"container mx-auto px-4\",\"children\":[\"$\",\"$L18\",null,{}]}],\"notFoundStyles\":[]}]}],[\"$\",\"$L19\",null,{}]]}]]}],[\"$\",\"$L1a\",null,{\"gtmId\":\"GTM-K35ZHHJF\"}],[\"$\",\"$L15\",null,{\"id\":\"hotjar\",\"strategy\":\"afterInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(h,o,t,j,a,r){\\n h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\\n h._hjSettings={hjid:5190939,hjsv:6};\\n a=o.getElementsByTagName('head')[0];\\n r=o.createElement('script');r.async=1;\\n r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\\n a.appendChild(r);\\n })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\\n \"}}],[\"$\",\"$L15\",null,{\"id\":\"clarity\",\"strategy\":\"afterInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(c,l,a,r,i,t,y){\\n c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};\\n t=l.createElement(r);t.async=1;t.src=\\\"https://www.clarity.ms/tag/\\\"+i;\\n y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\\n })(window, document, \\\"clarity\\\", \\\"script\\\", \\\"pepjushhm5\\\");\\n \"}}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1b:I[63060,[\"6303\",\"static/chunks/36e1c10d-2c75c85bfcd15184.js\",\"3989\",\"static/chunks/47d8844f-d460cfc195a1b131.js\",\"1995\",\"static/chunks/fee69bc6-d849e61ff56d71aa.js\",\"6025\",\"static/chunks/b63b1b3f-0250379bcc006b00.js\",\"1531\",\"static/chunks/3cde7dfc-932df3bc62e9f49c.js\",\"541\",\"static/chunks/9ca845be-c2881f71963e3e16.js\",\"9495\",\"static/chunks/b9ba547f-e4bc6e4ef83642ea.js\",\"739\",\"static/chunks/7a8a3e83-d415e92019f96bff.js\",\"1509\",\"static/chunks/9746af58-5a842c3cf0df5782.js\",\"8355\",\"static/chunks/7f27ae6c-2bdb8ffe9e2ab46e.js\",\"9728\",\"static/chunks/171d8454-5034688345ae4380.js\",\"9062\",\"static/chunks/702565d7-900e5569f9bae283.js\",\"8127\",\"static/chunks/8127-431c188c056dc939.js\",\"8719\",\"static/chunks/8719-52960ab5f93872bc.js\",\"2971\",\"static/chunks/2971-7a9d45818d8b9152.js\",\"3438\",\"static/chunks/3438-da0e03dc19cf5890.js\",\"527\",\"static/chunks/527-78caf0adbad54443.js\",\"224\",\"static/chunks/224-db9420e1faa8d146.js\",\"2267\",\"static/chunks/2267-1113b0e2d8acd655.js\",\"9295\",\"static/chunks/9295-6b730bcfd9aae16c.js\",\"2393\",\"static/chunks/2393-5c29fc68dc1b5970.js\",\"5248\",\"static/chunks/5248-7d9cdd3cfda2d7ff.js\",\"5835\",\"static/chunks/5835-680704ea25937d10.js\",\"6042\",\"static/chunks/app/%5Bslug%5D/page-4e04ec9758768ad4.js\"],\"default\"]\n1c:T33f1,"])</script><script>self.__next_f.push([1,"\n query pageWithRecentPosts($relativePath: String!) {\n page(relativePath: $relativePath) {\n ... on Document {\n _sys {\n filename\n basename\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n ...PageParts\n }\n recentPosts: postConnection(sort: \"date\", last: 2) {\n edges {\n node {\n _sys {\n filename\n basename\n breadcrumbs\n path\n relativePath\n extension\n }\n ...PostParts\n }\n }\n }\n}\n \n fragment PageParts on Page {\n __typename\n seo {\n __typename\n title\n description\n hasCustomSuffix\n }\n blocks {\n __typename\n ... on PageBlocksFeatures {\n blockSettings {\n __typename\n isFullscreen\n }\n features {\n __typename\n headline\n text\n buttons {\n __typename\n ... on PageBlocksFeaturesFeaturesButtonsActions {\n label\n icon\n variant\n size\n url\n }\n ... on PageBlocksFeaturesFeaturesButtonsModalButton {\n label\n icon\n color\n size\n modal\n }\n ... on PageBlocksFeaturesFeaturesButtonsCodeButton {\n label\n }\n }\n media {\n __typename\n ... on PageBlocksFeaturesFeaturesMediaImage {\n image\n }\n ... on PageBlocksFeaturesFeaturesMediaVideo {\n src\n link\n }\n ... on PageBlocksFeaturesFeaturesMediaCode {\n file\n code\n language\n scale\n }\n }\n isFullScreen\n isReversed\n imageBackground\n }\n }\n ... on PageBlocksLogoGrid {\n blockSettings {\n __typename\n isFullscreen\n }\n title\n link\n items {\n __typename\n name\n link\n logo\n size\n }\n }\n ... on PageBlocksTestimonials {\n blockSettings {\n __typename\n isFullscreen\n }\n title\n testimonials {\n __typename\n name\n username\n rhsImage\n imageBorder\n avatar\n date\n testimonial\n link\n }\n }\n ... on PageBlocksCarouselFeature {\n blockSettings {\n __typename\n isFullscreen\n }\n blockHeadline\n items {\n __typename\n headline\n text\n icon2\n videoSrc\n button {\n __typename\n label\n icon\n variant\n size\n url\n }\n }\n }\n ... on PageBlocksEvents {\n blockSettings {\n __typename\n isFullscreen\n }\n tip\n }\n ... on PageBlocksHighlightsSection {\n blockSettings {\n __typename\n isFullscreen\n }\n highlightColumn {\n __typename\n heading\n highlights {\n __typename\n name\n icon\n }\n }\n }\n ... on PageBlocksRecentPosts {\n blockSettings {\n __typename\n isFullscreen\n }\n title\n }\n ... on PageBlocksCompareBox {\n blockSettings {\n __typename\n isFullscreen\n }\n criteriaItems {\n __typename\n criteria\n description\n }\n companies {\n __typename\n headline\n logoColour\n logoWhite\n active\n isHidden\n backgroundColor\n satisfiedCriteria\n }\n }\n ... on PageBlocksRecipeBlock {\n blockSettings {\n __typename\n isFullscreen\n }\n title\n description\n code\n instruction {\n __typename\n header\n itemDescription\n codeLineStart\n codeLineEnd\n }\n }\n ... on PageBlocksTable {\n blockSettings {\n __typename\n isFullscreen\n }\n tableHeader\n columnItems {\n __typename\n isReccomended\n columnHeader\n columnByLine\n columnHeaderLink\n }\n rowItems {\n __typename\n rowHeader\n rowDescription\n rowCells\n }\n }\n ... on PageBlocksPricing {\n blockSettings {\n __typename\n isFullscreen\n }\n headline\n freeTier {\n __typename\n name\n description\n price\n annualPrice\n annualDescription\n interval\n cardItem {\n __typename\n name\n icon\n description\n annualDescription\n }\n buttons {\n __typename\n ... on PageBlocksPricingFreeTierButtonsActions {\n label\n icon\n variant\n size\n url\n }\n ... on PageBlocksPricingFreeTierButtonsModalButton {\n label\n icon\n color\n size\n modal\n }\n ... on PageBlocksPricingFreeTierButtonsCodeButton {\n label\n }\n }\n isStarred\n }\n intro\n pillSwitchVisibileText\n pillSwitchToggleText\n plans {\n __typename\n name\n description\n price\n annualPrice\n annualDescription\n interval\n cardItem {\n __typename\n name\n icon\n description\n annualDescription\n }\n buttons {\n __typename\n ... on PageBlocksPricingPlansButtonsActions {\n label\n icon\n variant\n size\n url\n }\n ... on PageBlocksPricingPlansButtonsModalButton {\n label\n icon\n color\n size\n modal\n }\n ... on PageBlocksPricingPlansButtonsCodeButton {\n label\n }\n }\n isStarred\n }\n }\n ... on PageBlocksSpacer {\n blockSettings {\n __typename\n isFullscreen\n }\n spacingPx\n spacingPxMobile\n }\n ... on PageBlocksFeatureGrid {\n blockSettings {\n __typename\n isFullscreen\n }\n items {\n __typename\n headline\n text\n url\n actions {\n __typename\n label\n icon\n variant\n size\n url\n }\n }\n }\n ... on PageBlocksHero {\n blockSettings {\n __typename\n isFullscreen\n }\n headline\n text\n media {\n __typename\n ... on PageBlocksHeroMediaImage {\n image\n }\n ... on PageBlocksHeroMediaVideo {\n src\n }\n }\n margin\n spacing\n smallerMobileBodyText\n buttons {\n __typename\n ... on PageBlocksHeroButtonsActions {\n label\n icon\n variant\n size\n url\n }\n ... on PageBlocksHeroButtonsModalButton {\n label\n icon\n color\n size\n modal\n }\n ... on PageBlocksHeroButtonsCodeButton {\n label\n }\n }\n }\n ... on PageBlocksFlying {\n blockSettings {\n __typename\n isFullscreen\n }\n headline\n text\n buttons {\n __typename\n ... on PageBlocksFlyingButtonsActions {\n label\n icon\n variant\n size\n url\n }\n ... on PageBlocksFlyingButtonsModalButton {\n label\n icon\n color\n size\n modal\n }\n ... on PageBlocksFlyingButtonsCodeButton {\n label\n }\n }\n }\n ... on PageBlocksFaq {\n blockSettings {\n __typename\n isFullscreen\n }\n title\n intro\n questions {\n __typename\n question\n answer\n }\n color\n }\n ... on PageBlocksContent {\n blockSettings {\n __typename\n isFullscreen\n }\n options {\n __typename\n narrow\n color\n align\n }\n content\n }\n ... on PageBlocksShowcase {\n blockSettings {\n __typename\n isFullscreen\n }\n items {\n __typename\n headline\n text\n url\n media {\n __typename\n src\n }\n }\n }\n ... on PageBlocksColumns {\n blockSettings {\n __typename\n isFullscreen\n }\n options {\n __typename\n columns\n narrow\n color\n align\n }\n columnOne\n columnTwo\n }\n ... on PageBlocksRoadmapGrid {\n blockSettings {\n __typename\n isFullscreen\n }\n headline\n items {\n __typename\n headline\n status\n content\n actions {\n __typename\n label\n icon\n variant\n size\n url\n }\n }\n options {\n __typename\n paddingTop\n paddingBottom\n }\n }\n ... on PageBlocksQuote {\n blockSettings {\n __typename\n isFullscreen\n }\n title2\n subtext\n logo\n }\n ... on PageBlocksBooking {\n blockSettings {\n __typename\n isFullscreen\n }\n title\n description\n }\n ... on PageBlocksMediaComponent {\n blockSettings {\n __typename\n isFullscreen\n }\n headline\n mediaItem {\n __typename\n ... on PageBlocksMediaComponentMediaItemCloudinaryMediaComponent {\n media\n thumbnail\n }\n ... on PageBlocksMediaComponentMediaItemYoutubeMedia {\n embedUrl\n }\n }\n }\n ... on PageBlocksTextMediaColumnComponent {\n blockSettings {\n __typename\n isFullscreen\n }\n isVideoOnLeft\n body\n mediaColumnItem {\n __typename\n ... on PageBlocksTextMediaColumnComponentMediaColumnItemCloudinaryMediaComponent {\n media\n thumbnail\n }\n ... on PageBlocksTextMediaColumnComponentMediaColumnItemYoutubeMedia {\n embedUrl\n }\n }\n }\n ... on PageBlocksTinaBanner {\n blockSettings {\n __typename\n isFullscreen\n }\n backdrop\n leftFig\n rightFig\n leftScreen\n rightScreen\n centerFig\n llama\n }\n ... on PageBlocksStory {\n blockSettings {\n __typename\n isFullscreen\n }\n title\n }\n }\n}\n \n\n fragment PostParts on Post {\n __typename\n seo {\n __typename\n title\n description\n }\n title\n date\n last_edited\n author\n prev {\n ... on Post {\n __typename\n seo {\n __typename\n title\n description\n }\n title\n date\n last_edited\n author\n prev {\n ... on Post {\n __typename\n seo {\n __typename\n title\n description\n }\n title\n date\n last_edited\n author\n body\n }\n ... on Document {\n _sys {\n filename\n basename\n hasReferences\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n }\n next {\n ... on Post {\n __typename\n seo {\n __typename\n title\n description\n }\n title\n date\n last_edited\n author\n body\n }\n ... on Document {\n _sys {\n filename\n basename\n hasReferences\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n }\n body\n }\n ... on Document {\n _sys {\n filename\n basename\n hasReferences\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n }\n next {\n ... on Post {\n __typename\n seo {\n __typename\n title\n description\n }\n title\n date\n last_edited\n author\n prev {\n ... on Post {\n __typename\n seo {\n __typename\n title\n description\n }\n title\n date\n last_edited\n author\n body\n }\n ... on Document {\n _sys {\n filename\n basename\n hasReferences\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n }\n next {\n ... on Post {\n __typename\n seo {\n __typename\n title\n description\n }\n title\n date\n last_edited\n author\n body\n }\n ... on Document {\n _sys {\n filename\n basename\n hasReferences\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n }\n body\n }\n ... on Document {\n _sys {\n filename\n basename\n hasReferences\n breadcrumbs\n path\n relativePath\n extension\n }\n id\n }\n }\n body\n}\n "])</script><script>self.__next_f.push([1,"7:[\"$\",\"$L1b\",null,{\"query\":\"$1c\",\"data\":{\"page\":{\"_sys\":{\"filename\":\"forestry\",\"basename\":\"forestry.json\",\"breadcrumbs\":[\"forestry\"],\"path\":\"content/blocksPages/forestry.json\",\"relativePath\":\"forestry.json\",\"extension\":\".json\"},\"id\":\"content/blocksPages/forestry.json\",\"__typename\":\"Page\",\"seo\":{\"__typename\":\"PageSeo\",\"title\":\"Forestry.io CMS\",\"description\":\"The Forestry.io team is now focused on building TinaCMS. If you wish to migrate your Forestry site to Tina, follow the guide below.\",\"hasCustomSuffix\":null},\"blocks\":[{\"__typename\":\"PageBlocksHero\",\"blockSettings\":null,\"headline\":\"Goodbye Forestry.io, Hello TinaCMS\",\"text\":\"The Forestry.io team is focused on building TinaCMS, the next iteration of our vision. See the migration guide or test it with the following command. \",\"media\":null,\"margin\":null,\"spacing\":null,\"smallerMobileBodyText\":null,\"buttons\":[{\"__typename\":\"PageBlocksHeroButtonsActions\",\"label\":\"Tina Migration Guide\",\"icon\":false,\"variant\":\"blue\",\"size\":\"small\",\"url\":\"/\"},{\"__typename\":\"PageBlocksHeroButtonsCodeButton\",\"label\":\"npx create-tina-app@latest\"}]},{\"__typename\":\"PageBlocksFeatureGrid\",\"blockSettings\":null,\"items\":[{\"__typename\":\"PageBlocksFeatureGridItems\",\"headline\":\"Frameworks-Agnostic\",\"text\":\"Tina supports all frameworks and static site generators.\",\"url\":null,\"actions\":null},{\"__typename\":\"PageBlocksFeatureGridItems\",\"headline\":\"Git-Sync\",\"text\":\"Similar to Forestry, Tina commits content changes to your repository.\",\"url\":null,\"actions\":null},{\"__typename\":\"PageBlocksFeatureGridItems\",\"headline\":\"Basic or Visual Editing\",\"text\":\"Tina's basic editing mode is similar to editing content with Forestry. Tina also supports visual editing which shows a live preview of your site as you edit content. \",\"url\":null,\"actions\":null},{\"__typename\":\"PageBlocksFeatureGridItems\",\"headline\":\"Multi-Branch\",\"text\":\"Create new branches and switch between them right from the Tina UI.\",\"url\":null,\"actions\":null},{\"__typename\":\"PageBlocksFeatureGridItems\",\"headline\":\"Open-Source and Extensible\",\"text\":\"Tina is very customizable and extensible due to it's open-source nature.\",\"url\":null,\"actions\":null},{\"__typename\":\"PageBlocksFeatureGridItems\",\"headline\":\"Local Development\",\"text\":\"TinaCMS can be run locally alongside your site. You can make changes to your content models and fields, and see the results immediately.\",\"url\":null,\"actions\":null}]},{\"__typename\":\"PageBlocksFaq\",\"blockSettings\":null,\"title\":\"FAQ\",\"intro\":{\"type\":\"root\",\"children\":[]},\"questions\":[{\"__typename\":\"PageBlocksFaqQuestions\",\"question\":\"How are Tina and Forestry different?\",\"answer\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Forestry and Tina share a lot in common but there are some key differences.\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Tina's UI is an open-source single page application that you host with your site (i.e. mysite.com/admin).\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Tina does not have a preview button like Forestry. If previewing is needed, we recommend setting up visual editing for a live preview.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Tina only supports GitHub repositories at this time.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Tina offers an API so you can query for your content much like you would with a traditional headless CMS. This supports complex queries (filter, sort, etc), server-side rendering, client-side rendering, and incremental static regeneration.\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"You can see a full list of missing features between Forestry.io and TinaCMS \"},{\"type\":\"a\",\"url\":\"https://tina.io/docs/forestry/missing-forestry-features/\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"here\"}]},{\"type\":\"text\",\"text\":\".\"}]}]}},{\"__typename\":\"PageBlocksFaqQuestions\",\"question\":\"How do I migrate my site from Forestry to Tina?\",\"answer\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"To migrate a Forestry site to Tina, see this \"},{\"type\":\"a\",\"url\":\"https://gmail.us20.list-manage.com/track/click?u=1fea337bee20e7270d025ea8a\u0026id=5196507034\u0026e=963e000296\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"migration guide\"}]},{\"type\":\"text\",\"text\":\" or \"},{\"type\":\"a\",\"url\":\"https://gmail.us20.list-manage.com/track/click?u=1fea337bee20e7270d025ea8a\u0026id=4589793572\u0026e=963e000296\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"video walkthrough\"}]}]}]}},{\"__typename\":\"PageBlocksFaqQuestions\",\"question\":\"More questions? \",\"answer\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Contact us at \"},{\"type\":\"a\",\"url\":\"mailto:info@tina.io\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"info@tina.io\"}]}]}]}}],\"color\":\"white\"}]},\"recentPosts\":{\"edges\":[{\"node\":{\"_sys\":{\"filename\":\"2024-12-tinacloud-public-disclosure-security-breach\",\"basename\":\"2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"breadcrumbs\":[\"2024-12-tinacloud-public-disclosure-security-breach\"],\"path\":\"content/blog/2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"relativePath\":\"2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"extension\":\".mdx\"},\"__typename\":\"Post\",\"seo\":null,\"title\":\"TinaCloud: Public Disclosure of Security Breach\",\"date\":\"2024-12-23T13:00:00.000Z\",\"last_edited\":null,\"author\":\"Matt Wicks\",\"prev\":{\"__typename\":\"Post\",\"seo\":null,\"title\":\"Enhanced Security for Tina Cloud: Two-Factor Authentication is Here\",\"date\":\"2024-12-15T05:00:00.000Z\",\"last_edited\":\"2024-12-15T05:00:00.000Z\",\"author\":\"Kelly Davis\",\"prev\":{\"__typename\":\"Post\",\"seo\":{\"__typename\":\"PostSeo\",\"title\":\"Referential Integrity Now Available in TinaCMS | TinaCMS Blog\",\"description\":\"Discover how TinaCMS’s new Referential Integrity feature simplifies content management by automatically updating or removing references when linked documents are renamed or deleted.\"},\"title\":\"Referential Integrity in TinaCMS\",\"date\":\"2024-11-19T14:00:00.000Z\",\"last_edited\":\"2024-11-19T14:00:00.000Z\",\"author\":\"Jack Pettit\",\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re excited to announce a significant enhancement to TinaCMS: \"},{\"type\":\"text\",\"text\":\"Referential Integrity\",\"bold\":true},{\"type\":\"text\",\"text\":\"! This new feature ensures that references between documents remain consistent and error-free, even when linked documents are renamed or deleted. Let’s dive into what’s included and what it means for your content management workflows.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Part 1: Automatic Updates for Renamed Documents\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Referential Integrity ensures that when a document is renamed, all related references are updated automatically. This is a massive win for users who frequently update file names while managing complex interlinked content.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Example:\",\"bold\":true}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Renaming the document \"},{\"type\":\"text\",\"text\":\"content/authors/napoleon.md\",\"code\":true},{\"type\":\"text\",\"text\":\" to \"},{\"type\":\"text\",\"text\":\"content/authors/napy.md\",\"code\":true},{\"type\":\"text\",\"text\":\" will instantly update all posts or pages that reference “Napoleon” to point to the new name “Napy.”\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"This seamless synchronization eliminates the manual effort of finding and updating references across your site.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Part 2: Cleaning Up References for Deleted Documents\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Deleting a document? No problem! With Referential Integrity, TinaCMS will:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Warn you before the deletion to prevent accidental changes.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Automatically remove all references to the deleted document once confirmed.\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Example:\",\"bold\":true}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Deleting an author document for “Pedro” ensures that any blog post referencing “Pedro” will have the reference cleared, keeping your content consistent and free of broken links.\"}]}]}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"What’s Next?\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"This feature is now live in \"},{\"type\":\"text\",\"text\":\"tinacms@2.5.0\",\"code\":true},{\"type\":\"text\",\"text\":\". If you want more features like this, please share your thoughts and feature requests on GitHub!\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"In the meantime, you can explore this new functionality by upgrading to the latest version and trying it in your project. Your feedback will help us continue refining TinaCMS to meet your content management needs.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Thank you for being part of the TinaCMS journey. We’re committed to making content management as efficient and enjoyable as possible.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Best,\"},{\"type\":\"break\",\"children\":[{\"type\":\"text\",\"text\":\"\"}]},{\"type\":\"text\",\"text\":\"The TinaCMS Team 🦙\"}]}]},\"_sys\":{\"filename\":\"referential-integrity\",\"basename\":\"referential-integrity.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"referential-integrity\"],\"path\":\"content/blog/referential-integrity.mdx\",\"relativePath\":\"referential-integrity.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/referential-integrity.mdx\"},\"next\":{\"__typename\":\"Post\",\"seo\":null,\"title\":\"TinaCloud: Public Disclosure of Security Breach\",\"date\":\"2024-12-23T13:00:00.000Z\",\"last_edited\":null,\"author\":\"Matt Wicks\",\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Overview of the Incident\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"On 15th December 2024, TinaCMS identified unauthorized activity involving compromised AWS access keys. These keys were exploited to send unauthorized emails (targeting the general French community, not Tina customers specifically) using our Amazon Simple Email Service (SES) infrastructure.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"img\",\"url\":\"https://assets.tina.io/06bcd49e-f919-4e53-a2c4-77f656491c7d/img/blog/2024-12-tinacloud-public-disclosure-security-breach/phishing-email.png\",\"alt\":\"A screenshot of one of the phishing emails\",\"caption\":\"Figure: the emails sent were in French\",\"children\":[{\"type\":\"text\",\"text\":\"\"}]},{\"type\":\"text\",\"text\":\"Figure: the emails sent were in French\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"As an automated measure, the impacted key was revoked. Afterwards, our team confirmed the extent of the incident using CloudTrail logs, investigated root cause, and took steps (described below) to secure our systems.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Outbound email functionality, including user invitations, was impacted. This has since been resolved.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We apologize for this, and we are confident that it won’t happen again.\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Incident Details\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Incident start: 13th December 2024, 16:33 GMT+11\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Time of Detection: 15th December 2024, 19:05 GMT+11\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Type of Incident: Unauthorized use of AWS access keys\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Services Impacted:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Amazon SES (email sending)\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"User invitation workflows relying on outbound email\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Nature of Access:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"AWS access keys with root permissions were compromised and misused\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Verification:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"CloudTrail logs were used to confirm which systems and services were accessed during the incident\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Root Cause Analysis\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"The unauthorized access was traced to a vulnerability in our CI/CD pipeline. During the build process, a step in the GitHub Actions workflow inadvertently wrote the GitHub Actions Runner’s environment variables, including sensitive AWS access keys, to a JavaScript file.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"The JavaScript file containing the keys was subsequently deployed and served publicly as part of TinaCloud, allowing attackers to obtain the access keys directly from the front-end code.\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Impact Assessment\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Customer Data:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Based off CloudTrail logs, there was no evidence of unauthorized access to customer data.\\nThis includes content databases, end user login information, access to application secrets.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Affected Systems:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"⚠️ Amazon SES for email-sending functionality\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"User Impact:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"❌ Temporary suspension of email services impacted workflows, including user invitations\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Actions Taken\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Revoked all access keys:\\nAll compromised and legacy AWS access keys were revoked immediately\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Verification of access:\\nCloudTrail logs were reviewed to identify and confirm systems accessed by the unauthorized actor\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Confirmed security controls:\\nMFA (Multi-Factor Authentication) is enabled on all user accounts that have console access\\nRevoked access to all unnecessary users\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Suspension of email sending:\\nOutbound email services were temporarily suspended whilst we were ascertaining root cause and AWS’s review.\\nServices have now been restored.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - CI/CD AWS access:\\nAuthentication for the GitHub Actions has been upgraded from long lived Access Keys to OIDC\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Build process:\\nThe build process was reviewed, and the handling of environment variables was updated.\\nThe use of process.env was replaced with import.meta, following best practices outlined in \"},{\"type\":\"a\",\"url\":\"https://vite.dev/config/shared-options.html#define\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"Vite’s documentation\"}]},{\"type\":\"text\",\"text\":\", to prevent sensitive data from being exposed in build artifacts.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Repository secrets audit:\\nA thorough audit of all GitHub repositories is being conducted to identify any other sensitive information that may have been inadvertently exposed in past builds or commits\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Hardened IAM policies:\\nIAM policies tied to CI/CD systems have been reviewed and updated to ensure adherence to least privilege principles, removing unnecessary permissions, especially those with root or administrative access\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] IP allow listing for AWS access:\\nAWS IAM role usage has been restricted to trusted IP ranges, particularly for CI/CD systems and other sensitive operations\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Continuous monitoring and alerts:\\nContinuous monitoring tools like Amazon GuardDuty, AWS CloudTrail Insights, and AWS Security Hub will be implemented to detect and alert on suspicious activity, such as new access key creation or unusual IP access\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Automated security scans:\\nAutomated tools will be integrated into the CI/CD pipeline to proactively detect secrets or vulnerabilities during code builds\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Advice to Tina Customers\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Report suspicious emails: If you received unauthorized or suspicious emails from TinaCMS, please report them to \"},{\"type\":\"a\",\"url\":\"mailto:security@tina.io\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"security@tina.io\"}]}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Verify email origin: Ensure any emails claiming to be from TinaCMS are legitimate\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Stay updated: Follow our official communication channels for real-time updates\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Contact Information\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"For questions, concerns, or further information, please contact:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Email: \"},{\"type\":\"a\",\"url\":\"mailto:security@tina.io\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"security@tina.io\"}]}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Website: \"},{\"type\":\"a\",\"url\":\"https://tina.io/security\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"https://tina.io/security\"}]}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"TinaCMS remains committed to protecting our systems and maintaining transparency.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"🦙 The Tina herd\"}]}]},\"_sys\":{\"filename\":\"2024-12-tinacloud-public-disclosure-security-breach\",\"basename\":\"2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"2024-12-tinacloud-public-disclosure-security-breach\"],\"path\":\"content/blog/2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"relativePath\":\"2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/2024-12-tinacloud-public-disclosure-security-breach.mdx\"},\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Introducing Multi-Factor Authentication (MFA) Support in Tina Cloud\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re thrilled to announce that Tina Cloud now supports Multi-Factor Authentication (MFA), adding an extra layer of security to your account. With this new feature, you can further protect your data and ensure that only you have access to your account.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How Does MFA Work in Tina Cloud?\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For Email Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Tina Cloud’s MFA is available for accounts using email logins. Once you enable MFA, you’ll need to provide a second factor of authentication in addition to your password. This additional step uses a Time-based One-Time Password (TOTP) generated by a compatible authenticator app, such as Google Authenticator, Authy, or 1Password.\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For GitHub Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"For users who log in via GitHub, MFA functionality is managed directly through GitHub. If you haven’t already, we highly recommend enabling MFA on your GitHub account to secure your login. Tina Cloud integrates seamlessly with GitHub’s existing MFA system, ensuring a secure connection.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How to Enable MFA\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Setting up MFA is quick and straightforward:\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Log in to your Tina Cloud account using your email and password.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Navigate to your Account Settings and find the Multi-Factor Authentication section.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Follow the prompts to scan a QR code using your preferred TOTP app.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Enter the code generated by your app to complete the setup.\"}]}]}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Why Enable MFA?\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Adding MFA to your account significantly enhances security by requiring a second form of verification. Even if someone manages to obtain your password, they won’t be able to access your account without the authentication code from your TOTP app.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re committed to ensuring your account’s security and will continue to improve Tina Cloud’s features to meet your needs. If you have any questions or need assistance with setting up MFA, don’t hesitate to reach out to our support team.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Secure your account today by enabling MFA in Tina Cloud! Stay tuned for more updates as we expand our security offerings.\"}]}]},\"_sys\":{\"filename\":\"two_factor_authentication\",\"basename\":\"two_factor_authentication.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"two_factor_authentication\"],\"path\":\"content/blog/two_factor_authentication.mdx\",\"relativePath\":\"two_factor_authentication.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/two_factor_authentication.mdx\"},\"next\":null,\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Overview of the Incident\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"On 15th December 2024, TinaCMS identified unauthorized activity involving compromised AWS access keys. These keys were exploited to send unauthorized emails (targeting the general French community, not Tina customers specifically) using our Amazon Simple Email Service (SES) infrastructure.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"img\",\"url\":\"https://assets.tina.io/06bcd49e-f919-4e53-a2c4-77f656491c7d/img/blog/2024-12-tinacloud-public-disclosure-security-breach/phishing-email.png\",\"alt\":\"A screenshot of one of the phishing emails\",\"caption\":\"Figure: the emails sent were in French\",\"children\":[{\"type\":\"text\",\"text\":\"\"}]},{\"type\":\"text\",\"text\":\"Figure: the emails sent were in French\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"As an automated measure, the impacted key was revoked. Afterwards, our team confirmed the extent of the incident using CloudTrail logs, investigated root cause, and took steps (described below) to secure our systems.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Outbound email functionality, including user invitations, was impacted. This has since been resolved.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We apologize for this, and we are confident that it won’t happen again.\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Incident Details\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Incident start: 13th December 2024, 16:33 GMT+11\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Time of Detection: 15th December 2024, 19:05 GMT+11\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Type of Incident: Unauthorized use of AWS access keys\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Services Impacted:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Amazon SES (email sending)\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"User invitation workflows relying on outbound email\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Nature of Access:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"AWS access keys with root permissions were compromised and misused\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Verification:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"CloudTrail logs were used to confirm which systems and services were accessed during the incident\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Root Cause Analysis\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"The unauthorized access was traced to a vulnerability in our CI/CD pipeline. During the build process, a step in the GitHub Actions workflow inadvertently wrote the GitHub Actions Runner’s environment variables, including sensitive AWS access keys, to a JavaScript file.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"The JavaScript file containing the keys was subsequently deployed and served publicly as part of TinaCloud, allowing attackers to obtain the access keys directly from the front-end code.\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Impact Assessment\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Customer Data:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Based off CloudTrail logs, there was no evidence of unauthorized access to customer data.\\nThis includes content databases, end user login information, access to application secrets.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Affected Systems:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"⚠️ Amazon SES for email-sending functionality\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"User Impact:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"❌ Temporary suspension of email services impacted workflows, including user invitations\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Actions Taken\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Revoked all access keys:\\nAll compromised and legacy AWS access keys were revoked immediately\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Verification of access:\\nCloudTrail logs were reviewed to identify and confirm systems accessed by the unauthorized actor\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Confirmed security controls:\\nMFA (Multi-Factor Authentication) is enabled on all user accounts that have console access\\nRevoked access to all unnecessary users\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Suspension of email sending:\\nOutbound email services were temporarily suspended whilst we were ascertaining root cause and AWS’s review.\\nServices have now been restored.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - CI/CD AWS access:\\nAuthentication for the GitHub Actions has been upgraded from long lived Access Keys to OIDC\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Build process:\\nThe build process was reviewed, and the handling of environment variables was updated.\\nThe use of process.env was replaced with import.meta, following best practices outlined in \"},{\"type\":\"a\",\"url\":\"https://vite.dev/config/shared-options.html#define\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"Vite’s documentation\"}]},{\"type\":\"text\",\"text\":\", to prevent sensitive data from being exposed in build artifacts.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Repository secrets audit:\\nA thorough audit of all GitHub repositories is being conducted to identify any other sensitive information that may have been inadvertently exposed in past builds or commits\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Hardened IAM policies:\\nIAM policies tied to CI/CD systems have been reviewed and updated to ensure adherence to least privilege principles, removing unnecessary permissions, especially those with root or administrative access\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] IP allow listing for AWS access:\\nAWS IAM role usage has been restricted to trusted IP ranges, particularly for CI/CD systems and other sensitive operations\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Continuous monitoring and alerts:\\nContinuous monitoring tools like Amazon GuardDuty, AWS CloudTrail Insights, and AWS Security Hub will be implemented to detect and alert on suspicious activity, such as new access key creation or unusual IP access\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Automated security scans:\\nAutomated tools will be integrated into the CI/CD pipeline to proactively detect secrets or vulnerabilities during code builds\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Advice to Tina Customers\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Report suspicious emails: If you received unauthorized or suspicious emails from TinaCMS, please report them to \"},{\"type\":\"a\",\"url\":\"mailto:security@tina.io\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"security@tina.io\"}]}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Verify email origin: Ensure any emails claiming to be from TinaCMS are legitimate\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Stay updated: Follow our official communication channels for real-time updates\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Contact Information\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"For questions, concerns, or further information, please contact:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Email: \"},{\"type\":\"a\",\"url\":\"mailto:security@tina.io\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"security@tina.io\"}]}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Website: \"},{\"type\":\"a\",\"url\":\"https://tina.io/security\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"https://tina.io/security\"}]}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"TinaCMS remains committed to protecting our systems and maintaining transparency.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"🦙 The Tina herd\"}]}]}}},{\"node\":{\"_sys\":{\"filename\":\"two_factor_authentication\",\"basename\":\"two_factor_authentication.mdx\",\"breadcrumbs\":[\"two_factor_authentication\"],\"path\":\"content/blog/two_factor_authentication.mdx\",\"relativePath\":\"two_factor_authentication.mdx\",\"extension\":\".mdx\"},\"__typename\":\"Post\",\"seo\":null,\"title\":\"Enhanced Security for Tina Cloud: Two-Factor Authentication is Here\",\"date\":\"2024-12-15T05:00:00.000Z\",\"last_edited\":\"2024-12-15T05:00:00.000Z\",\"author\":\"Kelly Davis\",\"prev\":{\"__typename\":\"Post\",\"seo\":{\"__typename\":\"PostSeo\",\"title\":\"Referential Integrity Now Available in TinaCMS | TinaCMS Blog\",\"description\":\"Discover how TinaCMS’s new Referential Integrity feature simplifies content management by automatically updating or removing references when linked documents are renamed or deleted.\"},\"title\":\"Referential Integrity in TinaCMS\",\"date\":\"2024-11-19T14:00:00.000Z\",\"last_edited\":\"2024-11-19T14:00:00.000Z\",\"author\":\"Jack Pettit\",\"prev\":{\"__typename\":\"Post\",\"seo\":{\"__typename\":\"PostSeo\",\"title\":\"Media Manager Usability Improvements | TinaCMS Blog\",\"description\":\"Explore the latest TinaCMS Media Manager updates, including support for non-image files and infinite scroll. Streamline your content management.\"},\"title\":\"Media Manager - Big useability Improvements\",\"date\":\"2024-10-17T13:00:00.000Z\",\"last_edited\":\"2024-10-17T13:00:00.000Z\",\"author\":\"Jord Gui\",\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We've rolled out some major updates to its Media Manager, making content handling faster and more user-friendly. Here’s what’s new:\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Responsive Design: The Media Manager now adapts perfectly to any screen size, so you can manage files effortlessly whether you’re on desktop, tablet, or mobile.\"}]}]}]},{\"type\":\"mdxJsxFlowElement\",\"name\":\"Youtube\",\"children\":[{\"type\":\"text\",\"text\":\"\"}],\"props\":{\"embedSrc\":\"https://assets.tina.io/06bcd49e-f919-4e53-a2c4-77f656491c7d/video/blog/infinite-scroll_1_nxkkiq.webm\"}},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Infinite Scroll: Say goodbye to paging! Media items now load dynamically as you scroll, giving you a smoother, more intuitive browsing experience.\"}]}]}]},{\"type\":\"mdxJsxFlowElement\",\"name\":\"Youtube\",\"children\":[{\"type\":\"text\",\"text\":\"\"}],\"props\":{\"embedSrc\":\"https://assets.tina.io/06bcd49e-f919-4e53-a2c4-77f656491c7d/video/blog/mobile-ui_deqt1v.webm\"}},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Non-Image File Support: You can now upload and handle a variety of files beyond images, including PDFs, audio, and videos (MP4, MKV), all within the Media Manager.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Bug Fixes: We resolved an issue where the active item window stayed open after navigation. The UI is now cleaner and more responsive.\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"These updates make the Media Manager more powerful and flexible, improving your workflow on any device. Stay tuned for more improvements as we keep pushing TinaCMS forward!\"}]}]},\"_sys\":{\"filename\":\"media-manager-improvements\",\"basename\":\"media-manager-improvements.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"media-manager-improvements\"],\"path\":\"content/blog/media-manager-improvements.mdx\",\"relativePath\":\"media-manager-improvements.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/media-manager-improvements.mdx\"},\"next\":{\"__typename\":\"Post\",\"seo\":null,\"title\":\"Enhanced Security for Tina Cloud: Two-Factor Authentication is Here\",\"date\":\"2024-12-15T05:00:00.000Z\",\"last_edited\":\"2024-12-15T05:00:00.000Z\",\"author\":\"Kelly Davis\",\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Introducing Multi-Factor Authentication (MFA) Support in Tina Cloud\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re thrilled to announce that Tina Cloud now supports Multi-Factor Authentication (MFA), adding an extra layer of security to your account. With this new feature, you can further protect your data and ensure that only you have access to your account.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How Does MFA Work in Tina Cloud?\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For Email Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Tina Cloud’s MFA is available for accounts using email logins. Once you enable MFA, you’ll need to provide a second factor of authentication in addition to your password. This additional step uses a Time-based One-Time Password (TOTP) generated by a compatible authenticator app, such as Google Authenticator, Authy, or 1Password.\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For GitHub Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"For users who log in via GitHub, MFA functionality is managed directly through GitHub. If you haven’t already, we highly recommend enabling MFA on your GitHub account to secure your login. Tina Cloud integrates seamlessly with GitHub’s existing MFA system, ensuring a secure connection.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How to Enable MFA\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Setting up MFA is quick and straightforward:\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Log in to your Tina Cloud account using your email and password.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Navigate to your Account Settings and find the Multi-Factor Authentication section.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Follow the prompts to scan a QR code using your preferred TOTP app.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Enter the code generated by your app to complete the setup.\"}]}]}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Why Enable MFA?\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Adding MFA to your account significantly enhances security by requiring a second form of verification. Even if someone manages to obtain your password, they won’t be able to access your account without the authentication code from your TOTP app.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re committed to ensuring your account’s security and will continue to improve Tina Cloud’s features to meet your needs. If you have any questions or need assistance with setting up MFA, don’t hesitate to reach out to our support team.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Secure your account today by enabling MFA in Tina Cloud! Stay tuned for more updates as we expand our security offerings.\"}]}]},\"_sys\":{\"filename\":\"two_factor_authentication\",\"basename\":\"two_factor_authentication.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"two_factor_authentication\"],\"path\":\"content/blog/two_factor_authentication.mdx\",\"relativePath\":\"two_factor_authentication.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/two_factor_authentication.mdx\"},\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re excited to announce a significant enhancement to TinaCMS: \"},{\"type\":\"text\",\"text\":\"Referential Integrity\",\"bold\":true},{\"type\":\"text\",\"text\":\"! This new feature ensures that references between documents remain consistent and error-free, even when linked documents are renamed or deleted. Let’s dive into what’s included and what it means for your content management workflows.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Part 1: Automatic Updates for Renamed Documents\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Referential Integrity ensures that when a document is renamed, all related references are updated automatically. This is a massive win for users who frequently update file names while managing complex interlinked content.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Example:\",\"bold\":true}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Renaming the document \"},{\"type\":\"text\",\"text\":\"content/authors/napoleon.md\",\"code\":true},{\"type\":\"text\",\"text\":\" to \"},{\"type\":\"text\",\"text\":\"content/authors/napy.md\",\"code\":true},{\"type\":\"text\",\"text\":\" will instantly update all posts or pages that reference “Napoleon” to point to the new name “Napy.”\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"This seamless synchronization eliminates the manual effort of finding and updating references across your site.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Part 2: Cleaning Up References for Deleted Documents\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Deleting a document? No problem! With Referential Integrity, TinaCMS will:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Warn you before the deletion to prevent accidental changes.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Automatically remove all references to the deleted document once confirmed.\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Example:\",\"bold\":true}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Deleting an author document for “Pedro” ensures that any blog post referencing “Pedro” will have the reference cleared, keeping your content consistent and free of broken links.\"}]}]}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"What’s Next?\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"This feature is now live in \"},{\"type\":\"text\",\"text\":\"tinacms@2.5.0\",\"code\":true},{\"type\":\"text\",\"text\":\". If you want more features like this, please share your thoughts and feature requests on GitHub!\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"In the meantime, you can explore this new functionality by upgrading to the latest version and trying it in your project. Your feedback will help us continue refining TinaCMS to meet your content management needs.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Thank you for being part of the TinaCMS journey. We’re committed to making content management as efficient and enjoyable as possible.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Best,\"},{\"type\":\"break\",\"children\":[{\"type\":\"text\",\"text\":\"\"}]},{\"type\":\"text\",\"text\":\"The TinaCMS Team 🦙\"}]}]},\"_sys\":{\"filename\":\"referential-integrity\",\"basename\":\"referential-integrity.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"referential-integrity\"],\"path\":\"content/blog/referential-integrity.mdx\",\"relativePath\":\"referential-integrity.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/referential-integrity.mdx\"},\"next\":{\"__typename\":\"Post\",\"seo\":null,\"title\":\"TinaCloud: Public Disclosure of Security Breach\",\"date\":\"2024-12-23T13:00:00.000Z\",\"last_edited\":null,\"author\":\"Matt Wicks\",\"prev\":{\"__typename\":\"Post\",\"seo\":null,\"title\":\"Enhanced Security for Tina Cloud: Two-Factor Authentication is Here\",\"date\":\"2024-12-15T05:00:00.000Z\",\"last_edited\":\"2024-12-15T05:00:00.000Z\",\"author\":\"Kelly Davis\",\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Introducing Multi-Factor Authentication (MFA) Support in Tina Cloud\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re thrilled to announce that Tina Cloud now supports Multi-Factor Authentication (MFA), adding an extra layer of security to your account. With this new feature, you can further protect your data and ensure that only you have access to your account.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How Does MFA Work in Tina Cloud?\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For Email Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Tina Cloud’s MFA is available for accounts using email logins. Once you enable MFA, you’ll need to provide a second factor of authentication in addition to your password. This additional step uses a Time-based One-Time Password (TOTP) generated by a compatible authenticator app, such as Google Authenticator, Authy, or 1Password.\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For GitHub Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"For users who log in via GitHub, MFA functionality is managed directly through GitHub. If you haven’t already, we highly recommend enabling MFA on your GitHub account to secure your login. Tina Cloud integrates seamlessly with GitHub’s existing MFA system, ensuring a secure connection.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How to Enable MFA\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Setting up MFA is quick and straightforward:\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Log in to your Tina Cloud account using your email and password.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Navigate to your Account Settings and find the Multi-Factor Authentication section.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Follow the prompts to scan a QR code using your preferred TOTP app.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Enter the code generated by your app to complete the setup.\"}]}]}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Why Enable MFA?\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Adding MFA to your account significantly enhances security by requiring a second form of verification. Even if someone manages to obtain your password, they won’t be able to access your account without the authentication code from your TOTP app.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re committed to ensuring your account’s security and will continue to improve Tina Cloud’s features to meet your needs. If you have any questions or need assistance with setting up MFA, don’t hesitate to reach out to our support team.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Secure your account today by enabling MFA in Tina Cloud! Stay tuned for more updates as we expand our security offerings.\"}]}]},\"_sys\":{\"filename\":\"two_factor_authentication\",\"basename\":\"two_factor_authentication.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"two_factor_authentication\"],\"path\":\"content/blog/two_factor_authentication.mdx\",\"relativePath\":\"two_factor_authentication.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/two_factor_authentication.mdx\"},\"next\":null,\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Overview of the Incident\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"On 15th December 2024, TinaCMS identified unauthorized activity involving compromised AWS access keys. These keys were exploited to send unauthorized emails (targeting the general French community, not Tina customers specifically) using our Amazon Simple Email Service (SES) infrastructure.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"img\",\"url\":\"https://assets.tina.io/06bcd49e-f919-4e53-a2c4-77f656491c7d/img/blog/2024-12-tinacloud-public-disclosure-security-breach/phishing-email.png\",\"alt\":\"A screenshot of one of the phishing emails\",\"caption\":\"Figure: the emails sent were in French\",\"children\":[{\"type\":\"text\",\"text\":\"\"}]},{\"type\":\"text\",\"text\":\"Figure: the emails sent were in French\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"As an automated measure, the impacted key was revoked. Afterwards, our team confirmed the extent of the incident using CloudTrail logs, investigated root cause, and took steps (described below) to secure our systems.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Outbound email functionality, including user invitations, was impacted. This has since been resolved.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We apologize for this, and we are confident that it won’t happen again.\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Incident Details\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Incident start: 13th December 2024, 16:33 GMT+11\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Time of Detection: 15th December 2024, 19:05 GMT+11\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Type of Incident: Unauthorized use of AWS access keys\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Services Impacted:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Amazon SES (email sending)\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"User invitation workflows relying on outbound email\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Nature of Access:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"AWS access keys with root permissions were compromised and misused\"}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Verification:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"CloudTrail logs were used to confirm which systems and services were accessed during the incident\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Root Cause Analysis\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"The unauthorized access was traced to a vulnerability in our CI/CD pipeline. During the build process, a step in the GitHub Actions workflow inadvertently wrote the GitHub Actions Runner’s environment variables, including sensitive AWS access keys, to a JavaScript file.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"The JavaScript file containing the keys was subsequently deployed and served publicly as part of TinaCloud, allowing attackers to obtain the access keys directly from the front-end code.\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Impact Assessment\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Customer Data:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Based off CloudTrail logs, there was no evidence of unauthorized access to customer data.\\nThis includes content databases, end user login information, access to application secrets.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Affected Systems:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"⚠️ Amazon SES for email-sending functionality\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"User Impact:\",\"bold\":true}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"❌ Temporary suspension of email services impacted workflows, including user invitations\"}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Actions Taken\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Revoked all access keys:\\nAll compromised and legacy AWS access keys were revoked immediately\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Verification of access:\\nCloudTrail logs were reviewed to identify and confirm systems accessed by the unauthorized actor\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Confirmed security controls:\\nMFA (Multi-Factor Authentication) is enabled on all user accounts that have console access\\nRevoked access to all unnecessary users\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Suspension of email sending:\\nOutbound email services were temporarily suspended whilst we were ascertaining root cause and AWS’s review.\\nServices have now been restored.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - CI/CD AWS access:\\nAuthentication for the GitHub Actions has been upgraded from long lived Access Keys to OIDC\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Build process:\\nThe build process was reviewed, and the handling of environment variables was updated.\\nThe use of process.env was replaced with import.meta, following best practices outlined in \"},{\"type\":\"a\",\"url\":\"https://vite.dev/config/shared-options.html#define\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"Vite’s documentation\"}]},{\"type\":\"text\",\"text\":\", to prevent sensitive data from being exposed in build artifacts.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"✅ Done - Repository secrets audit:\\nA thorough audit of all GitHub repositories is being conducted to identify any other sensitive information that may have been inadvertently exposed in past builds or commits\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Hardened IAM policies:\\nIAM policies tied to CI/CD systems have been reviewed and updated to ensure adherence to least privilege principles, removing unnecessary permissions, especially those with root or administrative access\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] IP allow listing for AWS access:\\nAWS IAM role usage has been restricted to trusted IP ranges, particularly for CI/CD systems and other sensitive operations\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Continuous monitoring and alerts:\\nContinuous monitoring tools like Amazon GuardDuty, AWS CloudTrail Insights, and AWS Security Hub will be implemented to detect and alert on suspicious activity, such as new access key creation or unusual IP access\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"[TODO] Automated security scans:\\nAutomated tools will be integrated into the CI/CD pipeline to proactively detect secrets or vulnerabilities during code builds\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Advice to Tina Customers\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Report suspicious emails: If you received unauthorized or suspicious emails from TinaCMS, please report them to \"},{\"type\":\"a\",\"url\":\"mailto:security@tina.io\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"security@tina.io\"}]}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Verify email origin: Ensure any emails claiming to be from TinaCMS are legitimate\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Stay updated: Follow our official communication channels for real-time updates\"}]}]}]},{\"type\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Contact Information\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"For questions, concerns, or further information, please contact:\"}]},{\"type\":\"ul\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Email: \"},{\"type\":\"a\",\"url\":\"mailto:security@tina.io\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"security@tina.io\"}]}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Website: \"},{\"type\":\"a\",\"url\":\"https://tina.io/security\",\"title\":null,\"children\":[{\"type\":\"text\",\"text\":\"https://tina.io/security\"}]}]}]}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"TinaCMS remains committed to protecting our systems and maintaining transparency.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"🦙 The Tina herd\"}]}]},\"_sys\":{\"filename\":\"2024-12-tinacloud-public-disclosure-security-breach\",\"basename\":\"2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"hasReferences\":null,\"breadcrumbs\":[\"2024-12-tinacloud-public-disclosure-security-breach\"],\"path\":\"content/blog/2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"relativePath\":\"2024-12-tinacloud-public-disclosure-security-breach.mdx\",\"extension\":\".mdx\"},\"id\":\"content/blog/2024-12-tinacloud-public-disclosure-security-breach.mdx\"},\"body\":{\"type\":\"root\",\"children\":[{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Introducing Multi-Factor Authentication (MFA) Support in Tina Cloud\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re thrilled to announce that Tina Cloud now supports Multi-Factor Authentication (MFA), adding an extra layer of security to your account. With this new feature, you can further protect your data and ensure that only you have access to your account.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How Does MFA Work in Tina Cloud?\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For Email Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Tina Cloud’s MFA is available for accounts using email logins. Once you enable MFA, you’ll need to provide a second factor of authentication in addition to your password. This additional step uses a Time-based One-Time Password (TOTP) generated by a compatible authenticator app, such as Google Authenticator, Authy, or 1Password.\"}]},{\"type\":\"h4\",\"children\":[{\"type\":\"text\",\"text\":\"For GitHub Logins\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"For users who log in via GitHub, MFA functionality is managed directly through GitHub. If you haven’t already, we highly recommend enabling MFA on your GitHub account to secure your login. Tina Cloud integrates seamlessly with GitHub’s existing MFA system, ensuring a secure connection.\"}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"How to Enable MFA\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Setting up MFA is quick and straightforward:\"}]},{\"type\":\"ol\",\"children\":[{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Log in to your Tina Cloud account using your email and password.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Navigate to your Account Settings and find the Multi-Factor Authentication section.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Follow the prompts to scan a QR code using your preferred TOTP app.\"}]}]},{\"type\":\"li\",\"children\":[{\"type\":\"lic\",\"children\":[{\"type\":\"text\",\"text\":\"Enter the code generated by your app to complete the setup.\"}]}]}]},{\"type\":\"h3\",\"children\":[{\"type\":\"text\",\"text\":\"Why Enable MFA?\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Adding MFA to your account significantly enhances security by requiring a second form of verification. Even if someone manages to obtain your password, they won’t be able to access your account without the authentication code from your TOTP app.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"We’re committed to ensuring your account’s security and will continue to improve Tina Cloud’s features to meet your needs. If you have any questions or need assistance with setting up MFA, don’t hesitate to reach out to our support team.\"}]},{\"type\":\"p\",\"children\":[{\"type\":\"text\",\"text\":\"Secure your account today by enabling MFA in Tina Cloud! Stay tuned for more updates as we expand our security offerings.\"}]}]}}}]}},\"variables\":{\"relativePath\":\"forestry.json\"}}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Forestry.io CMS | TinaCMS\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"The Forestry.io team is now focused on building TinaCMS. If you wish to migrate your Forestry site to Tina, follow the guide below.\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:title\",\"content\":\"Forestry.io CMS\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:description\",\"content\":\"The Forestry.io team is now focused on building TinaCMS. If you wish to migrate your Forestry site to Tina, follow the guide below.\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"7\",{\"name\":\"twitter:site\",\"content\":\"@tinacms\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:title\",\"content\":\"TinaCMS – Headless CMS with GitHub \u0026 Markdown Support\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:description\",\"content\":\"TinaCMS is a fully open-source headless CMS that supports Git\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"/favicon/favicon.ico\"}]]\n6:null\n"])</script></body></html>