1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="generator" content="Gatsby 5.8.1"/><meta name="theme-color" content="#663399"/><meta data-react-helmet="true" name="msapplication-TileColor" content="#00aba9"/><meta data-react-helmet="true" name="theme-color" content="#ffffff"/><meta data-react-helmet="true" name="description" content="Nowadays, an urge to write can be easily satisfied. Simply jump to Medium and you can fire away typing your first blog post. Not happy with your posts gettingâ¦"/><meta data-react-helmet="true" property="og:title" content="Gatsby. Blogging platform engine for developers"/><meta data-react-helmet="true" property="og:description" content="Nowadays, an urge to write can be easily satisfied. Simply jump to Medium and you can fire away typing your first blog post. Not happy with your posts gettingâ¦"/><meta data-react-helmet="true" property="og:type" content="website"/><meta data-react-helmet="true" name="twitter:card" content="summary"/><meta data-react-helmet="true" name="twitter:creator" content="Alex Klaus"/><meta data-react-helmet="true" name="twitter:title" content="Gatsby. Blogging platform engine for developers"/><meta data-react-helmet="true" name="twitter:description" content="Nowadays, an urge to write can be easily satisfied. Simply jump to Medium and you can fire away typing your first blog post. Not happy with your posts gettingâ¦"/><style data-href="/styles.22602650063e40e31ddc.css" data-identity="gatsby-global-css">@import url(//fonts.googleapis.com/icon?family=Roboto:400,500);h1{font-size:24px;font-weight:400}h1,h2{line-height:32px}h2{font-size:22px;font-weight:500}h1,h2{border-bottom:1px solid rgba(0,0,0,.07);padding-bottom:.3em}h3{all:unset;font-size:18px;font-weight:500;line-height:28px}h4{all:unset;font-size:16px;font-weight:500;line-height:24px}body{-webkit-text-fill-color:initial;all:unset;color:#303030;font-family:-apple-system,BlinkMacSystemFont,Roboto,Helvetica,Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.5}.title{font-size:28px;line-height:36px;margin-bottom:8px}a{text-decoration:none}a:hover{text-decoration:underline}table{border-collapse:collapse;border-spacing:0;display:block;overflow:auto;width:100%}table tr{background-color:#fff;border-top:1px solid #c6cbd1}table tr:nth-child(2n){background-color:#f6f6f6}table tr td,table tr th{border:1px solid #dfe2e5;padding:6px 13px}table tr th{font-weight:500}blockquote{border-left:.4rem solid rgba(46,46,46,.1);color:rgba(46,46,46,.8);font-style:italic;margin:1.6rem 1.6rem 1.6rem 0;padding:0 0 0 .8rem}code[class*=language-],pre[class*=language-]{word-wrap:normal;background:none;color:#000;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;-webkit-hyphens:none;hyphens:none;line-height:1.5;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal}pre[class*=language-]{margin:.5em 0;overflow:visible;padding:1px;position:relative}pre[class*=language-]>code{background-attachment:local;background-color:#fdfdfd;background-image:linear-gradient(transparent 50%,rgba(69,142,209,.04) 0);background-origin:content-box;background-size:3em 3em;border-left:10px solid #358ccb;box-shadow:-1px 0 0 0 #358ccb,0 0 0 1px #dfdfdf;position:relative;z-index:1}code[class*=language-]{display:block;height:inherit;max-height:inherit;overflow:auto;padding:0 1em}:not(pre)>code[class*=language-],pre[class*=language-]{background-color:#fdfdfd;box-sizing:border-box;margin-bottom:1em}:not(pre)>code[class*=language-]{border:1px solid rgba(0,0,0,.1);border-radius:.3em;color:#c92c2c;display:inline;padding:.2em;position:relative;white-space:normal}pre[class*=language-]:after,pre[class*=language-]:before{bottom:.75em;box-shadow:0 13px 8px #979797;content:"";display:block;height:20%;left:.18em;max-height:13em;position:absolute;transform:rotate(-2deg);width:40%}pre[class*=language-]:after{left:auto;right:.75em;transform:rotate(2deg)}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#7d8b99}.token.punctuation{color:#5f6364}.token.boolean,.token.constant,.token.deleted,.token.function-name,.token.number,.token.property,.token.symbol,.token.tag{color:#c92c2c}.token.attr-name,.token.builtin,.token.char,.token.function,.token.inserted,.token.selector,.token.string{color:#2f9c0a}.token.entity,.token.operator,.token.url,.token.variable{background:hsla(0,0%,100%,.5);color:#a67f59}.token.atrule,.token.attr-value,.token.class-name,.token.keyword{color:#1990b8}.token.important,.token.regex{color:#e90}.language-css .token.string,.style .token.string{background:hsla(0,0%,100%,.5);color:#a67f59}.token.important{font-weight:400}.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.namespace{opacity:.7}@media screen and (max-width:767px){pre[class*=language-]:after,pre[class*=language-]:before{bottom:14px;box-shadow:none}}pre[class*=language-].line-numbers.line-numbers{padding-left:0}pre[class*=language-].line-numbers.line-numbers code{padding-left:3.8em}pre[class*=language-].line-numbers.line-numbers .line-numbers-rows{left:0}pre[class*=language-][data-line]{padding-bottom:0;padding-left:0;padding-top:0}pre[data-line] code{padding-left:4em;position:relative}pre .line-highlight{margin-top:0}.about-body{background-color:#fff;line-height:28px;margin-bottom:20px;padding:40px 40px 20px}@media(max-width:959px){.about-body{padding:24px}}.about-body h1{font-weight:500}.about-body hr{border:0;border-top:1px solid #e5e5e5}.about-body .right-img{float:right;margin:0 0 5px 5px}.post-body .prev-next-articles-links a:hover,a.highlight-accent:hover{color:#ff5858}.post-body{background-color:#fff;margin-bottom:20px;padding:40px 40px 20px}@media(max-width:959px){.post-body{padding:24px}}.post-body .date{color:#a8a8a8;font-size:14px}.post-body hr{border:0;border-top:1px solid #e5e5e5}.post-body .post-meta{align-items:center;color:#505050;display:flex;flex-direction:column}.post-body .post-meta>*{margin:8px 0}.post-body .post-main-body h1{font-weight:500}.post-body .post-main-body a,.post-body .post-main-body a:active,.post-body .post-main-body a:hover,.post-body .post-main-body a:link,.post-body .post-main-body a:visited{color:#0366d6}.post-body .prev-next-articles-links{display:flex;flex-wrap:wrap;justify-content:space-between;list-style:none;padding:0}.post-body .prev-next-articles-links a{color:#505050;display:block}section.top{font-size:28px;line-height:36px;margin-bottom:20px}@media(max-width:959px){section.top{margin-bottom:8px}}content{background-color:#f9f9f9;display:flex;justify-content:center}content main{display:flex;margin-top:28px;max-width:1280px;min-width:0}@media(max-width:959px){content main{margin-top:16px}}content main .main-area{flex:auto;min-width:0}content main .right-side-bar{display:flex;flex:none;margin-left:20px;min-width:300px;width:300px}@media(max-width:959px){content main .right-side-bar{display:none}}footer{background-color:#fff;border-top:1px solid #e5e5e5;display:flex;height:80px;justify-content:center}@media(max-width:959px){footer{height:60px}}footer .content{display:flex;line-height:28px;width:1280px}@media(max-width:1279px){footer .content{padding-left:24px}}footer .content .copyright{color:#666;letter-spacing:1px}footer .content .copyright,footer .content .social{align-items:center;display:flex;font-size:14px;justify-content:flex-end}footer .content .social{flex:1 1}footer .content .social .button{color:#ff8b8b;cursor:pointer;height:46px;text-align:center;width:46px}footer .content .social .button>*{vertical-align:bottom}footer .content .social .button:hover{color:#000;transition:all .7s}header{background-color:#fff;border-bottom:1.5px solid #e5e5e5;display:flex;height:80px;justify-content:center}@media(max-width:959px){header{height:60px}}header .content{display:flex;width:1280px}@media(max-width:1279px){header .content{padding-left:24px}}header .content .logo{align-self:center;display:flex;padding-right:16px}@media(max-width:599px){header .content .logo{display:none}}
1header .content .logo svg:hover path{fill:#ff5858}header .content .header-title{align-self:center;display:flex;flex-direction:column}@media(min-width:600px){header .content .header-title{border-left:thin solid #d0d0d0;padding-left:16px}}header .content .header-title .name{color:#303030;font-size:24px;font-weight:500;letter-spacing:4px;line-height:30px}header .content .header-title .position{color:#707070;font-size:14px}@media(max-width:599px){header .content .header-title .position{display:none}}header .content .menu{align-items:center;display:flex;flex:1 1;justify-content:flex-end;line-height:80px}@media(max-width:959px){header .content .menu{line-height:60px}}header .content .menu a{color:#303030;display:block;font-size:16px;letter-spacing:2px;padding:0 16px;text-decoration:none;text-transform:uppercase}header .content .menu .underlined{position:relative}@media(min-width:600px){header .content .menu .underlined{margin:0 4px}}header .content .menu .underlined:before{border-bottom:2px solid #ff8b8b;bottom:1px;content:"";height:0;position:absolute;transform:scaleX(0);transition:transform .2s ease-in;width:100%}header .content .menu .underlined.selected:before,header .content .menu .underlined:hover:before{transform:scaleX(1)}.side-bar a:hover,a.highlight-accent:hover{color:#ff5858}.side-bar{flex-direction:column;font-size:16px;width:100%}.side-bar,.side-bar .first-row{display:flex}.side-bar .first-row img{border:thin solid #e5e5e5;border-radius:50%}.side-bar .first-row .social{display:flex;flex-direction:column;margin-left:16px}.side-bar .section{background-color:#fff;border:thin solid #e5e5e5;border-radius:3px;color:#303030;font-size:14px;margin-top:16px;padding:8px 16px}.side-bar .section .section-title{color:#505050;font-weight:700}.side-bar .section .content{border-top:thin solid #e5e5e5;margin-top:8px;padding-top:16px}.side-bar a{color:#505050;display:block;margin-bottom:8px;text-decoration:none}.side-bar a svg,a.post-tag{margin-right:8px}a.post-tag{border:thin solid #e5e5e5;color:#909090;font-size:14px;padding:8px;text-decoration:none}a.post-tag:hover{background-color:#e5e5e5;color:#5d5d5d;text-decoration:none}section.post{background-color:#fff;border:1px solid #e5e5e5;border-radius:3px;margin-bottom:20px;padding:24px}@media(max-width:959px){section.post{margin-bottom:8px}}section.post .title a{color:#303030;text-decoration:none}section.post .title a:hover{color:#ff5858}section.post .date{color:#a8a8a8;font-size:14px}section.post .description{color:#505050;padding:8px 0 16px}section.post a.read-more{color:#ff5858}.post-social{display:inline-flex}.post-social>*{margin:0 5px}.post-social .button{color:#fff;cursor:pointer;height:32px;line-height:30px;text-align:center;width:32px}.post-social .button>*{vertical-align:middle}.post-social .button.facebook{background-color:#3b5998}.post-social .button.twitter{background-color:#1da1f2}.post-social .button.linkedin{background-color:#0077b5}.post-social .button.reddit{background-color:#ff4500}.post-social .button.email{background-color:#666}.post-social .button:hover{background-clip:padding-box;background-image:linear-gradient(hsla(0,0%,100%,.35),hsla(0,0%,100%,0))}.post-tags{box-sizing:border-box;margin-bottom:16px}</style><style>.gatsby-image-wrapper{position:relative;overflow:hidden}.gatsby-image-wrapper picture.object-fit-polyfill{position:static!important}.gatsby-image-wrapper img{bottom:0;height:100%;left:0;margin:0;max-width:none;padding:0;position:absolute;right:0;top:0;width:100%;object-fit:cover}.gatsby-image-wrapper [data-main-image]{opacity:0;transform:translateZ(0);transition:opacity .25s linear;will-change:opacity}.gatsby-image-wrapper-constrained{display:inline-block;vertical-align:top}</style><noscript><style>.gatsby-image-wrapper noscript [data-main-image]{opacity:1!important}.gatsby-image-wrapper [data-placeholder-image]{opacity:0!important}</style></noscript>
1<script type="module">const e="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;e&&document.body.addEventListener("load",(function(e){const t=e.target;if(void 0===t.dataset.mainImage)return;if(void 0===t.dataset.gatsbyImageSsr)return;let a=null,n=t;for(;null===a&&n;)void 0!==n.parentNode.dataset.gatsbyImageWrapper&&(a=n.parentNode),n=n.parentNode;const o=a.querySelector("[data-placeholder-image]"),r=new Image;r.src=t.currentSrc,r.decode().catch((()=>{})).then((()=>{t.style.opacity=1,o&&(o.style.opacity=0,o.style.transition="opacity 500ms linear")}))}),!0);</script>
1<link rel="preconnect" href="https://www.googletagmanager.com"/><link rel="dns-prefetch" href="https://www.googletagmanager.com"/><link rel="alternate" type="application/rss+xml" title="Alex Klaus's Blog" href="/rss.xml"/><link rel="icon" href="/favicon-32x32.png?v=a5a8a683dcc8c8b31e33777c46c80118" type="image/png"/><link rel="manifest" href="/manifest.webmanifest" crossorigin="anonymous"/><link rel="apple-touch-icon" sizes="48x48" href="/icons/icon-48x48.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><link rel="apple-touch-icon" sizes="72x72" href="/icons/icon-72x72.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><link rel="apple-touch-icon" sizes="96x96" href="/icons/icon-96x96.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><link rel="apple-touch-icon" sizes="144x144" href="/icons/icon-144x144.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><link rel="apple-touch-icon" sizes="192x192" href="/icons/icon-192x192.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><link rel="apple-touch-icon" sizes="256x256" href="/icons/icon-256x256.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><link rel="apple-touch-icon" sizes="384x384" href="/icons/icon-384x384.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><link rel="apple-touch-icon" sizes="512x512" href="/icons/icon-512x512.png?v=a5a8a683dcc8c8b31e33777c46c80118"/><title data-react-helmet="true">Gatsby. Blogging platform engine for developers | Alex Klaus</title><link data-react-helmet="true" rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/><link data-react-helmet="true" rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link data-react-helmet="true" rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link data-react-helmet="true" rel="manifest" href="/site.webmanifest"/><link data-react-helmet="true" rel="mask-icon" href="/safari-pinned-tab.svg" color="#1f7992"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><header><div class="content"><div class="logo"><a href="/"><svg xmlns="http://www.w3.org/2000/svg" width="31" height="58"><path fill="#505050" stroke="none" d="M14.04 51.03L11.39 51.03L11.39 26.46L5.35 26.46L5.35 51.03L2.70 51.03L2.70 26.46L1.30 26.46L0.43 23.87L2.70 23.87Q2.70 19.28 3.35 17.60L3.35 17.60Q4.54 14.53 8.37 14.53L8.37 14.53Q11.45 14.53 12.85 16.58L12.85 16.58Q14.04 18.31 14.04 21.49L14.04 21.49L14.04 51.03ZM11.39 23.87L11.39 20.57Q11.39 19.06 10.69 18.12Q9.99 17.17 8.53 17.17L8.53 17.17Q7.02 17.17 6.18 18.12Q5.35 19.06 5.35 20.63L5.35 20.63L5.35 23.87L11.39 23.87ZM16.47 51.03L16.47 15.01L19.12 15.01L19.12 23.33L26.08 15.01L29.54 15.01L21.87 23.98L31.05 51.03L28.19 51.03L19.12 23.98L19.12 51.03L16.47 51.03Z"></path></svg></a></div><div class="header-title"><span class="name">Alex Klaus</span><span class="position">Developer  |  Architect  |  Leader</span></div><div class="menu"><span class="underlined"><a href="/">Blog</a></span><span class="underlined"><a class="link-about" href="/about/">About</a></span></div></div></header><content is="div"><main><section class="main-area"><div class="post-body"><div class="post-tags"><a class="post-tag" href="/tags/react-js/">ReactJS</a></div><div class="title">Gatsby. Blogging platform engine for developers</div><div class="date">20 March 2019</div><div class="post-main-body"><p><span 2 class="gatsby-resp-image-wrapper" 3 style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 899px; " 4 > 5 <a 6 class="gatsby-resp-image-link" 7 href="/static/f5ee6a9ccae46aa175bc885bf2b2062f/f7121/blogging-platforms.png" 8 style="display: block" 9 target="_blank" 10 rel="noopener" 11 > 12 <span 13 class="gatsby-resp-image-background-image" 14 style="padding-bottom: 20.444444444444446%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAeklEQVR42m3PSQ5EIQgEUA9mGAQEh2+8/2k6uurpLSrsqkgRISKqpsc9v5mpWvWIbjXGeKy6R9t7J1VFRLr4KPSJuagal1NQxKJ1YkKiOWcSEQBgZkCKNnrviIT/AMANIKKc8xgjuXspEq27u5zV5h5n/o/3r5h5rfUCL7k/G+qaJoAAAAAASUVORK5CYII='); background-size: cover; display: block;" 15 ></span> 16 <picture> 17 <source 18 srcset="/static/f5ee6a9ccae46aa175bc885bf2b2062f/89528/blogging-platforms.webp 225w, 19/static/f5ee6a9ccae46aa175bc885bf2b2062f/69f7e/blogging-platforms.webp 450w, 20/static/f5ee6a9ccae46aa175bc885bf2b2062f/fc12c/blogging-platforms.webp 899w" 21 sizes="(max-width: 899px) 100vw, 899px" 22 type="image/webp" 23 /> 24 <source 25 srcset="/static/f5ee6a9ccae46aa175bc885bf2b2062f/0608e/blogging-platforms.png 225w, 26/static/f5ee6a9ccae46aa175bc885bf2b2062f/31401/blogging-platforms.png 450w, 27/static/f5ee6a9ccae46aa175bc885bf2b2062f/f7121/blogging-platforms.png 899w" 28 sizes="(max-width: 899px) 100vw, 899px" 29 type="image/png" 30 /> 31 <img 32 class="gatsby-resp-image-image" 33 src="/static/f5ee6a9ccae46aa175bc885bf2b2062f/f7121/blogging-platforms.png" 34 alt="Blogging platforms" 35 title="" 36 loading="lazy" 37 decoding="async" 38 style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" 39 /> 40 </picture> 41 </a> 42 </span></p> 43<p>Nowadays, an urge to write can be easily satisfied. Simply jump to <a href="http://Medium.com">Medium</a> and you can fire away typing your first blog post.</p> 44<p>Not happy with your posts getting lost among millions of similar looking pages from thousands of bloggers? Then start building you own website for a small fee on <a href="https://www.squarespace.com/">Squarespace</a>, <a href="https://wordpress.com/create-blog/">WordPress</a> and the likes.</p> 45<p>But for software developers, especially, for front-end devs itâs not enough.</p> 46<h2>How developers want to blog?</h2> 47<p>The basic requirements for a blog would include:</p> 48<ol> 49<li>Static server-rendered pages for SEO (we donât expect writing thousands of posts, when managing static pages would become an issue).</li> 50<li>Writing posts in Markdown to separate the content from styling.</li> 51<li>Syntax highlight for code samples.</li> 52<li>Open source with strong community support (itâs just how itâs all done nowadays).</li> 53</ol> 54<p>I would add to the list the ability to use a familiar environment (e.g. VS Code) and a well-known language for templates.</p> 55<h2>What are the options?</h2> 56<p>And⦠we are still spoiled for choice. Go to <a href="https://www.staticgen.com">StaticGen</a> for a list of options and you would see who dominates the market. Here is the top of the list:</p> 57<table> 58<thead> 59<tr> 60<th>Platform</th> 61<th>Language</th> 62<th>Templates</th> 63<th align="center">GitHub Stars / Forks</th> 64</tr> 65</thead> 66<tbody> 67<tr> 68<td><a href="https://jekyllrb.com">Jekyll</a></td> 69<td>Ruby</td> 70<td>Liquid</td> 71<td align="center">37K / 8K</td> 72</tr> 73<tr> 74<td><a href="https://nextjs.org">Next</a></td> 75<td>JavaScript</td> 76<td>React</td> 77<td align="center">36K / 4K</td> 78</tr> 79<tr> 80<td><a href="https://gohugo.io">Hugo</a></td> 81<td>Go</td> 82<td>Go</td> 83<td align="center">34K / 4K</td> 84</tr> 85<tr> 86<td><a href="https://www.gatsbyjs.org">Gatsby</a></td> 87<td>JavaScript</td> 88<td>React</td> 89<td align="center">33K / 5K</td> 90</tr> 91<tr> 92<td><a href="https://hexo.io">Hexo</a></td> 93<td>JavaScript</td> 94<td>EJS, Pug, etc.</td> 95<td align="center">26K / 3K</td> 96</tr> 97<tr> 98<td><a href="https://nuxtjs.org">Nuxt</a></td> 99<td>JavaScript</td> 100<td>Vue</td> 101<td align="center">19K / 2K</td> 102</tr> 103<tr> 104<td><a href="https://vuepress.vuejs.org">VuePress</a></td> 105<td>JavaScript</td> 106<td>Vue</td> 107<td align="center">12K / 2K</td> 108</tr> 109</tbody> 110</table> 111<p>All the platforms meet the basic requirements and provide additional libraries/plugins, samples and debugging tools (like Hot Module Replacement).</p> 112<p>To narrow down the selection, I ruled out all non-JavaScript platforms (just because I donât to want install additoinal dependencies like Ruby or Go).</p> 113<p>Due to focusing on server-side rendered pages, which requires a NodeJS server, I shot out <em>Nuxt</em>, <em>VuePress</em> and <em>Next</em> (though the later <a href="https://nextjs.org/docs/#static-html-export">supports static export</a> as an option). Apart from this concern, I really liked <a href="https://nextjs.org">Next</a> and <a href="https://nuxtjs.org">Nuxt</a>.</p> 114<p><em>Hexo</em> fell out of favour for its non-standard templating languages (really, who uses <a href="https://ejs.co">EJS</a>?â¦).</p> 115<p>And here we get to <a href="https://www.gatsbyjs.org">Gatsby</a>!</p> 116<h2>Why Gatsby better than others?</h2> 117<p>Here what won me over:</p> 118<ul> 119<li>Use of ReactJS to build pages and components.</li> 120<li>Full control over the UI (again, itâs basically a React app).</li> 121<li>Generates static files on the output (no NodeJS server required).</li> 122<li>GraphQL for querying data!</li> 123<li>Nice tools (Web UI for GraphQL queries, Hot Module Replacement, CLI, etc).</li> 124<li>Useful plugins for all my needs.</li> 125<li>Documentation, articles, starters/samples, community, etc.</li> 126</ul> 127<p>Though a full list of Gatsby features is quite long, so I recommend to check out the <a href="https://www.gatsbyjs.org">official website</a>.</p> 128<p>So here we go, this is my Gatsby blog.</p></div><hr/><div class="post-meta"><div>
128Share the post</div><div class="post-social"><span title="Share on Facebook"><button aria-label="facebook" class="react-share__ShareButton button facebook" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="facebook-f" class="svg-inline--fa fa-facebook-f " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path></svg></button></span><span title="Share on Twitter"><button aria-label="twitter" class="react-share__ShareButton button twitter" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></button></span><span title="Share on LinkedIn"><button aria-label="linkedin" class="react-share__ShareButton button linkedin" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin-in" class="svg-inline--fa fa-linkedin-in " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg></button></span><span title="Post on Reddit"><button aria-label="reddit" class="react-share__ShareButton button reddit" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="reddit-alien" class="svg-inline--fa fa-reddit-alien " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"></path></svg></button></span><span title="Email"><button title="Gatsby. Blogging platform engine for developers" aria-label="email" class="react-share__ShareButton button email" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="envelope" class="svg-inline--fa fa-envelope " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
128<path fill="currentColor" d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"></path></svg></button></span></div></div><ul class="prev-next-articles-links"><li></li><li><a rel="next" href="/webapi-proj-without-autofac/">.NET Core project without Autofac. Is it viable?<!-- --> â</a></li></ul><div id="disqus_thread"></div></div></section><section class="right-side-bar"><div class="side-bar"><div class="first-row"><img src="/photo_small_cut_centre.png" height="72px" width="72px" alt="Alex Klaus" title="Alex Klaus"/><div class="social"><a href="//twitter.com/_AlexKlaus" title="Follow me on Twitter"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" height="16"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg>twitter</a><a href="//www.linkedin.com/in/alex-klaus-a1514b21/" title="Connect on LinkedIn"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin-in" class="svg-inline--fa fa-linkedin-in " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="16"><path fill="currentColor" d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg>LinkedIn</a><a href="//stackoverflow.com/users/968003/alex-klaus" title="Stack Overflow Profile"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="stack-overflow" class="svg-inline--fa fa-stack-overflow " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" height="16"><path fill="currentColor" d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"></path></svg>Stack Overflow</a><a href="//github.com/aklaus" title="GitHub Profile"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512" height="16"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>GitHub</a><a href="//alex-klaus.com/rss.xml" title="Follow blog via RSS"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rss" class="svg-inline--fa fa-rss " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="16">
128<path fill="currentColor" d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg>RSS</a></div></div><div class="section"><div class="section-title">Last articles</div><div class="content"><a href="/transparent-auth-gateway-4/">Transparent Auth Gateway. #4. Deploying to Azure: App Registrations, WAF + Front Door</a><a href="/transparent-auth-gateway-3/">Transparent Auth Gateway. #3. Writing the code in C#</a><a href="/transparent-auth-gateway-2/">Transparent Auth Gateway. #2. Auth Flows</a><a href="/transparent-auth-gateway-1/">Transparent Auth Gateway. #1. Needs and means</a><a href="/ravendb-yabt-testing/">NoSQL Integration Testing â Convenience of RavenDB vs MongoDB, CosmosDB & DynamoDB</a><a href="/dotnet-sql-tests/">Pain & Gain of automated tests against SQL (MS SQL, PostgreSQL)</a><a href="/load-test-k6-typescript-azure/">Load Testing. k6 + TypeScript + Azure DevOps</a><a href="/load-test-options/">Load Testing. Choose a cloud-friendly tool</a><a href="/ravendb-yabt-multitenancy/">Multi-tenant applications with NoSQL</a><a href="/javascript-wat/">In Input We Don't Trust... and in JavaScript, don't trust output either ;)</a></div></div><div class="section"><div class="section-title">Categories</div><div class="content"><a href="/tags/net/">.NET</a><a href="/tags/no-sql/">NoSQL</a><a href="/tags/raven-db/">RavenDB</a><a href="/tags/yabt/">YABT</a><a href="/tags/type-script/">TypeScript</a><a href="/tags/angular/">Angular</a><a href="/tags/spa/">SPA</a><a href="/tags/ddd/">DDD</a><a href="/tags/identity/">Identity</a><a href="/tags/o-auth/">OAuth</a></div></div></div></section></main></content><footer><div class="content"><div class="copyright">© Copyright - Alex Klaus</div><div class="social"><a href="//twitter.com/_AlexKlaus" class="button" title="Follow me on Twitter"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" height="14"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></a><a href="//www.linkedin.com/in/alex-klaus-a1514b21/" class="button" title="Connect on LinkedIn"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="linkedin-in" class="svg-inline--fa fa-linkedin-in " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="14"><path fill="currentColor" d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg></a></div></div></footer></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div>
vendor: 66 bytes, line 128
128<script async="" src="https://www.googletagmanager.com/gtag/js?id=
128G-442SH4QYCD
vendor: 11 bytes, line 128
128"></script>
128<script> 129 130 131 if(!(navigator.doNotTrack == "1" || window.doNotTrack == "1")) { 132
vendor: 152 bytes, lines 132-136
132window.dataLayer = window.dataLayer || []; 133 function gtag(){dataLayer.push(arguments);} 134 gtag('js', new Date()); 135 136 gtag('config', '
136G-442SH4QYCD
vendor: 36 bytes, lines 136-137
136', {"send_page_view":false}); 137
137} 138 </script>
138<script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/gatsby-blog-engine-for-devs/";/*]]>*/</script>
138<!-- slice-start id="_gatsby-scripts-1" --> 139
139<script 140 id="gatsby-chunk-mapping" 141 > 142 window.___chunkMapping="{\"app\":[\"/app-950ba4bcef23f7327425.js\"],\"component---cache-caches-gatsby-plugin-offline-app-shell-js\":[\"/component---cache-caches-gatsby-plugin-offline-app-shell-js-fcd3ca1516978abaf60d.js\"],\"component---src-pages-404-js\":[\"/component---src-pages-404-js-448ceb0d6ebab347e452.js\"],\"component---src-pages-about-jsx\":[\"/component---src-pages-about-jsx-0902df745e5e9da063e9.js\"],\"component---src-pages-index-jsx\":[\"/component---src-pages-index-jsx-3f5d56eadf8b5f768bcc.js\"],\"component---src-pages-tags-jsx\":[\"/component---src-pages-tags-jsx-bb777fad613ab5813954.js\"],\"component---src-templates-blog-post-jsx\":[\"/component---src-templates-blog-post-jsx-b57ca9bd76e2fd0f7241.js\"],\"component---src-templates-tags-jsx\":[\"/component---src-templates-tags-jsx-92b4347b8fa0d2fa7107.js\"]}"; 143 </script>
143 144
144<script>window.___webpackCompilationHash="c1d1188606b21c1de403";</script>
144<script src="/webpack-runtime-94ae1fa75fa669b857e6.js" async></script>
144<script src="/framework-157a77a498333f434d13.js" async></script>
144<script src="/app-950ba4bcef23f7327425.js" async></script>
144<!-- slice-end id="_gatsby-scripts-1" --></body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.