From d98b612b1d77953cea92b085fdb84e51128f4ee9 Mon Sep 17 00:00:00 2001 From: cha0s Date: Tue, 30 Jan 2024 18:55:59 -0600 Subject: [PATCH] 612569f25405ab6833b1d2428a5840edae0c4545 --- 404.html | 2 +- ...79d61b.e2bf59ac.js => 7279d61b.bd9ca7d5.js} | 2 +- assets/js/89927158.1201161f.js | 1 + assets/js/89927158.73e04a13.js | 1 - ...957561.19e04299.js => a0957561.3ae5c83f.js} | 2 +- ...in.0998e04a.js => runtime~main.90bf3ff7.js} | 2 +- blog/archive/index.html | 2 +- blog/atom.xml | 14 +++++--------- blog/index.html | 2 +- blog/introducing-flecks/index.html | 18 +++++++----------- blog/rss.xml | 14 +++++--------- blog/tags/announcement/index.html | 2 +- blog/tags/flecks/index.html | 2 +- blog/tags/index.html | 2 +- blog/tags/introducing/index.html | 2 +- blog/tags/release/index.html | 2 +- docs/adding-flecks/index.html | 2 +- docs/category/generated-details/index.html | 2 +- docs/category/getting-started/index.html | 2 +- docs/category/guides/index.html | 2 +- docs/category/writing-your-code/index.html | 2 +- docs/cli/index.html | 2 +- docs/compilation/index.html | 2 +- docs/configuration/index.html | 2 +- docs/creating-a-fleck/index.html | 2 +- docs/database/index.html | 2 +- docs/docker/index.html | 2 +- docs/documentation/index.html | 2 +- docs/electron/index.html | 2 +- docs/environment/index.html | 2 +- docs/flecks/build-files/index.html | 2 +- docs/flecks/config/index.html | 2 +- docs/flecks/hooks/index.html | 2 +- docs/flecks/todos/index.html | 2 +- docs/gathering/index.html | 2 +- docs/hooks/index.html | 2 +- docs/index.html | 2 +- docs/installation/index.html | 2 +- docs/ordering/index.html | 2 +- docs/package-json/index.html | 2 +- docs/platforms/index.html | 2 +- docs/react/index.html | 2 +- docs/redux/index.html | 2 +- docs/repl/index.html | 2 +- docs/sockets/index.html | 2 +- docs/testing/index.html | 2 +- flecks/index.html | 2 +- index.html | 2 +- 48 files changed, 61 insertions(+), 73 deletions(-) rename assets/js/{7279d61b.e2bf59ac.js => 7279d61b.bd9ca7d5.js} (97%) create mode 100644 assets/js/89927158.1201161f.js delete mode 100644 assets/js/89927158.73e04a13.js rename assets/js/{a0957561.19e04299.js => a0957561.3ae5c83f.js} (60%) rename assets/js/{runtime~main.0998e04a.js => runtime~main.90bf3ff7.js} (97%) diff --git a/404.html b/404.html index b0a6f997..1ee73814 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ Page Not Found | flecks - + diff --git a/assets/js/7279d61b.e2bf59ac.js b/assets/js/7279d61b.bd9ca7d5.js similarity index 97% rename from assets/js/7279d61b.e2bf59ac.js rename to assets/js/7279d61b.bd9ca7d5.js index 0b75b43e..850abb48 100644 --- a/assets/js/7279d61b.e2bf59ac.js +++ b/assets/js/7279d61b.bd9ca7d5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkflecks_docusaurus=self.webpackChunkflecks_docusaurus||[]).push([[3729],{1053:(e,t,n)=>{n.r(t),n.d(t,{Tiny:()=>u,assets:()=>i,contentTitle:()=>o,default:()=>f,frontMatter:()=>a,metadata:()=>l,toc:()=>r});var s=n(5893),c=n(1151);n(9960);const a={title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},o=void 0,l={permalink:"/flecks/blog/introducing-flecks",source:"@site/blog/2024-01-30-introducing-flecks.mdx",title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",date:"2024-01-30T00:00:00.000Z",formattedDate:"January 30, 2024",tags:[{label:"announcement",permalink:"/flecks/blog/tags/announcement"},{label:"introducing",permalink:"/flecks/blog/tags/introducing"},{label:"flecks",permalink:"/flecks/blog/tags/flecks"},{label:"release",permalink:"/flecks/blog/tags/release"}],readingTime:6.405,hasTruncateMarker:!0,authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],frontMatter:{title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},unlisted:!1},i={authorsImageUrls:[void 0]},r=[];function u({children:e}){const t={span:"span",...(0,c.a)()};return(0,s.jsx)(t.span,{style:{fontSize:"0.75em"},children:e})}function p(e){const t={p:"p",strong:"strong",...(0,c.a)(),...e.components};return(0,s.jsxs)(t.p,{children:["Introducing flecks: an ",(0,s.jsx)(t.strong,{children:"exceptionally-extensible application production system"}),"."]})}function f(e={}){const{wrapper:t}={...(0,c.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var s=n(7294);const c={},a=s.createContext(c);function o(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkflecks_docusaurus=self.webpackChunkflecks_docusaurus||[]).push([[3729],{1053:(e,t,n)=>{n.r(t),n.d(t,{Tiny:()=>u,assets:()=>i,contentTitle:()=>o,default:()=>f,frontMatter:()=>a,metadata:()=>l,toc:()=>r});var s=n(5893),c=n(1151);n(9960);const a={title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},o=void 0,l={permalink:"/flecks/blog/introducing-flecks",source:"@site/blog/2024-01-30-introducing-flecks.mdx",title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",date:"2024-01-30T00:00:00.000Z",formattedDate:"January 30, 2024",tags:[{label:"announcement",permalink:"/flecks/blog/tags/announcement"},{label:"introducing",permalink:"/flecks/blog/tags/introducing"},{label:"flecks",permalink:"/flecks/blog/tags/flecks"},{label:"release",permalink:"/flecks/blog/tags/release"}],readingTime:6.085,hasTruncateMarker:!0,authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],frontMatter:{title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},unlisted:!1},i={authorsImageUrls:[void 0]},r=[];function u({children:e}){const t={span:"span",...(0,c.a)()};return(0,s.jsx)(t.span,{style:{fontSize:"0.75em"},children:e})}function p(e){const t={p:"p",strong:"strong",...(0,c.a)(),...e.components};return(0,s.jsxs)(t.p,{children:["Introducing flecks: an ",(0,s.jsx)(t.strong,{children:"exceptionally-extensible application production system"}),"."]})}function f(e={}){const{wrapper:t}={...(0,c.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>o});var s=n(7294);const c={},a=s.createContext(c);function o(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89927158.1201161f.js b/assets/js/89927158.1201161f.js new file mode 100644 index 00000000..61f1b870 --- /dev/null +++ b/assets/js/89927158.1201161f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkflecks_docusaurus=self.webpackChunkflecks_docusaurus||[]).push([[5563],{1620:(e,t,n)=>{n.r(t),n.d(t,{Tiny:()=>d,assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var s=n(5893),i=n(1151),o=n(9960);const a={title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},r=void 0,l={permalink:"/flecks/blog/introducing-flecks",source:"@site/blog/2024-01-30-introducing-flecks.mdx",title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",date:"2024-01-30T00:00:00.000Z",formattedDate:"January 30, 2024",tags:[{label:"announcement",permalink:"/flecks/blog/tags/announcement"},{label:"introducing",permalink:"/flecks/blog/tags/introducing"},{label:"flecks",permalink:"/flecks/blog/tags/flecks"},{label:"release",permalink:"/flecks/blog/tags/release"}],readingTime:6.085,hasTruncateMarker:!0,authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],frontMatter:{title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},unlisted:!1},c={authorsImageUrls:[void 0]},h=[{value:"First off, thanks for your time \ud83d\ude4f",id:"first-off-thanks-for-your-time-pray",level:2},{value:"Is it webscale fullstack?",id:"is-it-webscale-fullstack",level:2},{value:"For real, though",id:"for-real-though",level:3},{value:"Don't get it twisted",id:"dont-get-it-twisted",level:3},{value:"Do one thing and do it well",id:"do-one-thing-and-do-it-well",level:2},{value:"Small core",id:"small-core",level:3},{value:"The flecks way",id:"the-flecks-way",level:3},{value:"Why though?",id:"why-though",level:2},{value:"Separation of concerns",id:"separation-of-concerns",level:3},{value:"Joy",id:"joy",level:3},{value:"Because I can",id:"because-i-can",level:3},{value:"Thanks again",id:"thanks-again",level:2}];function d({children:e}){const t={span:"span",...(0,i.a)()};return(0,s.jsx)(t.span,{style:{fontSize:"0.75em"},children:e})}function u(e){const t={a:"a",admonition:"admonition",code:"code",del:"del",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Introducing flecks: an ",(0,s.jsx)(t.strong,{children:"exceptionally-extensible application production system"}),"."]}),"\n","\n",(0,s.jsxs)(t.h2,{id:"first-off-thanks-for-your-time-pray",children:["First off, thanks for your time ","\ud83d\ude4f"]}),"\n",(0,s.jsxs)(t.p,{children:["I appreciate you checking out the project! I truly hope that you will find working with flecks\nto be a joy. Feedback is welcome over on the\n",(0,s.jsx)(t.a,{href:"https://github.com/cha0s/flecks/discussions",children:"Github discussions page"}),"!"]}),"\n",(0,s.jsx)(t.admonition,{title:'What\'s the letter before "alpha"?',type:"warning",children:(0,s.jsxs)(t.p,{children:["This is a new release and worked on by only one person: ",(0,s.jsx)(t.a,{href:"https://github.com/cha0s",children:"me"}),"! Please\nkeep this in mind!"]})}),"\n",(0,s.jsxs)(t.h2,{id:"is-it-webscale-fullstack",children:["Is it ",(0,s.jsx)(t.del,{children:"webscale"})," fullstack?"]}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"A screenshot from the 2010 "MongoDB is webscale" cartoon",src:n(6522).Z+"",width:"480",height:"360"}),"\n",(0,s.jsx)("figcaption",{style:{fontSize:"0.8rem"},children:(0,s.jsx)(t.em,{children:"yes, I remember"})})]})}),"\n",(0,s.jsxs)(t.p,{children:["I admit, I clickbaited with the title there just a little bit. I love fullstack! flecks is more\nthan capable of building fullstack applications. If you just want to jump to more of that sort\nof thing, you might be interested in the ",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/react",children:"React"}),"\npage in the documentation."]}),"\n",(0,s.jsx)(t.h3,{id:"for-real-though",children:"For real, though"}),"\n",(0,s.jsxs)(t.p,{children:["A fullstack JS application is basically appception: what you actually have is a server\napplication written in JS that serves a client application written in JS. Using\nthe same language obscures (arguably, ",(0,s.jsx)(t.em,{children:"by design"}),") the fact that these are actually two distinct\napplications."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"A screenshot of Doctor Olivia Octopus saying "There's two, actually"",src:n(3069).Z+"",width:"790",height:"371"})}),"\n",(0,s.jsx)(t.admonition,{title:"Hot take",type:"danger",children:(0,s.jsxs)(t.p,{children:["Some modern framework APIs are becoming increasingly obscure in their attempt to paper over\nthis reality\n(",(0,s.jsx)(t.a,{href:"https://github.com/cha0s/flecks/blob/master/packages/react/src/client.js#L24",children:(0,s.jsx)(t.em,{children:"*ahem*"})}),"... and\ndon't get me started on ",(0,s.jsx)(t.a,{href:"https://www.mayank.co/blog/react-server-components/",children:(0,s.jsx)(t.strong,{children:"RSC"})}),"...)."]})}),"\n",(0,s.jsx)(t.h3,{id:"dont-get-it-twisted",children:"Don't get it twisted"}),"\n",(0,s.jsxs)(t.p,{children:["To put it in basic terms: A web server is a core aspect of a fullstack application, but ",(0,s.jsx)(t.strong,{children:"a\nweb server is not a core aspect of an application"}),". The same could be said about asset\noptimization, routing, and many other core fullstack JS concepts."]}),"\n",(0,s.jsxs)(t.p,{children:["flecks is concerned with ",(0,s.jsx)(t.strong,{children:"writing applications"}),"; fullstack applications are merely a subset of\nthat."]}),"\n",(0,s.jsx)(t.h2,{id:"do-one-thing-and-do-it-well",children:"Do one thing and do it well"}),"\n",(0,s.jsxs)(t.p,{children:["The core primitive is the ",(0,s.jsx)(t.strong,{children:"fleck"})," which is... just a JS module. There exists a server\nfleck, a web fleck, a React fleck, and so on."]}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple fleck that says hello when the application is starting:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"export const hooks = {\n '@flecks/core.starting': () => {\n console.log('hey you');\n },\n};\n"})}),"\n",(0,s.jsxs)(t.p,{children:["That's it. It's a module that exports some hook implementations. If you're curious what kind of\nhooks we're talking about, check out\n",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/flecks/hooks",children:"the hooks reference page"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["You add a reference to your fleck to a file called\n",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/creating-a-fleck",children:(0,s.jsx)(t.code,{children:"flecks.yml"})})," and you're rolling. Again,\n",(0,s.jsx)(t.strong,{children:"a flecks application is just flecks"})," having their hook implementations invoked."]}),"\n",(0,s.jsxs)(t.p,{children:["What are multiple flecks called? ",(0,s.jsx)(t.strong,{children:"flecks"}),"!"]}),"\n",(0,s.jsx)(t.admonition,{title:"Wordplay",type:"tip",children:(0,s.jsxs)(t.p,{children:["It is not a coincidence that the name of the framework uses the same word as the plural form of\nits constituting elements: the implication is that ",(0,s.jsx)(t.strong,{children:"flecks is just flecks"}),", it's not doing\nanything special on its own. Sure, it ",(0,s.jsx)(t.em,{children:"does something"}),", but the something that it does is simply\norchestrate your flecks together into an application."]})}),"\n",(0,s.jsx)(t.h3,{id:"small-core",children:"Small core"}),"\n",(0,s.jsxs)(t.p,{children:["Creating an application with ",(0,s.jsx)(t.code,{children:"@flecks/create-app"})," and then doing\ne.g. ",(0,s.jsx)(t.code,{children:"yarn install --production"})," will result in a full working application with a size of\n",(0,s.jsx)(t.strong,{children:"less than 7 MB"}),". Granted, it's only a server that will start, have nothing to do, and halt in\nabout 100 ms, but it illustrates that flecks builds what you tell it to, ",(0,s.jsx)(t.strong,{children:"it is not a kitchen\nsink system"}),"."]}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"A screenshot of Fry from Futurama captioned "Not sure if you're overly specific or not specific enough"",src:n(1048).Z+"",width:"552",height:"414"}),"\n",(0,s.jsx)("figcaption",{style:{fontSize:"0.8rem"},children:(0,s.jsx)(t.em,{children:"When you're writing an article and curious about how the Big Kid on the Block performs in terms of raw default production application size, but can't even figure out how to measure it because you have already downloaded more than 7MB of ads for their \"hosting solution\" into your brain in the process"})})]})}),"\n",(0,s.jsx)(t.h3,{id:"the-flecks-way",children:"The flecks way"}),"\n",(0,s.jsx)(t.p,{children:"The few core architectural opinions that are held are presented as suggestions, not requirements."}),"\n",(0,s.jsxs)(t.admonition,{type:"info",children:[(0,s.jsx)(t.mdxAdmonitionTitle,{children:(0,s.jsx)(t.strong,{children:"\u201cI hold it to be the inalienable right of anybody to go to hell in his own way.\u201d"})}),(0,s.jsx)(t.p,{children:"\u2015 Robert Frost"})]}),"\n",(0,s.jsxs)(t.p,{children:["A few motivating philosophies which I ",(0,s.jsx)(t.strong,{children:"do not"})," consider to be suggestions regarding this\nproject:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"You shouldn't be unpleasantly surprised by what happens"}),"\n",(0,s.jsxs)(t.li,{children:["Your application has what ",(0,s.jsx)(t.strong,{children:"you"})," want in it, not what ",(0,s.jsx)(t.strong,{children:"flecks"})," wants in it"]}),"\n",(0,s.jsx)(t.li,{children:"Developer comfort and confidence are essential, not just a nice-to-have"}),"\n",(0,s.jsx)(t.li,{children:"You shouldn't have to have a full budget for production deployment"}),"\n",(0,s.jsx)(t.li,{children:"Core architectural opinions require transparency and justification"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"why-though",children:"Why though?"}),"\n",(0,s.jsx)(t.p,{children:"You might be thinking something like:"}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"A screenshot of Michael from The Office shouting "NO GOD PLEASE NO"",src:n(9151).Z+"",width:"720",height:"405"}),"\n",(0,s.jsxs)("figcaption",{style:{fontSize:"0.8rem"},children:[(0,s.jsx)(t.em,{children:(0,s.jsx)(t.strong,{children:"Why?!"})})," ",(0,s.jsx)(t.em,{children:"A new JavaScript framework is the last thing we need."})]})]})}),"\n",(0,s.jsxs)(t.p,{children:["Perhaps you will write a thesis explaining in great detail why there is no\nobjective reason for flecks to exist. ",(0,s.jsx)(t.strong,{children:"I'm fine with that"}),",\n",(0,s.jsx)(d,{children:"because I love it and there's nothing you can do about it."})]}),"\n",(0,s.jsx)(t.p,{children:"Seriously though, a couple reasons why I made flecks and use it to develop applications are:"}),"\n",(0,s.jsx)(t.h3,{id:"separation-of-concerns",children:"Separation of concerns"}),"\n",(0,s.jsxs)(t.p,{children:["JS has matured a lot over the years, and modules are all but a first-class concept. This has been\na huge win for Properly Structured","\u2122\ufe0f"," applications."]}),"\n",(0,s.jsxs)(t.p,{children:["However, I believe the real reason many fullstack frameworks exist today is to\n",(0,s.jsx)(t.em,{children:"centralize concerns"}),". No one wants to set up a whole database, a routing system, a webserver,\netc, ",(0,s.jsxs)(d,{children:["etc, ",(0,s.jsx)(d,{children:"etc."})]})," every time. So, the default approach has been to reach out\nfor a framework to tie it all together. To some extent this is an inevitable evolution."]}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"Screenshot of Patrick Star with the caption "Push them somewhere else"",src:n(3948).Z+"",width:"478",height:"345"}),"\n",(0,s.jsx)("figcaption",{style:{fontSize:"0.8rem"},children:(0,s.jsxs)(t.em,{children:["You've never even ",(0,s.jsx)(t.strong,{children:"seen"})," a real ",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/redux",children:"duck"})]})})]})}),"\n",(0,s.jsxs)(t.p,{children:["With flecks, the first principle is to push these concerns out into modular units which do one\nthing and do it immaculately.\n",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Unix_philosophy",children:"This is not a new concept"}),"! These units can be\ncomposed into an application that does as much or as little as you like, ",(0,s.jsxs)(d,{children:["without requiring\nyour application structure to follow some corporate diktat ",(0,s.jsxs)(d,{children:["requiring you to enter a mailing\naddress to submit a pull request. ",(0,s.jsx)(d,{children:"(don't ask...)"})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"joy",children:"Joy"}),"\n",(0,s.jsx)("div",{style:{float:"right",padding:"0 1.5rem"},children:(0,s.jsx)(t.img,{alt:"A screenshot of Marie Kondo stating "This one sparks joy."",src:n(8749).Z+"",width:"242",height:"242"})}),"\n",(0,s.jsxs)(t.p,{children:["I have found this structure to work very well and to ",(0,s.jsx)(t.em,{children:"feel pleasant"}),". It's great to get up and\nrunning super quickly without having to repeat a monolithic structure over and over. It's almost\nreminiscent of those small plastic building blocks my parents used to step on. Super fun!"]}),"\n",(0,s.jsxs)(t.p,{children:["I find that I ",(0,s.jsx)(t.strong,{children:"don't have to think about what flecks is doing"})," most of the time, which is exactly\nwhat I want."]}),"\n",(0,s.jsxs)(t.p,{children:["flecks is at its best when you can forget that it exists and everything Just Works","\u2122\ufe0f","."]}),"\n",(0,s.jsx)(t.h3,{id:"because-i-can",children:"Because I can"}),"\n",(0,s.jsx)(t.p,{children:"No, seriously! Over the years interacting with various parts of the JS ecosystem I have experienced\nall manner of closed-minded hostile encounters with people who regrettably lacked the imagination\nto understand something which may have ran counter to the established wisdom of the week."}),"\n",(0,s.jsxs)(t.p,{children:["So I guess anyone who told me that it won't work, doesn't make sense, or other copium-based\nresponses: Here it is! Eat your hearts out and haterz get meme'd on. ","\ud83d\udc85"]}),"\n",(0,s.jsx)(t.h2,{id:"thanks-again",children:"Thanks again"}),"\n",(0,s.jsxs)(t.p,{children:["I do appreciate you reading all that! Come send me love (or threats or whatever) at the\n",(0,s.jsx)(t.a,{href:"https://github.com/cha0s/flecks/discussions",children:"Github discussions page"}),"! ","\ud83d\ude0c"]})]})}function p(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8749:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/kondo-8ca202a300547b698dedad3b3e1299e0.jpg"},3948:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/over-there-19c01e6cdf39cc325266aa184db093f0.jpg"},9151:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/pls-no-1cfa9e8bc25e1ee3d412e5c5ddbab291.jpg"},1048:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/specific-enough-7a5f7bca00d317ed79832a435f5bcedd.jpg"},3069:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/two-actually-12439fdd460029f7bf3d496e63e09b96.jpg"},6522:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/webscale-c13cfc37833381fdb967bdd730a5d584.jpg"},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var s=n(7294);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89927158.73e04a13.js b/assets/js/89927158.73e04a13.js deleted file mode 100644 index ce01cbca..00000000 --- a/assets/js/89927158.73e04a13.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkflecks_docusaurus=self.webpackChunkflecks_docusaurus||[]).push([[5563],{1620:(e,t,n)=>{n.r(t),n.d(t,{Tiny:()=>d,assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var s=n(5893),i=n(1151),o=n(9960);const a={title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},r=void 0,l={permalink:"/flecks/blog/introducing-flecks",source:"@site/blog/2024-01-30-introducing-flecks.mdx",title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",date:"2024-01-30T00:00:00.000Z",formattedDate:"January 30, 2024",tags:[{label:"announcement",permalink:"/flecks/blog/tags/announcement"},{label:"introducing",permalink:"/flecks/blog/tags/introducing"},{label:"flecks",permalink:"/flecks/blog/tags/flecks"},{label:"release",permalink:"/flecks/blog/tags/release"}],readingTime:6.405,hasTruncateMarker:!0,authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],frontMatter:{title:"flecks: NOT a fullstack framework",description:"Introducing flecks: an exceptionally-extensible application production system.",slug:"introducing-flecks",authors:[{name:"cha0s",title:"Creator of flecks",url:"https://github.com/cha0s",image_url:"https://github.com/cha0s.png",imageURL:"https://github.com/cha0s.png"}],tags:["announcement","introducing","flecks","release"],hide_table_of_contents:!1},unlisted:!1},c={authorsImageUrls:[void 0]},h=[{value:"First off, thanks for your time \ud83d\ude4f",id:"first-off-thanks-for-your-time-pray",level:2},{value:"Is it webscale fullstack?",id:"is-it-webscale-fullstack",level:2},{value:"For real, though",id:"for-real-though",level:3},{value:"Don't get it twisted",id:"dont-get-it-twisted",level:3},{value:"Do one thing and do it well",id:"do-one-thing-and-do-it-well",level:2},{value:"Small core",id:"small-core",level:3},{value:"The flecks way",id:"the-flecks-way",level:3},{value:"Why though?",id:"why-though",level:2},{value:"Separation of concerns",id:"separation-of-concerns",level:3},{value:"Joy",id:"joy",level:3},{value:"Because I can",id:"because-i-can",level:3},{value:"No TypeScript?",id:"no-typescript",level:2},{value:"Again, thanks for your time",id:"again-thanks-for-your-time",level:2}];function d({children:e}){const t={span:"span",...(0,i.a)()};return(0,s.jsx)(t.span,{style:{fontSize:"0.75em"},children:e})}function u(e){const t={a:"a",admonition:"admonition",code:"code",del:"del",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Introducing flecks: an ",(0,s.jsx)(t.strong,{children:"exceptionally-extensible application production system"}),"."]}),"\n","\n",(0,s.jsxs)(t.h2,{id:"first-off-thanks-for-your-time-pray",children:["First off, thanks for your time ","\ud83d\ude4f"]}),"\n",(0,s.jsxs)(t.p,{children:["I appreciate you checking out the project! I truly hope that you will find working with flecks\nto be a joy. Feedback is welcome over on the\n",(0,s.jsx)(t.a,{href:"https://github.com/cha0s/flecks/discussions",children:"Github discussions page"}),"!"]}),"\n",(0,s.jsx)(t.admonition,{title:'What\'s the letter before "alpha"?',type:"warning",children:(0,s.jsxs)(t.p,{children:["This is a new release and worked on by only one person: ",(0,s.jsx)(t.a,{href:"https://github.com/cha0s",children:"me"}),"! Please\nkeep this in mind!"]})}),"\n",(0,s.jsxs)(t.h2,{id:"is-it-webscale-fullstack",children:["Is it ",(0,s.jsx)(t.del,{children:"webscale"})," fullstack?"]}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"A screenshot from the 2010 "MongoDB is webscale" cartoon",src:n(6522).Z+"",width:"480",height:"360"}),"\n",(0,s.jsx)("figcaption",{style:{fontSize:"0.8rem"},children:(0,s.jsx)(t.em,{children:"yes, I remember"})})]})}),"\n",(0,s.jsxs)(t.p,{children:["I admit, I clickbaited with the title there just a little bit. I love fullstack! flecks is more\nthan capable of building fullstack applications. If you just want to jump to more of that sort\nof thing, you might be interested in the ",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/react",children:"React"}),"\npage in the documentation."]}),"\n",(0,s.jsx)(t.h3,{id:"for-real-though",children:"For real, though"}),"\n",(0,s.jsxs)(t.p,{children:["A fullstack JS application is basically appception: what you actually have is a server\napplication written in JS that serves a client application written in JS. Using\nthe same language obscures (arguably, ",(0,s.jsx)(t.em,{children:"by design"}),") the fact that these are actually two distinct\napplications."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"A screenshot of Doctor Olivia Octopus saying "There's two, actually"",src:n(3069).Z+"",width:"790",height:"371"})}),"\n",(0,s.jsx)(t.admonition,{title:"Hot take",type:"danger",children:(0,s.jsxs)(t.p,{children:["Some modern framework APIs are becoming increasingly obscure in their attempt to paper over\nthis reality\n(",(0,s.jsx)(t.a,{href:"https://github.com/cha0s/flecks/blob/master/packages/react/src/client.js#L24",children:(0,s.jsx)(t.em,{children:"*ahem*"})}),"... and\ndon't get me started on ",(0,s.jsx)(t.a,{href:"https://www.mayank.co/blog/react-server-components/",children:(0,s.jsx)(t.strong,{children:"RSC"})}),"...)."]})}),"\n",(0,s.jsx)(t.h3,{id:"dont-get-it-twisted",children:"Don't get it twisted"}),"\n",(0,s.jsxs)(t.p,{children:["To put it in basic terms: A web server is a core aspect of a fullstack application, but ",(0,s.jsx)(t.strong,{children:"a\nweb server is not a core aspect of an application"}),". The same could be said about asset\noptimization, routing, and many other core fullstack JS concepts."]}),"\n",(0,s.jsxs)(t.p,{children:["flecks is concerned with ",(0,s.jsx)(t.strong,{children:"writing applications"}),"; fullstack applications are merely a subset of\nthat."]}),"\n",(0,s.jsx)(t.h2,{id:"do-one-thing-and-do-it-well",children:"Do one thing and do it well"}),"\n",(0,s.jsxs)(t.p,{children:["The core primitive is the ",(0,s.jsx)(t.strong,{children:"fleck"})," which is... just a JS module. There exists a server\nfleck, a web fleck, a React fleck, and so on."]}),"\n",(0,s.jsx)(t.p,{children:"Here's a simple fleck that says hello when the application is starting:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-js",children:"export const hooks = {\n '@flecks/core.starting': () => {\n console.log('hey you');\n },\n};\n"})}),"\n",(0,s.jsxs)(t.p,{children:["That's it. It's a module that exports some hook implementations. If you're curious what kind of\nhooks we're talking about, check out\n",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/flecks/hooks",children:"the hooks reference page"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["You add a reference to your fleck to a file called\n",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/creating-a-fleck",children:(0,s.jsx)(t.code,{children:"flecks.yml"})})," and you're rolling. Again,\n",(0,s.jsx)(t.strong,{children:"a flecks application is just flecks"})," having their hook implementations invoked."]}),"\n",(0,s.jsxs)(t.p,{children:["What are multiple flecks called? ",(0,s.jsx)(t.strong,{children:"flecks"}),"!"]}),"\n",(0,s.jsx)(t.admonition,{title:"Wordplay",type:"tip",children:(0,s.jsxs)(t.p,{children:["It is not a coincidence that the name of the framework uses the same word as the plural form of\nits constituting elements: the implication is that ",(0,s.jsx)(t.strong,{children:"flecks is just flecks"}),", it's not doing\nanything special on its own. Sure, it ",(0,s.jsx)(t.em,{children:"does something"}),", but the something that it does is simply\norchestrate your flecks together into an application."]})}),"\n",(0,s.jsx)(t.h3,{id:"small-core",children:"Small core"}),"\n",(0,s.jsxs)(t.p,{children:["Creating an application with ",(0,s.jsx)(t.code,{children:"@flecks/create-app"})," and then doing\ne.g. ",(0,s.jsx)(t.code,{children:"yarn install --production"})," will result in a full working application with a size of\n",(0,s.jsx)(t.strong,{children:"less than 7 MB"}),". Granted, it's only a server that will start, have nothing to do, and halt in\nabout 100 ms, but it illustrates that flecks builds what you tell it to, ",(0,s.jsx)(t.strong,{children:"it is not a kitchen\nsink system"}),"."]}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"A screenshot of Fry from Futurama captioned "Not sure if you're overly specific or not specific enough"",src:n(1048).Z+"",width:"552",height:"414"}),"\n",(0,s.jsx)("figcaption",{style:{fontSize:"0.8rem"},children:(0,s.jsx)(t.em,{children:"When you're writing an article and curious about how the Big Kid on the Block performs in terms of raw default production application size, but can't even figure out how to measure it because you have already downloaded more than 7MB of ads for their \"hosting solution\" into your brain in the process"})})]})}),"\n",(0,s.jsx)(t.h3,{id:"the-flecks-way",children:"The flecks way"}),"\n",(0,s.jsx)(t.p,{children:"The few core architectural opinions that are held are presented as suggestions, not requirements."}),"\n",(0,s.jsxs)(t.admonition,{type:"info",children:[(0,s.jsx)(t.mdxAdmonitionTitle,{children:(0,s.jsx)(t.strong,{children:"\u201cI hold it to be the inalienable right of anybody to go to hell in his own way.\u201d"})}),(0,s.jsx)(t.p,{children:"\u2015 Robert Frost"})]}),"\n",(0,s.jsxs)(t.p,{children:["A few motivating philosophies which I ",(0,s.jsx)(t.strong,{children:"do not"})," consider to be suggestions when creating flecks:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"You shouldn't be surprised by what happens"}),"\n",(0,s.jsxs)(t.li,{children:["Your application has what ",(0,s.jsx)(t.strong,{children:"you"})," want in it, not what ",(0,s.jsx)(t.strong,{children:"flecks"})," wants in it"]}),"\n",(0,s.jsx)(t.li,{children:"You shouldn't have to have a full budget for production deployment"}),"\n",(0,s.jsx)(t.li,{children:"Developer comfort and confidence are essential, not just a nice-to-have"}),"\n",(0,s.jsx)(t.li,{children:"Core architectural opinions require transparency and justification"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"why-though",children:"Why though?"}),"\n",(0,s.jsx)(t.p,{children:"You might be thinking something like:"}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"A screenshot of Michael from The Office shouting "NO GOD PLEASE NO"",src:n(9151).Z+"",width:"720",height:"405"}),"\n",(0,s.jsxs)("figcaption",{style:{fontSize:"0.8rem"},children:[(0,s.jsx)(t.em,{children:(0,s.jsx)(t.strong,{children:"Why?!"})})," ",(0,s.jsx)(t.em,{children:"A new JavaScript framework is the last thing we need."})]})]})}),"\n",(0,s.jsxs)(t.p,{children:["Perhaps you will write a thesis explaining in great detail why there is no\nobjective reason for flecks to exist. ",(0,s.jsx)(t.strong,{children:"I'm fine with that"}),",\n",(0,s.jsx)(d,{children:"because I love it and there's nothing you can do about it."})]}),"\n",(0,s.jsx)(t.p,{children:"Seriously though, a couple reasons why I made flecks and use it to develop applications are:"}),"\n",(0,s.jsx)(t.h3,{id:"separation-of-concerns",children:"Separation of concerns"}),"\n",(0,s.jsxs)(t.p,{children:["JS has matured a lot over the years, and modules are all but a first-class concept. This has been\na huge win for Properly Structured","\u2122\ufe0f"," applications."]}),"\n",(0,s.jsxs)(t.p,{children:["However, I believe the real reason many fullstack frameworks exist today is to\n",(0,s.jsx)(t.em,{children:"centralize concerns"}),". No one wants to set up a whole database, a routing system, a webserver,\netc, ",(0,s.jsxs)(d,{children:["etc, ",(0,s.jsx)(d,{children:"etc."})]})," every time. So, the default approach has been to reach out\nfor a framework to tie it all together. To some extent this is an inevitable evolution."]}),"\n",(0,s.jsx)("figure",{children:(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"Screenshot of Patrick Star with the caption "Push them somewhere else"",src:n(3948).Z+"",width:"478",height:"345"}),"\n",(0,s.jsx)("figcaption",{style:{fontSize:"0.8rem"},children:(0,s.jsxs)(t.em,{children:["You've never even ",(0,s.jsx)(t.strong,{children:"seen"})," a real ",(0,s.jsx)(o.Z,{target:"_blank",to:"https://cha0s.github.io/flecks/docs/redux",children:"duck"})]})})]})}),"\n",(0,s.jsxs)(t.p,{children:["With flecks, the first principle is to push these concerns out into modular units which do one\nthing and do it immaculately.\n",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Unix_philosophy",children:"This is not a new concept"}),"! These units can be\ncomposed into an application that does as much or as little as you like, ",(0,s.jsxs)(d,{children:["without requiring\nyour application structure to follow some corporate diktat ",(0,s.jsxs)(d,{children:["requiring you to enter a mailing\naddress to submit a pull request. ",(0,s.jsx)(d,{children:"(don't ask...)"})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"joy",children:"Joy"}),"\n",(0,s.jsx)("div",{style:{float:"right",padding:"0 1.5rem"},children:(0,s.jsx)(t.img,{alt:"A screenshot of Marie Kondo stating "This one sparks joy."",src:n(8749).Z+"",width:"242",height:"242"})}),"\n",(0,s.jsxs)(t.p,{children:["I have found this structure to work very well and to ",(0,s.jsx)(t.em,{children:"feel pleasant"}),". It's great to get up and\nrunning super quickly without having to repeat a monolithic structure over and over. It's almost\nreminiscent of those small plastic building blocks my parents used to step on. Super fun!"]}),"\n",(0,s.jsxs)(t.p,{children:["I find that I ",(0,s.jsx)(t.strong,{children:"don't have to think about what flecks is doing"})," most of the time, which is exactly\nwhat I want."]}),"\n",(0,s.jsxs)(t.p,{children:["flecks is at its best when you can forget that it exists and everything Just Works","\u2122\ufe0f","."]}),"\n",(0,s.jsx)(t.h3,{id:"because-i-can",children:"Because I can"}),"\n",(0,s.jsx)(t.p,{children:"No, seriously! Over the years interacting with various parts of the JS ecosystem I have experienced\nall manner of closed-minded hostile encounters with people who regrettably lacked the imagination\nto understand something which may have ran counter to the established wisdom of the week."}),"\n",(0,s.jsxs)(t.p,{children:["So I guess anyone who told me that it won't work, doesn't make sense, or other copium-based\nresponses: Here it is! Eat your hearts out and haterz get meme'd on. ","\ud83d\udc85"]}),"\n",(0,s.jsx)(t.h2,{id:"no-typescript",children:"No TypeScript?"}),"\n",(0,s.jsx)(t.p,{children:"I understand and appreciate the benefits of strong typing. I have also noticed that TS tends to sap\nmy joy when I work with it!"}),"\n",(0,s.jsx)(t.p,{children:"If you love flecks enough to be serious about working to improve it and you can also make a\ncompelling and transparent case to rewrite some or all of it in TS, I'm listening!"}),"\n",(0,s.jsx)(t.h2,{id:"again-thanks-for-your-time",children:"Again, thanks for your time"}),"\n",(0,s.jsxs)(t.p,{children:["I do appreciate you reading all that! Come send me love (or threats or whatever) at the\n",(0,s.jsx)(t.a,{href:"https://github.com/cha0s/flecks/discussions",children:"Github discussions page"}),"! ","\ud83d\ude0c"]})]})}function p(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8749:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/kondo-8ca202a300547b698dedad3b3e1299e0.jpg"},3948:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/over-there-19c01e6cdf39cc325266aa184db093f0.jpg"},9151:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/pls-no-1cfa9e8bc25e1ee3d412e5c5ddbab291.jpg"},1048:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/specific-enough-7a5f7bca00d317ed79832a435f5bcedd.jpg"},3069:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/two-actually-12439fdd460029f7bf3d496e63e09b96.jpg"},6522:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/webscale-c13cfc37833381fdb967bdd730a5d584.jpg"},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var s=n(7294);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a0957561.19e04299.js b/assets/js/a0957561.3ae5c83f.js similarity index 60% rename from assets/js/a0957561.19e04299.js rename to assets/js/a0957561.3ae5c83f.js index fed220ab..4c6697a7 100644 --- a/assets/js/a0957561.19e04299.js +++ b/assets/js/a0957561.3ae5c83f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkflecks_docusaurus=self.webpackChunkflecks_docusaurus||[]).push([[5048],{8536:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"introducing-flecks","metadata":{"permalink":"/flecks/blog/introducing-flecks","source":"@site/blog/2024-01-30-introducing-flecks.mdx","title":"flecks: NOT a fullstack framework","description":"Introducing flecks: an exceptionally-extensible application production system.","date":"2024-01-30T00:00:00.000Z","formattedDate":"January 30, 2024","tags":[{"label":"announcement","permalink":"/flecks/blog/tags/announcement"},{"label":"introducing","permalink":"/flecks/blog/tags/introducing"},{"label":"flecks","permalink":"/flecks/blog/tags/flecks"},{"label":"release","permalink":"/flecks/blog/tags/release"}],"readingTime":6.405,"hasTruncateMarker":true,"authors":[{"name":"cha0s","title":"Creator of flecks","url":"https://github.com/cha0s","image_url":"https://github.com/cha0s.png","imageURL":"https://github.com/cha0s.png"}],"frontMatter":{"title":"flecks: NOT a fullstack framework","description":"Introducing flecks: an exceptionally-extensible application production system.","slug":"introducing-flecks","authors":[{"name":"cha0s","title":"Creator of flecks","url":"https://github.com/cha0s","image_url":"https://github.com/cha0s.png","imageURL":"https://github.com/cha0s.png"}],"tags":["announcement","introducing","flecks","release"],"hide_table_of_contents":false},"unlisted":false},"content":"import Link from \'@docusaurus/Link\';\\n\\nexport function Tiny({children}) {\\n return {children};\\n}\\n\\nIntroducing flecks: an **exceptionally-extensible application production system**.\\n\\n{/* truncate */}\\n\\n## First off, thanks for your time :pray:\\n\\nI appreciate you checking out the project! I truly hope that you will find working with flecks\\nto be a joy. Feedback is welcome over on the\\n[Github discussions page](https://github.com/cha0s/flecks/discussions)!\\n\\n:::warning[What\'s the letter before \\"alpha\\"?]\\n\\nThis is a new release and worked on by only one person: [me](https://github.com/cha0s)! Please\\nkeep this in mind!\\n\\n:::\\n\\n## Is it ~~webscale~~ fullstack?\\n\\n
\\n ![A screenshot from the 2010 \\"MongoDB is webscale\\" cartoon](./webscale.jpg)\\n
*yes, I remember*
\\n
\\n\\nI admit, I clickbaited with the title there just a little bit. I love fullstack! flecks is more\\nthan capable of building fullstack applications. If you just want to jump to more of that sort\\nof thing, you might be interested in the React\\npage in the documentation.\\n\\n### For real, though\\n\\nA fullstack JS application is basically appception: what you actually have is a server\\napplication written in JS that serves a client application written in JS. Using\\nthe same language obscures (arguably, *by design*) the fact that these are actually two distinct\\napplications.\\n\\n![A screenshot of Doctor Olivia Octopus saying \\"There\'s two, actually\\"](./two-actually.jpg)\\n\\n:::danger[Hot take]\\n\\nSome modern framework APIs are becoming increasingly obscure in their attempt to paper over\\nthis reality\\n([*\\\\*ahem\\\\**](https://github.com/cha0s/flecks/blob/master/packages/react/src/client.js#L24)... and\\ndon\'t get me started on [**RSC**](https://www.mayank.co/blog/react-server-components/)...).\\n\\n:::\\n\\n### Don\'t get it twisted\\n\\nTo put it in basic terms: A web server is a core aspect of a fullstack application, but **a\\nweb server is not a core aspect of an application**. The same could be said about asset\\noptimization, routing, and many other core fullstack JS concepts.\\n\\nflecks is concerned with **writing applications**; fullstack applications are merely a subset of\\nthat.\\n\\n## Do one thing and do it well\\n\\nThe core primitive is the **fleck** which is... just a JS module. There exists a server\\nfleck, a web fleck, a React fleck, and so on.\\n\\nHere\'s a simple fleck that says hello when the application is starting:\\n\\n```js\\nexport const hooks = {\\n \'@flecks/core.starting\': () => {\\n console.log(\'hey you\');\\n },\\n};\\n```\\n\\nThat\'s it. It\'s a module that exports some hook implementations. If you\'re curious what kind of\\nhooks we\'re talking about, check out\\nthe hooks reference page.\\n\\nYou add a reference to your fleck to a file called\\n`flecks.yml` and you\'re rolling. Again,\\n**a flecks application is just flecks** having their hook implementations invoked.\\n\\nWhat are multiple flecks called? **flecks**!\\n\\n:::tip[Wordplay]\\n\\nIt is not a coincidence that the name of the framework uses the same word as the plural form of\\nits constituting elements: the implication is that **flecks is just flecks**, it\'s not doing\\nanything special on its own. Sure, it *does something*, but the something that it does is simply\\norchestrate your flecks together into an application.\\n\\n:::\\n\\n### Small core\\n\\nCreating an application with `@flecks/create-app` and then doing\\ne.g. `yarn install --production` will result in a full working application with a size of\\n**less than 7 MB**. Granted, it\'s only a server that will start, have nothing to do, and halt in\\nabout 100 ms, but it illustrates that flecks builds what you tell it to, **it is not a kitchen\\nsink system**.\\n\\n
\\n ![A screenshot of Fry from Futurama captioned \\"Not sure if you\'re overly specific or not specific enough\\"](./specific-enough.jpg)\\n
*When you\'re writing an article and curious about how the Big Kid on the Block performs in terms of raw default production application size, but can\'t even figure out how to measure it because you have already downloaded more than 7MB of ads for their \\"hosting solution\\" into your brain in the process*
\\n
\\n\\n\\n### The flecks way\\n\\nThe few core architectural opinions that are held are presented as suggestions, not requirements.\\n\\n:::info[**\u201cI hold it to be the inalienable right of anybody to go to hell in his own way.\u201d**]\\n\\n\u2015 Robert Frost\\n\\n:::\\n\\nA few motivating philosophies which I **do not** consider to be suggestions when creating flecks:\\n\\n- You shouldn\'t be surprised by what happens\\n- Your application has what **you** want in it, not what **flecks** wants in it\\n- You shouldn\'t have to have a full budget for production deployment\\n- Developer comfort and confidence are essential, not just a nice-to-have\\n- Core architectural opinions require transparency and justification\\n\\n## Why though?\\n\\nYou might be thinking something like:\\n\\n
\\n ![A screenshot of Michael from The Office shouting \\"NO GOD PLEASE NO\\"](./pls-no.jpg)\\n
***Why?!*** *A new JavaScript framework is the last thing we need.*
\\n
\\n\\nPerhaps you will write a thesis explaining in great detail why there is no\\nobjective reason for flecks to exist. **I\'m fine with that**,\\nbecause I love it and there\'s nothing you can do about it.\\n\\nSeriously though, a couple reasons why I made flecks and use it to develop applications are:\\n\\n### Separation of concerns\\n\\nJS has matured a lot over the years, and modules are all but a first-class concept. This has been\\na huge win for Properly Structured:tm: applications.\\n\\nHowever, I believe the real reason many fullstack frameworks exist today is to\\n*centralize concerns*. No one wants to set up a whole database, a routing system, a webserver,\\netc, etc, etc. every time. So, the default approach has been to reach out\\nfor a framework to tie it all together. To some extent this is an inevitable evolution.\\n\\n
\\n ![Screenshot of Patrick Star with the caption \\"Push them somewhere else\\"](./over-there.jpg)\\n
*You\'ve never even **seen** a real duck*
\\n
\\n\\n\\nWith flecks, the first principle is to push these concerns out into modular units which do one\\nthing and do it immaculately.\\n[This is not a new concept](https://en.wikipedia.org/wiki/Unix_philosophy)! These units can be\\ncomposed into an application that does as much or as little as you like, without requiring\\nyour application structure to follow some corporate diktat requiring you to enter a mailing\\naddress to submit a pull request. (don\'t ask...)\\n\\n### Joy\\n\\n
![A screenshot of Marie Kondo stating \\"This one sparks joy.\\"](./kondo.jpg)
\\n\\nI have found this structure to work very well and to *feel pleasant*. It\'s great to get up and\\nrunning super quickly without having to repeat a monolithic structure over and over. It\'s almost\\nreminiscent of those small plastic building blocks my parents used to step on. Super fun!\\n\\nI find that I **don\'t have to think about what flecks is doing** most of the time, which is exactly\\nwhat I want.\\n\\nflecks is at its best when you can forget that it exists and everything Just Works:tm:.\\n\\n### Because I can\\n\\nNo, seriously! Over the years interacting with various parts of the JS ecosystem I have experienced\\nall manner of closed-minded hostile encounters with people who regrettably lacked the imagination\\nto understand something which may have ran counter to the established wisdom of the week.\\n\\nSo I guess anyone who told me that it won\'t work, doesn\'t make sense, or other copium-based\\nresponses: Here it is! Eat your hearts out and haterz get meme\'d on. :nail_care:\\n\\n## No TypeScript?\\n\\nI understand and appreciate the benefits of strong typing. I have also noticed that TS tends to sap\\nmy joy when I work with it!\\n\\nIf you love flecks enough to be serious about working to improve it and you can also make a\\ncompelling and transparent case to rewrite some or all of it in TS, I\'m listening!\\n\\n## Again, thanks for your time\\n\\nI do appreciate you reading all that! Come send me love (or threats or whatever) at the\\n[Github discussions page](https://github.com/cha0s/flecks/discussions)! :relieved:"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkflecks_docusaurus=self.webpackChunkflecks_docusaurus||[]).push([[5048],{8536:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"introducing-flecks","metadata":{"permalink":"/flecks/blog/introducing-flecks","source":"@site/blog/2024-01-30-introducing-flecks.mdx","title":"flecks: NOT a fullstack framework","description":"Introducing flecks: an exceptionally-extensible application production system.","date":"2024-01-30T00:00:00.000Z","formattedDate":"January 30, 2024","tags":[{"label":"announcement","permalink":"/flecks/blog/tags/announcement"},{"label":"introducing","permalink":"/flecks/blog/tags/introducing"},{"label":"flecks","permalink":"/flecks/blog/tags/flecks"},{"label":"release","permalink":"/flecks/blog/tags/release"}],"readingTime":6.085,"hasTruncateMarker":true,"authors":[{"name":"cha0s","title":"Creator of flecks","url":"https://github.com/cha0s","image_url":"https://github.com/cha0s.png","imageURL":"https://github.com/cha0s.png"}],"frontMatter":{"title":"flecks: NOT a fullstack framework","description":"Introducing flecks: an exceptionally-extensible application production system.","slug":"introducing-flecks","authors":[{"name":"cha0s","title":"Creator of flecks","url":"https://github.com/cha0s","image_url":"https://github.com/cha0s.png","imageURL":"https://github.com/cha0s.png"}],"tags":["announcement","introducing","flecks","release"],"hide_table_of_contents":false},"unlisted":false},"content":"import Link from \'@docusaurus/Link\';\\n\\nexport function Tiny({children}) {\\n return {children};\\n}\\n\\nIntroducing flecks: an **exceptionally-extensible application production system**.\\n\\n{/* truncate */}\\n\\n## First off, thanks for your time :pray:\\n\\nI appreciate you checking out the project! I truly hope that you will find working with flecks\\nto be a joy. Feedback is welcome over on the\\n[Github discussions page](https://github.com/cha0s/flecks/discussions)!\\n\\n:::warning[What\'s the letter before \\"alpha\\"?]\\n\\nThis is a new release and worked on by only one person: [me](https://github.com/cha0s)! Please\\nkeep this in mind!\\n\\n:::\\n\\n## Is it ~~webscale~~ fullstack?\\n\\n
\\n ![A screenshot from the 2010 \\"MongoDB is webscale\\" cartoon](./webscale.jpg)\\n
*yes, I remember*
\\n
\\n\\nI admit, I clickbaited with the title there just a little bit. I love fullstack! flecks is more\\nthan capable of building fullstack applications. If you just want to jump to more of that sort\\nof thing, you might be interested in the React\\npage in the documentation.\\n\\n### For real, though\\n\\nA fullstack JS application is basically appception: what you actually have is a server\\napplication written in JS that serves a client application written in JS. Using\\nthe same language obscures (arguably, *by design*) the fact that these are actually two distinct\\napplications.\\n\\n![A screenshot of Doctor Olivia Octopus saying \\"There\'s two, actually\\"](./two-actually.jpg)\\n\\n:::danger[Hot take]\\n\\nSome modern framework APIs are becoming increasingly obscure in their attempt to paper over\\nthis reality\\n([*\\\\*ahem\\\\**](https://github.com/cha0s/flecks/blob/master/packages/react/src/client.js#L24)... and\\ndon\'t get me started on [**RSC**](https://www.mayank.co/blog/react-server-components/)...).\\n\\n:::\\n\\n### Don\'t get it twisted\\n\\nTo put it in basic terms: A web server is a core aspect of a fullstack application, but **a\\nweb server is not a core aspect of an application**. The same could be said about asset\\noptimization, routing, and many other core fullstack JS concepts.\\n\\nflecks is concerned with **writing applications**; fullstack applications are merely a subset of\\nthat.\\n\\n## Do one thing and do it well\\n\\nThe core primitive is the **fleck** which is... just a JS module. There exists a server\\nfleck, a web fleck, a React fleck, and so on.\\n\\nHere\'s a simple fleck that says hello when the application is starting:\\n\\n```js\\nexport const hooks = {\\n \'@flecks/core.starting\': () => {\\n console.log(\'hey you\');\\n },\\n};\\n```\\n\\nThat\'s it. It\'s a module that exports some hook implementations. If you\'re curious what kind of\\nhooks we\'re talking about, check out\\nthe hooks reference page.\\n\\nYou add a reference to your fleck to a file called\\n`flecks.yml` and you\'re rolling. Again,\\n**a flecks application is just flecks** having their hook implementations invoked.\\n\\nWhat are multiple flecks called? **flecks**!\\n\\n:::tip[Wordplay]\\n\\nIt is not a coincidence that the name of the framework uses the same word as the plural form of\\nits constituting elements: the implication is that **flecks is just flecks**, it\'s not doing\\nanything special on its own. Sure, it *does something*, but the something that it does is simply\\norchestrate your flecks together into an application.\\n\\n:::\\n\\n### Small core\\n\\nCreating an application with `@flecks/create-app` and then doing\\ne.g. `yarn install --production` will result in a full working application with a size of\\n**less than 7 MB**. Granted, it\'s only a server that will start, have nothing to do, and halt in\\nabout 100 ms, but it illustrates that flecks builds what you tell it to, **it is not a kitchen\\nsink system**.\\n\\n
\\n ![A screenshot of Fry from Futurama captioned \\"Not sure if you\'re overly specific or not specific enough\\"](./specific-enough.jpg)\\n
*When you\'re writing an article and curious about how the Big Kid on the Block performs in terms of raw default production application size, but can\'t even figure out how to measure it because you have already downloaded more than 7MB of ads for their \\"hosting solution\\" into your brain in the process*
\\n
\\n\\n\\n### The flecks way\\n\\nThe few core architectural opinions that are held are presented as suggestions, not requirements.\\n\\n:::info[**\u201cI hold it to be the inalienable right of anybody to go to hell in his own way.\u201d**]\\n\\n\u2015 Robert Frost\\n\\n:::\\n\\nA few motivating philosophies which I **do not** consider to be suggestions regarding this\\nproject:\\n\\n- You shouldn\'t be unpleasantly surprised by what happens\\n- Your application has what **you** want in it, not what **flecks** wants in it\\n- Developer comfort and confidence are essential, not just a nice-to-have\\n- You shouldn\'t have to have a full budget for production deployment\\n- Core architectural opinions require transparency and justification\\n\\n## Why though?\\n\\nYou might be thinking something like:\\n\\n
\\n ![A screenshot of Michael from The Office shouting \\"NO GOD PLEASE NO\\"](./pls-no.jpg)\\n
***Why?!*** *A new JavaScript framework is the last thing we need.*
\\n
\\n\\nPerhaps you will write a thesis explaining in great detail why there is no\\nobjective reason for flecks to exist. **I\'m fine with that**,\\nbecause I love it and there\'s nothing you can do about it.\\n\\nSeriously though, a couple reasons why I made flecks and use it to develop applications are:\\n\\n### Separation of concerns\\n\\nJS has matured a lot over the years, and modules are all but a first-class concept. This has been\\na huge win for Properly Structured:tm: applications.\\n\\nHowever, I believe the real reason many fullstack frameworks exist today is to\\n*centralize concerns*. No one wants to set up a whole database, a routing system, a webserver,\\netc, etc, etc. every time. So, the default approach has been to reach out\\nfor a framework to tie it all together. To some extent this is an inevitable evolution.\\n\\n
\\n ![Screenshot of Patrick Star with the caption \\"Push them somewhere else\\"](./over-there.jpg)\\n
*You\'ve never even **seen** a real duck*
\\n
\\n\\n\\nWith flecks, the first principle is to push these concerns out into modular units which do one\\nthing and do it immaculately.\\n[This is not a new concept](https://en.wikipedia.org/wiki/Unix_philosophy)! These units can be\\ncomposed into an application that does as much or as little as you like, without requiring\\nyour application structure to follow some corporate diktat requiring you to enter a mailing\\naddress to submit a pull request. (don\'t ask...)\\n\\n### Joy\\n\\n
![A screenshot of Marie Kondo stating \\"This one sparks joy.\\"](./kondo.jpg)
\\n\\nI have found this structure to work very well and to *feel pleasant*. It\'s great to get up and\\nrunning super quickly without having to repeat a monolithic structure over and over. It\'s almost\\nreminiscent of those small plastic building blocks my parents used to step on. Super fun!\\n\\nI find that I **don\'t have to think about what flecks is doing** most of the time, which is exactly\\nwhat I want.\\n\\nflecks is at its best when you can forget that it exists and everything Just Works:tm:.\\n\\n### Because I can\\n\\nNo, seriously! Over the years interacting with various parts of the JS ecosystem I have experienced\\nall manner of closed-minded hostile encounters with people who regrettably lacked the imagination\\nto understand something which may have ran counter to the established wisdom of the week.\\n\\nSo I guess anyone who told me that it won\'t work, doesn\'t make sense, or other copium-based\\nresponses: Here it is! Eat your hearts out and haterz get meme\'d on. :nail_care:\\n\\n## Thanks again\\n\\nI do appreciate you reading all that! Come send me love (or threats or whatever) at the\\n[Github discussions page](https://github.com/cha0s/flecks/discussions)! :relieved:"}]}')}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.0998e04a.js b/assets/js/runtime~main.90bf3ff7.js similarity index 97% rename from assets/js/runtime~main.0998e04a.js rename to assets/js/runtime~main.90bf3ff7.js index 5cba570f..ff3c826a 100644 --- a/assets/js/runtime~main.0998e04a.js +++ b/assets/js/runtime~main.90bf3ff7.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",107:"cdb1c15d",196:"cbb899e4",498:"389e52bc",937:"972d9d57",944:"57cdf011",1052:"3c291670",1073:"9967cc6c",1144:"773fe5c0",1204:"be07d3f5",1540:"c6ac44d3",1695:"2357b171",1825:"c208b484",1851:"b045326f",2163:"14f78a16",2297:"e6ab389f",2528:"1dc09441",2535:"814f3328",2596:"357e2da2",2873:"18911325",3089:"a6aa9e1f",3541:"af7d3287",3608:"9e4087bc",3630:"f9a0490a",3729:"7279d61b",3850:"1ecec20c",4013:"01a85c17",4100:"cdde611f",4138:"3d909a3c",4364:"5df00a39",4368:"a94703ab",4639:"8d4b214a",4861:"e98a169a",4891:"cb5b5a7a",5048:"a0957561",5287:"8d2f4c1c",5563:"89927158",5679:"72512343",5722:"c6694cff",5930:"fa4d91bf",6103:"ccc49370",6128:"160a3b85",6324:"01bbcd7b",6325:"8f92789c",6419:"55ec95f7",6911:"8b0cd02a",7041:"ba61d949",7279:"8333feff",7639:"e7335c9b",7918:"17896441",8151:"0a6dca49",8312:"bfa2a205",8518:"a7bd4aaa",8532:"32a57bab",8610:"6875c492",9091:"06d8b529",9661:"5e95c892",9686:"041c5cc5",9817:"14eb3368",9828:"fb49b6cf"}[e]||e)+"."+{53:"800af69f",107:"ab15be17",109:"32733b05",130:"8b1c1c76",132:"ae35eca4",196:"c02bcdbb",240:"07917f61",498:"736c433b",937:"eeafcbae",944:"f3413ebc",1052:"1e709b46",1073:"685bbc8f",1144:"316c3d4e",1204:"f820866b",1504:"957f1d57",1540:"614ef72f",1644:"d976dcda",1695:"eefa1299",1763:"7daca6d0",1772:"897dbcaa",1825:"5a907d2a",1851:"8a17287c",2163:"6cc5601e",2183:"3334b572",2297:"e68c3902",2312:"2c0c9fc1",2528:"0a9c8d1b",2535:"9fe043da",2596:"b6b0f02c",2661:"5f234f73",2693:"a00fcec7",2696:"43f9fa5f",2700:"b8c28ffc",2873:"480d97ab",3076:"1e2e3390",3089:"5a7199a7",3343:"e0acdec4",3541:"7d31ac00",3608:"b89e0d4b",3619:"fbb2fff5",3630:"aba123d8",3729:"e2bf59ac",3850:"37a9cd97",4013:"6da1492b",4100:"256de7a8",4138:"afbd58cb",4238:"641fbfe9",4364:"7bfa3769",4368:"0848533e",4639:"93a9f846",4706:"a02e6509",4861:"514fa2db",4891:"cd3d8902",5048:"19e04299",5269:"c28d6be0",5287:"012e4fbc",5326:"b2028c2d",5563:"73e04a13",5679:"9128bb81",5722:"41180ac6",5790:"4a3585b2",5930:"927421e0",5943:"426845a9",6103:"39584db3",6128:"5cebb56e",6255:"d3d0f009",6324:"1dfb9d17",6325:"873ed1ac",6419:"284324d4",6648:"b268d988",6911:"c73f1091",6985:"bd79313b",7041:"4e3e182e",7279:"17ba8d09",7639:"820662ce",7918:"715b14e3",7936:"8edc4d0d",8016:"5c15b204",8071:"898f9a7d",8151:"4c1a6630",8312:"fe5e394a",8518:"b46b1112",8532:"394a7c49",8610:"0c8c3ca7",8955:"e03572fe",9091:"bd3e3f50",9138:"8c3e3e31",9661:"68abf1d3",9686:"d6ff3d43",9817:"e9035a2d",9828:"10ec73be",9893:"cf0ffbf2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},d="flecks-docusaurus:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/flecks/",r.gca=function(e){return e={17896441:"7918",18911325:"2873",72512343:"5679",89927158:"5563","935f2afb":"53",cdb1c15d:"107",cbb899e4:"196","389e52bc":"498","972d9d57":"937","57cdf011":"944","3c291670":"1052","9967cc6c":"1073","773fe5c0":"1144",be07d3f5:"1204",c6ac44d3:"1540","2357b171":"1695",c208b484:"1825",b045326f:"1851","14f78a16":"2163",e6ab389f:"2297","1dc09441":"2528","814f3328":"2535","357e2da2":"2596",a6aa9e1f:"3089",af7d3287:"3541","9e4087bc":"3608",f9a0490a:"3630","7279d61b":"3729","1ecec20c":"3850","01a85c17":"4013",cdde611f:"4100","3d909a3c":"4138","5df00a39":"4364",a94703ab:"4368","8d4b214a":"4639",e98a169a:"4861",cb5b5a7a:"4891",a0957561:"5048","8d2f4c1c":"5287",c6694cff:"5722",fa4d91bf:"5930",ccc49370:"6103","160a3b85":"6128","01bbcd7b":"6324","8f92789c":"6325","55ec95f7":"6419","8b0cd02a":"6911",ba61d949:"7041","8333feff":"7279",e7335c9b:"7639","0a6dca49":"8151",bfa2a205:"8312",a7bd4aaa:"8518","32a57bab":"8532","6875c492":"8610","06d8b529":"9091","5e95c892":"9661","041c5cc5":"9686","14eb3368":"9817",fb49b6cf:"9828"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",107:"cdb1c15d",196:"cbb899e4",498:"389e52bc",937:"972d9d57",944:"57cdf011",1052:"3c291670",1073:"9967cc6c",1144:"773fe5c0",1204:"be07d3f5",1540:"c6ac44d3",1695:"2357b171",1825:"c208b484",1851:"b045326f",2163:"14f78a16",2297:"e6ab389f",2528:"1dc09441",2535:"814f3328",2596:"357e2da2",2873:"18911325",3089:"a6aa9e1f",3541:"af7d3287",3608:"9e4087bc",3630:"f9a0490a",3729:"7279d61b",3850:"1ecec20c",4013:"01a85c17",4100:"cdde611f",4138:"3d909a3c",4364:"5df00a39",4368:"a94703ab",4639:"8d4b214a",4861:"e98a169a",4891:"cb5b5a7a",5048:"a0957561",5287:"8d2f4c1c",5563:"89927158",5679:"72512343",5722:"c6694cff",5930:"fa4d91bf",6103:"ccc49370",6128:"160a3b85",6324:"01bbcd7b",6325:"8f92789c",6419:"55ec95f7",6911:"8b0cd02a",7041:"ba61d949",7279:"8333feff",7639:"e7335c9b",7918:"17896441",8151:"0a6dca49",8312:"bfa2a205",8518:"a7bd4aaa",8532:"32a57bab",8610:"6875c492",9091:"06d8b529",9661:"5e95c892",9686:"041c5cc5",9817:"14eb3368",9828:"fb49b6cf"}[e]||e)+"."+{53:"800af69f",107:"ab15be17",109:"32733b05",130:"8b1c1c76",132:"ae35eca4",196:"c02bcdbb",240:"07917f61",498:"736c433b",937:"eeafcbae",944:"f3413ebc",1052:"1e709b46",1073:"685bbc8f",1144:"316c3d4e",1204:"f820866b",1504:"957f1d57",1540:"614ef72f",1644:"d976dcda",1695:"eefa1299",1763:"7daca6d0",1772:"897dbcaa",1825:"5a907d2a",1851:"8a17287c",2163:"6cc5601e",2183:"3334b572",2297:"e68c3902",2312:"2c0c9fc1",2528:"0a9c8d1b",2535:"9fe043da",2596:"b6b0f02c",2661:"5f234f73",2693:"a00fcec7",2696:"43f9fa5f",2700:"b8c28ffc",2873:"480d97ab",3076:"1e2e3390",3089:"5a7199a7",3343:"e0acdec4",3541:"7d31ac00",3608:"b89e0d4b",3619:"fbb2fff5",3630:"aba123d8",3729:"bd9ca7d5",3850:"37a9cd97",4013:"6da1492b",4100:"256de7a8",4138:"afbd58cb",4238:"641fbfe9",4364:"7bfa3769",4368:"0848533e",4639:"93a9f846",4706:"a02e6509",4861:"514fa2db",4891:"cd3d8902",5048:"3ae5c83f",5269:"c28d6be0",5287:"012e4fbc",5326:"b2028c2d",5563:"1201161f",5679:"9128bb81",5722:"41180ac6",5790:"4a3585b2",5930:"927421e0",5943:"426845a9",6103:"39584db3",6128:"5cebb56e",6255:"d3d0f009",6324:"1dfb9d17",6325:"873ed1ac",6419:"284324d4",6648:"b268d988",6911:"c73f1091",6985:"bd79313b",7041:"4e3e182e",7279:"17ba8d09",7639:"820662ce",7918:"715b14e3",7936:"8edc4d0d",8016:"5c15b204",8071:"898f9a7d",8151:"4c1a6630",8312:"fe5e394a",8518:"b46b1112",8532:"394a7c49",8610:"0c8c3ca7",8955:"e03572fe",9091:"bd3e3f50",9138:"8c3e3e31",9661:"68abf1d3",9686:"d6ff3d43",9817:"e9035a2d",9828:"10ec73be",9893:"cf0ffbf2"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},d="flecks-docusaurus:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/flecks/",r.gca=function(e){return e={17896441:"7918",18911325:"2873",72512343:"5679",89927158:"5563","935f2afb":"53",cdb1c15d:"107",cbb899e4:"196","389e52bc":"498","972d9d57":"937","57cdf011":"944","3c291670":"1052","9967cc6c":"1073","773fe5c0":"1144",be07d3f5:"1204",c6ac44d3:"1540","2357b171":"1695",c208b484:"1825",b045326f:"1851","14f78a16":"2163",e6ab389f:"2297","1dc09441":"2528","814f3328":"2535","357e2da2":"2596",a6aa9e1f:"3089",af7d3287:"3541","9e4087bc":"3608",f9a0490a:"3630","7279d61b":"3729","1ecec20c":"3850","01a85c17":"4013",cdde611f:"4100","3d909a3c":"4138","5df00a39":"4364",a94703ab:"4368","8d4b214a":"4639",e98a169a:"4861",cb5b5a7a:"4891",a0957561:"5048","8d2f4c1c":"5287",c6694cff:"5722",fa4d91bf:"5930",ccc49370:"6103","160a3b85":"6128","01bbcd7b":"6324","8f92789c":"6325","55ec95f7":"6419","8b0cd02a":"6911",ba61d949:"7041","8333feff":"7279",e7335c9b:"7639","0a6dca49":"8151",bfa2a205:"8312",a7bd4aaa:"8518","32a57bab":"8532","6875c492":"8610","06d8b529":"9091","5e95c892":"9661","041c5cc5":"9686","14eb3368":"9817",fb49b6cf:"9828"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n Archive | flecks - + diff --git a/blog/atom.xml b/blog/atom.xml index f1ad9b8c..83f08809 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -71,12 +71,13 @@ sink system.

The flecks way

The few core architectural opinions that are held are presented as suggestions, not requirements.

“I hold it to be the inalienable right of anybody to go to hell in his own way.”

― Robert Frost

-

A few motivating philosophies which I do not consider to be suggestions when creating flecks:

+

A few motivating philosophies which I do not consider to be suggestions regarding this +project:

    -
  • You shouldn't be surprised by what happens
  • +
  • You shouldn't be unpleasantly surprised by what happens
  • Your application has what you want in it, not what flecks wants in it
  • -
  • You shouldn't have to have a full budget for production deployment
  • Developer comfort and confidence are essential, not just a nice-to-have
  • +
  • You shouldn't have to have a full budget for production deployment
  • Core architectural opinions require transparency and justification

Why though?

@@ -116,12 +117,7 @@ all manner of closed-minded hostile encounters with people who regrettably lacke to understand something which may have ran counter to the established wisdom of the week.

So I guess anyone who told me that it won't work, doesn't make sense, or other copium-based responses: Here it is! Eat your hearts out and haterz get meme'd on. 💅

-

No TypeScript?

-

I understand and appreciate the benefits of strong typing. I have also noticed that TS tends to sap -my joy when I work with it!

-

If you love flecks enough to be serious about working to improve it and you can also make a -compelling and transparent case to rewrite some or all of it in TS, I'm listening!

-

Again, thanks for your time

+

Thanks again

I do appreciate you reading all that! Come send me love (or threats or whatever) at the Github discussions page! 😌

]]> diff --git a/blog/index.html b/blog/index.html index 9ebc5289..3e835bcd 100644 --- a/blog/index.html +++ b/blog/index.html @@ -5,7 +5,7 @@ Blog | flecks - + diff --git a/blog/introducing-flecks/index.html b/blog/introducing-flecks/index.html index bf3578eb..f069749b 100644 --- a/blog/introducing-flecks/index.html +++ b/blog/introducing-flecks/index.html @@ -5,7 +5,7 @@ flecks: NOT a fullstack framework | flecks - + @@ -67,12 +67,13 @@

Small coreThe flecks way

The few core architectural opinions that are held are presented as suggestions, not requirements.

“I hold it to be the inalienable right of anybody to go to hell in his own way.”

― Robert Frost

-

A few motivating philosophies which I do not consider to be suggestions when creating flecks:

+

A few motivating philosophies which I do not consider to be suggestions regarding this +project:

    -
  • You shouldn't be surprised by what happens
  • +
  • You shouldn't be unpleasantly surprised by what happens
  • Your application has what you want in it, not what flecks wants in it
  • -
  • You shouldn't have to have a full budget for production deployment
  • Developer comfort and confidence are essential, not just a nice-to-have
  • +
  • You shouldn't have to have a full budget for production deployment
  • Core architectural opinions require transparency and justification

Why though?

@@ -112,13 +113,8 @@

Because I can< to understand something which may have ran counter to the established wisdom of the week.

So I guess anyone who told me that it won't work, doesn't make sense, or other copium-based responses: Here it is! Eat your hearts out and haterz get meme'd on. 💅

-

No TypeScript?

-

I understand and appreciate the benefits of strong typing. I have also noticed that TS tends to sap -my joy when I work with it!

-

If you love flecks enough to be serious about working to improve it and you can also make a -compelling and transparent case to rewrite some or all of it in TS, I'm listening!

-

Again, thanks for your time

+

Thanks again

I do appreciate you reading all that! Come send me love (or threats or whatever) at the -Github discussions page! 😌

+Github discussions page! 😌

\ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml index 4977fb49..0c467976 100644 --- a/blog/rss.xml +++ b/blog/rss.xml @@ -72,12 +72,13 @@ sink system.

The flecks way

The few core architectural opinions that are held are presented as suggestions, not requirements.

“I hold it to be the inalienable right of anybody to go to hell in his own way.”

― Robert Frost

-

A few motivating philosophies which I do not consider to be suggestions when creating flecks:

+

A few motivating philosophies which I do not consider to be suggestions regarding this +project:

    -
  • You shouldn't be surprised by what happens
  • +
  • You shouldn't be unpleasantly surprised by what happens
  • Your application has what you want in it, not what flecks wants in it
  • -
  • You shouldn't have to have a full budget for production deployment
  • Developer comfort and confidence are essential, not just a nice-to-have
  • +
  • You shouldn't have to have a full budget for production deployment
  • Core architectural opinions require transparency and justification

Why though?

@@ -117,12 +118,7 @@ all manner of closed-minded hostile encounters with people who regrettably lacke to understand something which may have ran counter to the established wisdom of the week.

So I guess anyone who told me that it won't work, doesn't make sense, or other copium-based responses: Here it is! Eat your hearts out and haterz get meme'd on. 💅

-

No TypeScript?

-

I understand and appreciate the benefits of strong typing. I have also noticed that TS tends to sap -my joy when I work with it!

-

If you love flecks enough to be serious about working to improve it and you can also make a -compelling and transparent case to rewrite some or all of it in TS, I'm listening!

-

Again, thanks for your time

+

Thanks again

I do appreciate you reading all that! Come send me love (or threats or whatever) at the Github discussions page! 😌

]]> announcement diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html index 0812e2c5..4b36b3f8 100644 --- a/blog/tags/announcement/index.html +++ b/blog/tags/announcement/index.html @@ -5,7 +5,7 @@ One post tagged with "announcement" | flecks - + diff --git a/blog/tags/flecks/index.html b/blog/tags/flecks/index.html index 98afc5bc..3c828cdf 100644 --- a/blog/tags/flecks/index.html +++ b/blog/tags/flecks/index.html @@ -5,7 +5,7 @@ One post tagged with "flecks" | flecks - + diff --git a/blog/tags/index.html b/blog/tags/index.html index 22ec1647..830106a6 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -5,7 +5,7 @@ Tags | flecks - + diff --git a/blog/tags/introducing/index.html b/blog/tags/introducing/index.html index 2cd75d47..bebde2f6 100644 --- a/blog/tags/introducing/index.html +++ b/blog/tags/introducing/index.html @@ -5,7 +5,7 @@ One post tagged with "introducing" | flecks - + diff --git a/blog/tags/release/index.html b/blog/tags/release/index.html index acf8deb3..67118c3b 100644 --- a/blog/tags/release/index.html +++ b/blog/tags/release/index.html @@ -5,7 +5,7 @@ One post tagged with "release" | flecks - + diff --git a/docs/adding-flecks/index.html b/docs/adding-flecks/index.html index 34e1da55..cc671318 100644 --- a/docs/adding-flecks/index.html +++ b/docs/adding-flecks/index.html @@ -5,7 +5,7 @@ Adding flecks | flecks - + diff --git a/docs/category/generated-details/index.html b/docs/category/generated-details/index.html index 986ad06a..72e71d80 100644 --- a/docs/category/generated-details/index.html +++ b/docs/category/generated-details/index.html @@ -5,7 +5,7 @@ Generated details | flecks - + diff --git a/docs/category/getting-started/index.html b/docs/category/getting-started/index.html index 74858cd2..ff7d0fde 100644 --- a/docs/category/getting-started/index.html +++ b/docs/category/getting-started/index.html @@ -5,7 +5,7 @@ Getting Started | flecks - + diff --git a/docs/category/guides/index.html b/docs/category/guides/index.html index 6259e5a2..78cfb4f6 100644 --- a/docs/category/guides/index.html +++ b/docs/category/guides/index.html @@ -5,7 +5,7 @@ Guides | flecks - + diff --git a/docs/category/writing-your-code/index.html b/docs/category/writing-your-code/index.html index 8433d296..77099bd5 100644 --- a/docs/category/writing-your-code/index.html +++ b/docs/category/writing-your-code/index.html @@ -5,7 +5,7 @@ Writing your code | flecks - + diff --git a/docs/cli/index.html b/docs/cli/index.html index c2795d67..9eee5a8f 100644 --- a/docs/cli/index.html +++ b/docs/cli/index.html @@ -5,7 +5,7 @@ Command-line interface | flecks - + diff --git a/docs/compilation/index.html b/docs/compilation/index.html index 875f9d48..ba18fb56 100644 --- a/docs/compilation/index.html +++ b/docs/compilation/index.html @@ -5,7 +5,7 @@ Compilation | flecks - + diff --git a/docs/configuration/index.html b/docs/configuration/index.html index f11e1c01..1a31a49d 100644 --- a/docs/configuration/index.html +++ b/docs/configuration/index.html @@ -5,7 +5,7 @@ Configuration | flecks - + diff --git a/docs/creating-a-fleck/index.html b/docs/creating-a-fleck/index.html index 500dfec7..380fae3d 100644 --- a/docs/creating-a-fleck/index.html +++ b/docs/creating-a-fleck/index.html @@ -5,7 +5,7 @@ Creating a fleck | flecks - + diff --git a/docs/database/index.html b/docs/database/index.html index fa760258..a5416405 100644 --- a/docs/database/index.html +++ b/docs/database/index.html @@ -5,7 +5,7 @@ Database | flecks - + diff --git a/docs/docker/index.html b/docs/docker/index.html index b05258e6..bcb4860c 100644 --- a/docs/docker/index.html +++ b/docs/docker/index.html @@ -5,7 +5,7 @@ Docker | flecks - + diff --git a/docs/documentation/index.html b/docs/documentation/index.html index 8dab06f3..4a184dfb 100644 --- a/docs/documentation/index.html +++ b/docs/documentation/index.html @@ -5,7 +5,7 @@ Documentation | flecks - + diff --git a/docs/electron/index.html b/docs/electron/index.html index f7316286..09c8c2c1 100644 --- a/docs/electron/index.html +++ b/docs/electron/index.html @@ -5,7 +5,7 @@ Electron | flecks - + diff --git a/docs/environment/index.html b/docs/environment/index.html index 6848ac9f..181e3f0b 100644 --- a/docs/environment/index.html +++ b/docs/environment/index.html @@ -5,7 +5,7 @@ Environment Variables | flecks - + diff --git a/docs/flecks/build-files/index.html b/docs/flecks/build-files/index.html index 3199e753..558bfdf2 100644 --- a/docs/flecks/build-files/index.html +++ b/docs/flecks/build-files/index.html @@ -5,7 +5,7 @@ Build files | flecks - + diff --git a/docs/flecks/config/index.html b/docs/flecks/config/index.html index eb958da0..84dbb3a9 100644 --- a/docs/flecks/config/index.html +++ b/docs/flecks/config/index.html @@ -5,7 +5,7 @@ Fleck configuration | flecks - + diff --git a/docs/flecks/hooks/index.html b/docs/flecks/hooks/index.html index e924550a..45d28ba9 100644 --- a/docs/flecks/hooks/index.html +++ b/docs/flecks/hooks/index.html @@ -5,7 +5,7 @@ Hooks | flecks - + diff --git a/docs/flecks/todos/index.html b/docs/flecks/todos/index.html index f8f2bfd8..72c1f3fc 100644 --- a/docs/flecks/todos/index.html +++ b/docs/flecks/todos/index.html @@ -5,7 +5,7 @@ TODO list | flecks - + diff --git a/docs/gathering/index.html b/docs/gathering/index.html index 184d33d6..d3b09bc5 100644 --- a/docs/gathering/index.html +++ b/docs/gathering/index.html @@ -5,7 +5,7 @@ Gathering and Providing | flecks - + diff --git a/docs/hooks/index.html b/docs/hooks/index.html index 4a64b5f4..130f20ad 100644 --- a/docs/hooks/index.html +++ b/docs/hooks/index.html @@ -5,7 +5,7 @@ Hooks | flecks - + diff --git a/docs/index.html b/docs/index.html index 60604f09..ef382d91 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,7 +5,7 @@ Introduction | flecks - + diff --git a/docs/installation/index.html b/docs/installation/index.html index e5d342e0..576bf78f 100644 --- a/docs/installation/index.html +++ b/docs/installation/index.html @@ -5,7 +5,7 @@ Installation | flecks - + diff --git a/docs/ordering/index.html b/docs/ordering/index.html index dff7a8b6..e373db4e 100644 --- a/docs/ordering/index.html +++ b/docs/ordering/index.html @@ -5,7 +5,7 @@ Ordering | flecks - + diff --git a/docs/package-json/index.html b/docs/package-json/index.html index 56ce106d..92603110 100644 --- a/docs/package-json/index.html +++ b/docs/package-json/index.html @@ -5,7 +5,7 @@ package.json and entrypoints | flecks - + diff --git a/docs/platforms/index.html b/docs/platforms/index.html index 7f848ceb..b512f653 100644 --- a/docs/platforms/index.html +++ b/docs/platforms/index.html @@ -5,7 +5,7 @@ Platforms | flecks - + diff --git a/docs/react/index.html b/docs/react/index.html index 38a4be56..3625e034 100644 --- a/docs/react/index.html +++ b/docs/react/index.html @@ -5,7 +5,7 @@ React | flecks - + diff --git a/docs/redux/index.html b/docs/redux/index.html index df32f6ac..8e01696f 100644 --- a/docs/redux/index.html +++ b/docs/redux/index.html @@ -5,7 +5,7 @@ Redux | flecks - + diff --git a/docs/repl/index.html b/docs/repl/index.html index ce751cc5..0b40a7fa 100644 --- a/docs/repl/index.html +++ b/docs/repl/index.html @@ -5,7 +5,7 @@ REPL | flecks - + diff --git a/docs/sockets/index.html b/docs/sockets/index.html index 0b714c9f..23c1d28e 100644 --- a/docs/sockets/index.html +++ b/docs/sockets/index.html @@ -5,7 +5,7 @@ Sockets | flecks - + diff --git a/docs/testing/index.html b/docs/testing/index.html index 7c3ba444..cc94a784 100644 --- a/docs/testing/index.html +++ b/docs/testing/index.html @@ -5,7 +5,7 @@ Testing | flecks - + diff --git a/flecks/index.html b/flecks/index.html index 65b8d025..5cc79939 100644 --- a/flecks/index.html +++ b/flecks/index.html @@ -5,7 +5,7 @@ flecks - + diff --git a/index.html b/index.html index 1422008c..a714580e 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ Build a flexible and powerful application in no time | flecks - +