Quill
Fastest way to build dashboards and reporting in your app
function a(p){if(p==null)return"/";p=""+p;if(""===p)return"/";return"/"===p.charAt(0)?p:"/"+p}
function u(p){if(p==null)return p;p=""+p;if(!p||p.charAt(p.length-1)==="/")return p.slice(0,-1);return p}
function i(p){if(p==null)return p;p=""+p;if(6<=p.length&&p.substring(p.length-6)==="/index")return p.substring(0,p.length-6);if("index"===p)return"";return p}
var p=(location.pathname||"").split("?")[0].split("#")[0]||"";
if(b)if(p===b)p="";else if(0===p.indexOf(b+"/"))p=p.substring(b.length);
p=a(p);p=u(p);p=i(p);p=""===p||"index"===p?"/":a(p);
document.documentElement.setAttribute("data-current-path",p);
}();(function(a,b){try{let c=document.getElementById("banner")?.innerText;if(c){for(let d=0;d<localStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)&&localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,"hidden")}document.documentElement.setAttribute(b,"visible");return}for(let c=0;c<localStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)&&localStorage.getItem(d))return void document.documentElement.setAttribute(b,"hidden")}document.documentElement.setAttribute(b,"visible")}catch(a){document.documentElement.setAttribute(b,"hidden")}})(
"bannerDismissed",
"data-banner-state",
){"@context":"https://schema.org","@type":"WebSite","name":"Quill","creator":{"@type":"Organization","name":"Mintlify","url":"https://mintlify.com"}}((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","isDarkMode","system",null,["dark","light","true","false","system"],{"true":"dark","false":"light","dark":"dark","light":"light"},true,false)Documentation IndexFetch the complete documentation index at: /docs/llms.txtUse this file to discover all available pages before exploring further.:root{--banner-height:0px!important}(self.__next_s=self.__next_s||[]).push([0,{"children":"(function g(a,b,c,d,e){try{let f,g,h=[];try{h=window.location.pathname.split("/").filter(a=\u003e""!==a\u0026\u0026"global"!==a).slice(0,2)}catch{h=[]}let i=h.find(a=\u003ec.includes(a)),j=[];for(let c of(i?j.push(i):j.push(b),j.push("global"),j)){if(!c)continue;let b=a[c];if(b?.content){f=b.content,g=c;break}}if(!f)return void document.documentElement.setAttribute(d,"hidden");let k=!0,l=0;for(;l\u003clocalStorage.length;){let a=localStorage.key(l);if(l++,!a?.endsWith(e))continue;let b=localStorage.getItem(a);if(b\u0026\u0026b===f){k=!1;break}g\u0026\u0026(a.startsWith(lang:${g}_)||!a.startsWith("lang:"))\u0026\u0026(localStorage.removeItem(a),l--)}document.documentElement.setAttribute(d,k?"visible":"hidden")}catch(a){console.error(a),document.documentElement.setAttribute(d,"hidden")}})(\n {},\n "en",\n [],\n "data-banner-state",\n "bannerDismissed",\n)","id":"_mintlify-banner-script"}]):root {
--primary: 33 33 33;
--primary-light: 255 255 255;
--primary-dark: 33 33 33;
--tooltip-foreground: 255 255 255;
--background-light: 255 255 255;
--background-dark: 14 14 16;
--gray-50: 243 243 243;
--gray-100: 239 239 239;
--gray-200: 223 223 223;
--gray-300: 207 207 207;
--gray-400: 159 159 159;
--gray-500: 112 112 112;
--gray-600: 81 81 81;
--gray-700: 63 63 63;
--gray-800: 38 38 38;
--gray-900: 23 23 23;
--gray-950: 11 11 11;
}(self.__next_s=self.__next_s||[]).push([0,{"suppressHydrationWarning":true,"children":"(function(a,b,c,d){var e;let f,g="mint"===d||"linden"===d?"sidebar":"sidebar-content",h=(e=d,f="navbar-transition","maple"===e\u0026\u0026(f+="-maple"),f),[i,j]=(()=\u003e{switch(d){case"almond":return["[--scroll-mt:2.5rem]","[--scroll-mt:2.5rem]"];case"luma":return["lg:[--scroll-mt:6rem]","lg:[--scroll-mt:6rem]"];case"sequoia":return["lg:[--scroll-mt:8.5rem]","lg:[--scroll-mt:11rem]"];default:return["lg:[--scroll-mt:9.5rem]","lg:[--scroll-mt:12rem]"]}})();function k(){document.documentElement.classList.add(i)}let l=document.documentElement.getAttribute("data-banner-state"),m=null!=l?"visible"===l:b;function n(a){let b=m?calc(${a-2.5}rem + var(--banner-height, 2.5rem)):${a}rem;document.getElementById(g)?.style.setProperty("top",b)}function o(a){let b=m?calc(100vh - ${a-2.5}rem - var(--banner-height, 2.5rem)):calc(100vh - ${a}rem);document.getElementById(g)?.style.setProperty("height",b)}function p(a,b){!a\u0026\u0026b||a\u0026\u0026!b?(k(),document.documentElement.classList.remove(j)):a\u0026\u0026b\u0026\u0026(document.documentElement.classList.add(j),document.documentElement.classList.remove(i))}switch(d){case"mint":n(c),p(a,m);break;case"palm":case"aspen":case"sequoia":n(c),o(c),p(a,m);break;case"luma":k();break;case"linden":n(c),m\u0026\u0026k();break;case"almond":k(),n(c),o(c)}let q=function(){let a=document.createElement("style");return a.appendChild(document.createTextNode(",::before,::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(a),function(){window.getComputedStyle(document.body),setTimeout(()=\u003e{document.head.removeChild(a)},1)}}();("requestAnimationFrame"in globalThis?requestAnimationFrame:setTimeout)(()=\u003e{let a;a=!1,a=window.scrollY\u003e50,document.getElementById(h)?.setAttribute("data-is-opaque",${!!a}),q()})})(\n true,\n false,\n (function l(a,b,c){let d=document.documentElement.getAttribute("data-banner-state"),e=2.5!!(null!=d?"visible"===d:b),f=3*!!a,g=4,h=e+g+f;switch(c){case"mint":case"palm":break;case"aspen":f=2.5*!!a,g=3.5,h=e+f+g;break;case"luma":g=3,h=e+g;break;case"linden":g=4,h=e+g;break;case"almond":g=3.5,h=e+g;break;case"sequoia":f=3*!!a,g=3,h=e+g+f}return h})(true, false, "maple"),\n "maple",\n)","id":"_mintlify-scroll-top-script"}])Skip to main content(function g(a,b,c,d){try{if(window.matchMedia("(max-width: 1024px)").matches||!d){document.documentElement.style.setProperty(c,"0px"),document.documentElement.setAttribute("data-assistant-state","closed"),d||localStorage.setItem(a,"false");return}let e=localStorage.getItem(a);if(null===e){document.documentElement.style.setProperty(c,"0px"),document.documentElement.setAttribute("data-assistant-state","closed");return}let f=JSON.parse(e),g=localStorage.getItem(b),h=null!==g?JSON.parse(g):368;document.documentElement.style.setProperty(c,f?h+"px":"0px"),document.documentElement.setAttribute("data-assistant-state",f?"open":"closed")}catch(a){document.documentElement.style.setProperty(c,"0px"),document.documentElement.setAttribute("data-assistant-state","closed")}})(
"chat-assistant-sheet-open",
"chat-assistant-sheet-width",
"--assistant-sheet-width",
true
)Quill home pageSearch...⌘KArchitectureArchitecture(function () {
try {
if (window.__mintlifyInitialSidebarScrollDone) return;
window.__mintlifyInitialSidebarScrollDone = true;
var path = (window.location.pathname || '/').split('#')[0].split('?')[0];
if (path.endsWith('/index')) path = path.slice(0, -6);
else if (path === 'index') path = '';
var candidates = [];
if (path) candidates.push(path);
if (path.startsWith('/')) candidates.push(path.slice(1));
else candidates.push('/' + path);
var item = null;
for (var i = 0; i < candidates.length && !item; i++) {
var matches = document.querySelectorAll('[id="' + candidates[i].replace(/"/g, '\\"') + '"]');
for (var j = 0; j < matches.length; j++) {
if (matches[j].closest('#sidebar, #sidebar-content')) {
item = matches[j];
break;
}
}
}
if (!item) return;
var parent = item.parentElement;
while (parent) {
var style = getComputedStyle(parent);
if (style.overflowY === 'auto' || style.overflowY === 'scroll') break;
parent = parent.parentElement;
}
if (!parent) return;
var parentRect = parent.getBoundingClientRect();
var itemRect = item.getBoundingClientRect();
if (itemRect.top >= parentRect.top && itemRect.bottom <= parentRect.bottom) return;
var itemTopRelative = itemRect.top - parentRect.top + parent.scrollTop;
parent.scrollTop = itemTopRelative - parentRect.height / 2 + itemRect.height / 2;
} catch (e) {}
})();Learn moredocument.documentElement.setAttribute('data-page-mode', "wide");(self.__next_s=self.__next_s||[]).push([0,{"suppressHydrationWarning":true,"children":"(function m(a,b,c){if(!document.getElementById("footer")?.classList.contains("advanced-footer")||"maple"===b||"willow"===b||"almond"===b||"luma"===b||"sequoia"===b)return;let d=document.documentElement.getAttribute("data-banner-state"),e=null!=d?"visible"===d:c,f=document.documentElement.getAttribute("data-page-mode"),g=document.getElementById("navbar"),h=document.getElementById("navigation-items"),i=document.getElementById("sidebar"),j=document.getElementById("footer"),k=document.getElementById("table-of-contents-content"),l=document.getElementById("banner"),m=e?l?.offsetHeight??40:0,n=(e?a-2.5:a)16+m;if(!j||"center"===f)return;let o=j.getBoundingClientRect().top,p=window.innerHeight-o,q=(h?.clientHeight??0)+n+32("mint"===b||"linden"===b);if(i\u0026\u0026h)if(p\u003e0){let a=Math.max(0,q-o);i.style.bottom=${p}px,i.style.top=${n-a}px}else i.style.bottom="",i.style.top=e?calc(${a-2.5}rem + var(--banner-height, 2.5rem)):${a}rem,i.style.height="auto";k\u0026\u0026g\u0026\u0026(p\u003e0?k.style.top="custom"===f?${g.clientHeight-p}px:${40+g.clientHeight-p}px:k.style.top="")})(\n (function l(a,b,c){let d=document.documentElement.getAttribute("data-banner-state"),e=2.5*!!(null!=d?"visible"===d:b),f=3*!!a,g=4,h=e+g+f;switch(c){case"mint":case"palm":break;case"aspen":f=2.5*!!a,g=3.5,h=e+f+g;break;case"luma":g=3,h=e+g;break;case"linden":g=4,h=e+g;break;case"almond":g=3.5,h=e+g;break;case"sequoia":f=3*!!a,g=3,h=e+g+f}return h})(true, false, "maple"),\n "maple",\n false,\n)","id":"_mintlify-footer-and-sidebar-scroll-script"}])Quill home pageSearch...⌘KAsk AssistantLearn moreLearn moreSearch...NavigationArchitectureArchitectureArchitectureBI PlatformReact SDKServer SDKArchitectureBI PlatformReact SDKServer SDKArchitectureArchitectureA new BI architecture, purpose built for end user facing, in-product dashboards and reporting.Traditionally in Business Intelligence products, there are 2 architectures, each with their own set of problems.
… [truncated — open the raw llms.txt above for the full file]
Meet the modern standard for public facing documentation. Beautiful out of the box, easy to maintain, and optimized for user engagement.
Search through billions of items for similar matches to any object, in milliseconds. It’s the next generation of search, an API call away.
Build and deploy reliable background jobs with no timeouts and no infrastructure to manage.
Get the simple developer experience of SQLite in production, and scale your multi-tenant backend with unlimited databases.
Upstash is a serverless data platform providing low latency and high scalability for real-time applications.
One-click deployments built for teams, tuned for Laravel, loaded with tools and goodies you're going to love.