Auto-indexing service and GraphQL API for AT Protocol Records
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: remove www/priv build artifacts from tracking

These files were already added to .gitignore but needed to be
removed from the Git index.

-3603
-9
www/priv/fuse.min.js
··· 1 - /** 2 - * Fuse.js v7.0.0 - Lightweight fuzzy-search (http://fusejs.io) 3 - * 4 - * Copyright (c) 2023 Kiro Risk (http://kiro.me) 5 - * All Rights Reserved. Apache Software License 2.0 6 - * 7 - * http://www.apache.org/licenses/LICENSE-2.0 8 - */ 9 - var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){c(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,v(r.key),r)}}function o(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function c(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function h(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=s(e);if(t){var i=s(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return h(this,n)}}function f(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}function g(e){return Array.isArray?Array.isArray(e):"[object Array]"===S(e)}var y=1/0;function p(e){return null==e?"":function(e){if("string"==typeof e)return e;var t=e+"";return"0"==t&&1/e==-y?"-0":t}(e)}function m(e){return"string"==typeof e}function k(e){return"number"==typeof e}function M(e){return!0===e||!1===e||function(e){return b(e)&&null!==e}(e)&&"[object Boolean]"==S(e)}function b(e){return"object"===n(e)}function x(e){return null!=e}function w(e){return!e.trim().length}function S(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}var L=function(e){return"Missing ".concat(e," property in key")},_=function(e){return"Property 'weight' in key '".concat(e,"' must be a positive integer")},O=Object.prototype.hasOwnProperty,j=function(){function e(t){var n=this;r(this,e),this._keys=[],this._keyMap={};var i=0;t.forEach((function(e){var t=A(e);n._keys.push(t),n._keyMap[t.id]=t,i+=t.weight})),this._keys.forEach((function(e){e.weight/=i}))}return o(e,[{key:"get",value:function(e){return this._keyMap[e]}},{key:"keys",value:function(){return this._keys}},{key:"toJSON",value:function(){return JSON.stringify(this._keys)}}]),e}();function A(e){var t=null,n=null,r=null,i=1,o=null;if(m(e)||g(e))r=e,t=I(e),n=C(e);else{if(!O.call(e,"name"))throw new Error(L("name"));var c=e.name;if(r=c,O.call(e,"weight")&&(i=e.weight)<=0)throw new Error(_(c));t=I(c),n=C(c),o=e.getFn}return{path:t,id:n,weight:i,src:r,getFn:o}}function I(e){return g(e)?e:e.split(".")}function C(e){return g(e)?e.join("."):e}var E={useExtendedSearch:!1,getFn:function(e,t){var n=[],r=!1;return function e(t,i,o){if(x(t))if(i[o]){var c=t[i[o]];if(!x(c))return;if(o===i.length-1&&(m(c)||k(c)||M(c)))n.push(p(c));else if(g(c)){r=!0;for(var a=0,s=c.length;a<s;a+=1)e(c[a],i,o+1)}else i.length&&e(c,i,o+1)}else n.push(t)}(e,m(t)?t.split("."):t,0),r?n:n[0]},ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},$=t(t(t(t({},{isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:function(e,t){return e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1}}),{includeMatches:!1,findAllMatches:!1,minMatchCharLength:1}),{location:0,threshold:.6,distance:100}),E),F=/[^ ]+/g,R=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?$.getFn:n,o=t.fieldNormWeight,c=void 0===o?$.fieldNormWeight:o;r(this,e),this.norm=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(F).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,m(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();m(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t<n;t+=1)this.records[t].i-=1}},{key:"getValueForItemAtKeyId",value:function(e,t){return e[this._keysMap[t]]}},{key:"size",value:function(){return this.records.length}},{key:"_addString",value:function(e,t){if(x(e)&&!w(e)){var n={v:e,i:t,n:this.norm.get(e)};this.records.push(n)}}},{key:"_addObject",value:function(e,t){var n=this,r={i:t,$:{}};this.keys.forEach((function(t,i){var o=t.getFn?t.getFn(e):n.getFn(e,t.path);if(x(o))if(g(o)){for(var c=[],a=[{nestedArrIndex:-1,value:o}];a.length;){var s=a.pop(),u=s.nestedArrIndex,h=s.value;if(x(h))if(m(h)&&!w(h)){var l={v:h,i:u,n:n.norm.get(h)};c.push(l)}else g(h)&&h.forEach((function(e,t){a.push({nestedArrIndex:t,value:e})}))}r.$[i]=c}else if(m(o)&&!w(o)){var f={v:o,n:n.norm.get(o)};r.$[i]=f}})),this.records.push(r)}},{key:"toJSON",value:function(){return{keys:this.keys,records:this.records}}}]),e}();function P(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?$.getFn:r,o=n.fieldNormWeight,c=void 0===o?$.fieldNormWeight:o,a=new R({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(A)),a.setSources(t),a.create(),a}function N(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?$.distance:s,h=t.ignoreLocation,l=void 0===h?$.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}var W=32;function T(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?$.location:i,c=r.distance,a=void 0===c?$.distance:c,s=r.threshold,u=void 0===s?$.threshold:s,h=r.findAllMatches,l=void 0===h?$.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?$.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?$.includeMatches:v,y=r.ignoreLocation,p=void 0===y?$.ignoreLocation:y;if(t.length>W)throw new Error("Pattern length exceeds max of ".concat(W,"."));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,w=b,S=d>1||g,L=S?Array(M):[];(m=e.indexOf(t,w))>-1;){var _=N(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(_,x),w=m+k,S)for(var O=0;O<k;)L[m+O]=1,O+=1}w=-1;for(var j=[],A=1,I=k+M,C=1<<k-1,E=0;E<k;E+=1){for(var F=0,R=I;F<R;)N(t,{errors:E,currentLocation:b+R,expectedLocation:b,distance:a,ignoreLocation:p})<=x?F=R:I=R,R=Math.floor((I-F)/2+F);I=R;var P=Math.max(1,b-R+1),T=l?M:Math.min(b+R,M)+k,z=Array(T+2);z[T+1]=(1<<E)-1;for(var D=T;D>=P;D-=1){var K=D-1,q=n[e.charAt(K)];if(S&&(L[K]=+!!q),z[D]=(z[D+1]<<1|1)&q,E&&(z[D]|=(j[D+1]|j[D])<<1|1|j[D+1]),z[D]&C&&(A=N(t,{errors:E,currentLocation:K,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=A,(w=K)<=b)break;P=Math.max(1,2*b-w)}}if(N(t,{errors:E+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;j=z}var B={isMatch:w>=0,score:Math.max(.001,A)};if(S){var J=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:$.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o<c;o+=1){var a=e[o];a&&-1===r?r=o:a||-1===r||((i=o-1)-r+1>=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}(L,d);J.length?g&&(B.indices=J):B.isMatch=!1}return B}function z(e){for(var t={},n=0,r=e.length;n<r;n+=1){var i=e.charAt(n);t[i]=(t[i]||0)|1<<r-n-1}return t}var D=function(){function e(t){var n=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?$.location:o,a=i.threshold,s=void 0===a?$.threshold:a,u=i.distance,h=void 0===u?$.distance:u,l=i.includeMatches,f=void 0===l?$.includeMatches:l,d=i.findAllMatches,v=void 0===d?$.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?$.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?$.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?$.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:z(e),startIndex:t})},x=this.pattern.length;if(x>W){for(var w=0,S=x%W,L=x-S;w<L;)b(this.pattern.substr(w,W),w),w+=W;if(S){var _=x-W;b(this.pattern.substr(_),_)}}else b(this.pattern,0)}}return o(e,[{key:"searchIn",value:function(e){var t=this.options,n=t.isCaseSensitive,r=t.includeMatches;if(n||(e=e.toLowerCase()),this.pattern===e){var i={isMatch:!0,score:0};return r&&(i.indices=[[0,e.length-1]]),i}var o=this.options,c=o.location,a=o.distance,s=o.threshold,u=o.findAllMatches,h=o.minMatchCharLength,l=o.ignoreLocation,d=[],v=0,g=!1;this.chunks.forEach((function(t){var n=t.pattern,i=t.alphabet,o=t.startIndex,y=T(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),K=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return q(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return q(e,this.singleRegex)}}]),e}();function q(e,t){var n=e.match(t);return n?n[1]:null}var B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(K),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(K),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(K),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(K),G=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(K),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(K),Q=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?$.location:c,s=o.threshold,u=void 0===s?$.threshold:s,h=o.distance,l=void 0===h?$.distance:h,f=o.includeMatches,d=void 0===f?$.includeMatches:f,v=o.findAllMatches,g=void 0===v?$.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?$.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?$.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?$.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new D(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(K),X=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(K),Y=[B,X,U,V,H,G,J,Q],Z=Y.length,ee=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,te=new Set([Q.type,X.type]),ne=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?$.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?$.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?$.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?$.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?$.findAllMatches:f,v=n.location,g=void 0===v?$.location:v,y=n.threshold,p=void 0===y?$.threshold:y,m=n.distance,k=void 0===m?$.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(ee).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i<o;i+=1){for(var c=n[i],a=!1,s=-1;!a&&++s<Z;){var u=Y[s],h=u.isMultiMatch(c);h&&(r.push(new u(h,t)),a=!0)}if(!a)for(s=-1;++s<Z;){var l=Y[s],f=l.isSingleMatch(c);if(f){r.push(new l(f,t));break}}}return r}))}(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a<s;a+=1){var u=t[a];o.length=0,i=0;for(var h=0,l=u.length;h<l;h+=1){var d=u[h],v=d.search(e),g=v.isMatch,y=v.indices,p=v.score;if(!g){c=0,i=0,o.length=0;break}if(i+=1,c+=p,r){var m=d.constructor.type;te.has(m)?o=[].concat(f(o),f(y)):o.push(y)}}if(i){var k={isMatch:!0,score:c/i};return r&&(k.indices=o),k}}return{isMatch:!1,score:1}}}],[{key:"condition",value:function(e,t){return t.useExtendedSearch}}]),e}(),re=[];function ie(e,t){for(var n=0,r=re.length;n<r;n+=1){var i=re[n];if(i.condition(e,t))return new i(e,t)}return new D(e,t)}var oe="$and",ce="$or",ae="$path",se="$val",ue=function(e){return!(!e[oe]&&!e[ce])},he=function(e){return c({},oe,Object.keys(e).map((function(t){return c({},t,e[t])})))};function le(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n;return ue(e)||(e=he(e)),function e(n){var i=Object.keys(n),o=function(e){return!!e[ae]}(n);if(!o&&i.length>1&&!ue(n))return e(he(n));if(function(e){return!g(e)&&b(e)&&!ue(e)}(n)){var c=o?n[ae]:i[0],a=o?n[se]:n[c];if(!m(a))throw new Error(function(e){return"Invalid value for key ".concat(e)}(c));var s={keyId:C(c),pattern:a};return r&&(s.searcher=ie(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];g(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u}(e)}function fe(e,t){var n=e.matches;t.matches=[],x(n)&&n.forEach((function(e){if(x(e.indices)&&e.indices.length){var n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.src),e.idx>-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function de(e,t){t.score=e.score}var ve=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},$),i),this.options.useExtendedSearch,this._keyStore=new j(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof R))throw new Error("Incorrect 'index' type");this._myIndex=t||P(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){x(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n<r;n+=1){var i=this._docs[n];e(i,n)&&(this.removeAt(n),n-=1,r-=1,t.push(i))}return t}},{key:"removeAt",value:function(e){this._docs.splice(e,1),this._myIndex.removeAt(e)}},{key:"getIndex",value:function(){return this._myIndex}},{key:"search",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).limit,n=void 0===t?-1:t,r=this.options,i=r.includeMatches,o=r.includeScore,c=r.shouldSort,a=r.sortFn,s=r.ignoreFieldNorm,u=m(e)?m(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return function(e,t){var n=t.ignoreFieldNorm,r=void 0===n?$.ignoreFieldNorm:n;e.forEach((function(e){var t=1;e.matches.forEach((function(e){var n=e.key,i=e.norm,o=e.score,c=n?n.weight:null;t*=Math.pow(0===o&&c?Number.EPSILON:o,(c||1)*(r?1:i))})),e.score=t}))}(u,{ignoreFieldNorm:s}),c&&u.sort(a),k(n)&&n>-1&&(u=u.slice(0,n)),function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?$.includeMatches:r,o=n.includeScore,c=void 0===o?$.includeScore:o,a=[];return i&&a.push(fe),c&&a.push(de),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}(u,this._docs,{includeMatches:i,includeScore:o})}},{key:"_searchStringList",value:function(e){var t=ie(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(x(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=le(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u<h;u+=1){var l=e(n.children[u],r,i);if(l.length)s.push.apply(s,f(l));else if(n.operator===oe)return[]}return s},i=this._myIndex.records,o={},c=[];return i.forEach((function(e){var t=e.$,i=e.i;if(x(t)){var a=r(n,t,i);a.length&&(o[i]||(o[i]={idx:i,item:t,matches:[]},c.push(o[i])),a.forEach((function(e){var t,n=e.matches;(t=o[i].matches).push.apply(t,f(n))})))}})),c}},{key:"_searchObjectList",value:function(e){var t=this,n=ie(e,this.options),r=this._myIndex,i=r.keys,o=r.records,c=[];return o.forEach((function(e){var r=e.$,o=e.i;if(x(r)){var a=[];i.forEach((function(e,i){a.push.apply(a,f(t._findMatches({key:e,value:r[i],searcher:n})))})),a.length&&c.push({idx:o,item:r,matches:a})}})),c}},{key:"_findMatches",value:function(e){var t=e.key,n=e.value,r=e.searcher;if(!x(n))return[];var i=[];if(g(n))n.forEach((function(e){var n=e.v,o=e.i,c=e.n;if(x(n)){var a=r.searchIn(n),s=a.isMatch,u=a.score,h=a.indices;s&&i.push({score:u,key:t,value:n,idx:o,norm:c,indices:h})}}));else{var o=n.v,c=n.n,a=r.searchIn(o),s=a.isMatch,u=a.score,h=a.indices;s&&i.push({score:u,key:t,value:o,norm:c,indices:h})}return i}}]),e}();return ve.version="7.0.0",ve.createIndex=P,ve.parseIndex=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?$.getFn:n,i=t.fieldNormWeight,o=void 0===i?$.fieldNormWeight:i,c=e.keys,a=e.records,s=new R({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ve.config=$,function(){re.push.apply(re,arguments)}(ne),ve},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t();
-155
www/priv/guides/authentication/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Authentication</title><meta content="quickslice - Authentication" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a class="active" href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Authentication">Authentication</h1> 3 - <p>Quickslice proxies OAuth between your app and users' Personal Data Servers (PDS). Your app never handles AT Protocol credentials directly.</p> 4 - <h2 id="How-It-Works"><a href="#How-It-Works" class="header-anchor">#</a>How It Works</h2> 5 - <ol> 6 - <li>User clicks login in your app</li> 7 - <li>Your app redirects to Quickslice's <code>/oauth/authorize</code> endpoint</li> 8 - <li>Quickslice redirects to the user's PDS for authorization</li> 9 - <li>User enters credentials and approves your app</li> 10 - <li>PDS redirects back to Quickslice with an auth code</li> 11 - <li>Quickslice exchanges the code for tokens</li> 12 - <li>Quickslice redirects back to your app with a code</li> 13 - <li>Your app exchanges the code for an access token</li> 14 - </ol> 15 - <p>The access token authorizes mutations that write to the user's repository.</p> 16 - <h2 id="Setting-Up-OAuth"><a href="#Setting-Up-OAuth" class="header-anchor">#</a>Setting Up OAuth</h2> 17 - <h3 id="Generate-a-Signing-Key"><a href="#Generate-a-Signing-Key" class="header-anchor">#</a>Generate a Signing Key</h3> 18 - <p>Quickslice needs a private key to sign OAuth tokens. Generate one with <code>goat</code>:</p> 19 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">brew</span><span style="color:#8CDB8C"> install</span><span style="color:#8CDB8C"> goat</span></span> 20 - <span class="line"><span style="color:#5EEBD8">goat</span><span style="color:#8CDB8C"> key</span><span style="color:#8CDB8C"> generate</span><span style="color:#8CDB8C"> -t</span><span style="color:#8CDB8C"> p256</span></span> 21 - <span class="line"></span></code></pre> 22 - <p>Set the output as your <code>OAUTH_SIGNING_KEY</code> environment variable.</p> 23 - <h3 id="Register-an-OAuth-Client"><a href="#Register-an-OAuth-Client" class="header-anchor">#</a>Register an OAuth Client</h3> 24 - <ol> 25 - <li>Open your Quickslice instance and navigate to <strong>Settings</strong></li> 26 - <li>Scroll to <strong>OAuth Clients</strong> and click <strong>Register New Client</strong></li> 27 - <li>Fill in the form: 28 - <ul> 29 - <li><strong>Client Name</strong>: Your app's name</li> 30 - </ul> 31 - <ul> 32 - <li><strong>Client Type</strong>: Public (browser apps) or Confidential (server apps)</li> 33 - </ul> 34 - <ul> 35 - <li><strong>Redirect URIs</strong>: Where users return after auth (e.g., <code>http://localhost:3000</code>)</li> 36 - </ul> 37 - <ul> 38 - <li><strong>Scope</strong>: Leave as <code>atproto transition:generic</code></li> 39 - </ul> 40 - </li> 41 - <li>Copy the <strong>Client ID</strong></li> 42 - </ol> 43 - <h3 id="Public-vs-Confidential-Clients"><a href="#Public-vs-Confidential-Clients" class="header-anchor">#</a>Public vs Confidential Clients</h3> 44 - <table> 45 - <thead> 46 - <tr> 47 - <th>Type</th> 48 - <th>Use Case</th> 49 - <th>Secret</th> 50 - </tr> 51 - </thead> 52 - <tbody> 53 - <tr> 54 - <td><strong>Public</strong></td> 55 - <td>Browser apps, mobile apps</td> 56 - <td>No secret (client cannot secure it)</td> 57 - </tr> 58 - <tr> 59 - <td><strong>Confidential</strong></td> 60 - <td>Server-side apps, backend services</td> 61 - <td>Secret (stored securely on server)</td> 62 - </tr> 63 - </tbody> 64 - </table> 65 - <h2 id="Using-the-Client-SDK"><a href="#Using-the-Client-SDK" class="header-anchor">#</a>Using the Client SDK</h2> 66 - <p>The Quickslice client SDK handles OAuth, PKCE, DPoP, token refresh, and GraphQL requests.</p> 67 - <h3 id="Install"><a href="#Install" class="header-anchor">#</a>Install</h3> 68 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">npm</span><span style="color:#8CDB8C"> install</span><span style="color:#8CDB8C"> quickslice-client-js</span></span> 69 - <span class="line"></span></code></pre> 70 - <p>Or via CDN:</p> 71 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">&#x3C;</span><span style="color:#5EEBD8">script</span><span style="color:#7EB3D8"> src</span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A">"</span><span style="color:#8CDB8C">https://unpkg.com/quickslice-client-js/dist/quickslice-client.min.js</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">>&#x3C;/</span><span style="color:#5EEBD8">script</span><span style="color:#9A9A9A">></span></span> 72 - <span class="line"></span></code></pre> 73 - <h3 id="Initialize"><a href="#Initialize" class="header-anchor">#</a>Initialize</h3> 74 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">import</span><span style="color:#9A9A9A"> {</span><span style="color:#DEDEDE"> createQuicksliceClient </span><span style="color:#9A9A9A">}</span><span style="color:#F07068"> from</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">quickslice-client</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">;</span></span> 75 - <span class="line"></span> 76 - <span class="line"><span style="color:#F07068">const</span><span style="color:#DEDEDE"> client </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#5EEBD8"> createQuicksliceClient</span><span style="color:#9A9A9A">({</span></span> 77 - <span class="line"><span style="color:#7EB3D8"> server</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">https://yourapp.slices.network</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 78 - <span class="line"><span style="color:#7EB3D8"> clientId</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">YOUR_CLIENT_ID</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 79 - <span class="line"><span style="color:#9A9A9A">});</span></span> 80 - <span class="line"></span></code></pre> 81 - <h3 id="Login"><a href="#Login" class="header-anchor">#</a>Login</h3> 82 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">await</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">loginWithRedirect</span><span style="color:#9A9A9A">({</span></span> 83 - <span class="line"><span style="color:#7EB3D8"> handle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">alice.bsky.social</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 84 - <span class="line"><span style="color:#9A9A9A">});</span></span> 85 - <span class="line"></span></code></pre> 86 - <h3 id="Handle-the-Callback"><a href="#Handle-the-Callback" class="header-anchor">#</a>Handle the Callback</h3> 87 - <p>After authentication, the user returns to your redirect URI:</p> 88 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">if</span><span style="color:#9A9A9A"> (</span><span style="color:#DEDEDE">window</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">location</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">search</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">includes</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">"</span><span style="color:#8CDB8C">code=</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">))</span><span style="color:#9A9A9A"> {</span></span> 89 - <span class="line"><span style="color:#F07068"> await</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">handleRedirectCallback</span><span style="color:#9A9A9A">();</span></span> 90 - <span class="line"><span style="color:#9A9A9A">}</span></span> 91 - <span class="line"></span></code></pre> 92 - <h3 id="Check-Authentication-State"><a href="#Check-Authentication-State" class="header-anchor">#</a>Check Authentication State</h3> 93 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">const</span><span style="color:#DEDEDE"> isLoggedIn </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">isAuthenticated</span><span style="color:#9A9A9A">();</span></span> 94 - <span class="line"></span> 95 - <span class="line"><span style="color:#F07068">if</span><span style="color:#9A9A9A"> (</span><span style="color:#DEDEDE">isLoggedIn</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 96 - <span class="line"><span style="color:#F07068"> const</span><span style="color:#DEDEDE"> user </span><span style="color:#9A9A9A">=</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">getUser</span><span style="color:#9A9A9A">();</span></span> 97 - <span class="line"><span style="color:#DEDEDE"> console</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">log</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">user</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">did</span><span style="color:#9A9A9A">);</span><span style="color:#6B6B6B;font-style:italic"> // "did:plc:abc123..."</span></span> 98 - <span class="line"><span style="color:#9A9A9A">}</span></span> 99 - <span class="line"></span></code></pre> 100 - <h3 id="Logout"><a href="#Logout" class="header-anchor">#</a>Logout</h3> 101 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">await</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">logout</span><span style="color:#9A9A9A">();</span></span> 102 - <span class="line"></span></code></pre> 103 - <h2 id="Making-Authenticated-Requests"><a href="#Making-Authenticated-Requests" class="header-anchor">#</a>Making Authenticated Requests</h2> 104 - <h3 id="With-the-SDK"><a href="#With-the-SDK" class="header-anchor">#</a>With the SDK</h3> 105 - <p>The SDK adds authentication headers automatically:</p> 106 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#6B6B6B;font-style:italic">// Public query (no auth needed)</span></span> 107 - <span class="line"><span style="color:#F07068">const</span><span style="color:#DEDEDE"> data </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">publicQuery</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">`</span></span> 108 - <span class="line"><span style="color:#8CDB8C"> query { xyzStatusphereStatus { edges { node { status } } } }</span></span> 109 - <span class="line"><span style="color:#9A9A9A">`</span><span style="color:#9A9A9A">);</span></span> 110 - <span class="line"></span> 111 - <span class="line"><span style="color:#6B6B6B;font-style:italic">// Authenticated query</span></span> 112 - <span class="line"><span style="color:#F07068">const</span><span style="color:#DEDEDE"> viewer </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">query</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">`</span></span> 113 - <span class="line"><span style="color:#8CDB8C"> query { viewer { did handle } }</span></span> 114 - <span class="line"><span style="color:#9A9A9A">`</span><span style="color:#9A9A9A">);</span></span> 115 - <span class="line"></span> 116 - <span class="line"><span style="color:#6B6B6B;font-style:italic">// Mutation (requires auth)</span></span> 117 - <span class="line"><span style="color:#F07068">const</span><span style="color:#DEDEDE"> result </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#DEDEDE"> client</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">mutate</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">`</span></span> 118 - <span class="line"><span style="color:#8CDB8C"> mutation { createXyzStatusphereStatus(input: { status: "🎉", createdAt: "</span><span style="color:#9A9A9A">${</span><span style="color:#9A9A9A">new</span><span style="color:#5EEBD8"> Date</span><span style="color:#9A9A9A">().</span><span style="color:#5EEBD8">toISOString</span><span style="color:#9A9A9A">()</span><span style="color:#9A9A9A">}</span><span style="color:#8CDB8C">" }) { uri } }</span></span> 119 - <span class="line"><span style="color:#9A9A9A">`</span><span style="color:#9A9A9A">);</span></span> 120 - <span class="line"></span></code></pre> 121 - <h3 id="Without-the-SDK"><a href="#Without-the-SDK" class="header-anchor">#</a>Without the SDK</h3> 122 - <p>Without the SDK, include headers based on your OAuth flow:</p> 123 - <p><strong>DPoP flow</strong> (public clients):</p> 124 - <pre><code>Authorization: DPoP &lt;access_token&gt; 125 - DPoP: &lt;dpop_proof&gt; 126 - </code></pre> 127 - <p><strong>Bearer token flow</strong> (confidential clients):</p> 128 - <pre><code>Authorization: Bearer &lt;access_token&gt; 129 - </code></pre> 130 - <h2 id="The-Viewer-Query"><a href="#The-Viewer-Query" class="header-anchor">#</a>The Viewer Query</h2> 131 - <p>The <code>viewer</code> query returns the authenticated user:</p> 132 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 133 - <span class="line"><span style="color:#DEDEDE"> viewer </span><span style="color:#9A9A9A">{</span></span> 134 - <span class="line"><span style="color:#DEDEDE"> did</span></span> 135 - <span class="line"><span style="color:#DEDEDE"> handle</span></span> 136 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 137 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 138 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url </span><span style="color:#9A9A9A">}</span></span> 139 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 140 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 141 - <span class="line"><span style="color:#9A9A9A">}</span></span> 142 - <span class="line"></span></code></pre> 143 - <p>Returns <code>null</code> when not authenticated (no error thrown).</p> 144 - <h2 id="Security-PKCE-and-DPoP"><a href="#Security-PKCE-and-DPoP" class="header-anchor">#</a>Security: PKCE and DPoP</h2> 145 - <p>The SDK implements two security mechanisms for browser apps:</p> 146 - <p><strong>PKCE (Proof Key for Code Exchange)</strong> prevents authorization code interception. Before redirecting, the SDK generates a random secret and sends only its hash to the server. When exchanging the code for tokens, the SDK proves it initiated the request.</p> 147 - <p><strong>DPoP (Demonstrating Proof-of-Possession)</strong> binds tokens to a cryptographic key in your browser. Each request includes a signed proof. An attacker who steals your access token cannot use it without the key.</p> 148 - <h2 id="OAuth-Endpoints"><a href="#OAuth-Endpoints" class="header-anchor">#</a>OAuth Endpoints</h2> 149 - <ul> 150 - <li><code>GET /oauth/authorize</code> - Start the OAuth flow</li> 151 - <li><code>POST /oauth/token</code> - Exchange authorization code for tokens</li> 152 - <li><code>GET /.well-known/oauth-authorization-server</code> - Server metadata</li> 153 - <li><code>GET /oauth/oauth-client-metadata.json</code> - Client metadata</li> 154 - </ul> 155 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/guides/mutations"><span class="page-nav-label">Previous</span><span class="page-nav-title">Mutations</span></a><a class="page-nav-link page-nav-next" href="/guides/deployment"><span class="page-nav-label">Next</span><span class="page-nav-title">Deployment</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="How-It-Works" href="#How-It-Works">How It Works</a><a class="minimap-item" data-target-id="Setting-Up-OAuth" href="#Setting-Up-OAuth">Setting Up OAuth</a><a class="minimap-item minimap-item-sub" data-target-id="Generate-a-Signing-Key" href="#Generate-a-Signing-Key">Generate a Signing Key</a><a class="minimap-item minimap-item-sub" data-target-id="Register-an-OAuth-Client" href="#Register-an-OAuth-Client">Register an OAuth Client</a><a class="minimap-item minimap-item-sub" data-target-id="Public-vs-Confidential-Clients" href="#Public-vs-Confidential-Clients">Public vs Confidential Clients</a><a class="minimap-item" data-target-id="Using-the-Client-SDK" href="#Using-the-Client-SDK">Using the Client SDK</a><a class="minimap-item minimap-item-sub" data-target-id="Install" href="#Install">Install</a><a class="minimap-item minimap-item-sub" data-target-id="Initialize" href="#Initialize">Initialize</a><a class="minimap-item minimap-item-sub" data-target-id="Login" href="#Login">Login</a><a class="minimap-item minimap-item-sub" data-target-id="Handle-the-Callback" href="#Handle-the-Callback">Handle the Callback</a><a class="minimap-item minimap-item-sub" data-target-id="Check-Authentication-State" href="#Check-Authentication-State">Check Authentication State</a><a class="minimap-item minimap-item-sub" data-target-id="Logout" href="#Logout">Logout</a><a class="minimap-item" data-target-id="Making-Authenticated-Requests" href="#Making-Authenticated-Requests">Making Authenticated Requests</a><a class="minimap-item minimap-item-sub" data-target-id="With-the-SDK" href="#With-the-SDK">With the SDK</a><a class="minimap-item minimap-item-sub" data-target-id="Without-the-SDK" href="#Without-the-SDK">Without the SDK</a><a class="minimap-item" data-target-id="The-Viewer-Query" href="#The-Viewer-Query">The Viewer Query</a><a class="minimap-item" data-target-id="Security-PKCE-and-DPoP" href="#Security-PKCE-and-DPoP">Security: PKCE and DPoP</a><a class="minimap-item" data-target-id="OAuth-Endpoints" href="#OAuth-Endpoints">OAuth Endpoints</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-226
www/priv/guides/deployment/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Deployment</title><meta content="quickslice - Deployment" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a class="active" href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Deployment">Deployment</h1> 3 - <p>Deploy Quickslice to production. Railway with one-click deploy is fastest.</p> 4 - <h2 id="Railway-Recommended"><a href="#Railway-Recommended" class="header-anchor">#</a>Railway (Recommended)</h2> 5 - <h3 id="1-Deploy"><a href="#1-Deploy" class="header-anchor">#</a>1. Deploy</h3> 6 - <p>Click the button to deploy Quickslice with SQLite:</p> 7 - <p><a href="https://railway.com/deploy/quickslice?referralCode=Ofii6e&amp;utm_medium=integration&amp;utm_source=template&amp;utm_campaign=generic"><img src="https://railway.com/button.svg" alt="Deploy on Railway" /></a></p> 8 - <p>Railway prompts you to configure environment variables. Leave the form open while you generate a signing key.</p> 9 - <h3 id="2-Generate-OAuth-Signing-Key"><a href="#2-Generate-OAuth-Signing-Key" class="header-anchor">#</a>2. Generate OAuth Signing Key</h3> 10 - <p>Quickslice needs a private key to sign OAuth tokens:</p> 11 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">brew</span><span style="color:#8CDB8C"> install</span><span style="color:#8CDB8C"> goat</span></span> 12 - <span class="line"><span style="color:#5EEBD8">goat</span><span style="color:#8CDB8C"> key</span><span style="color:#8CDB8C"> generate</span><span style="color:#8CDB8C"> -t</span><span style="color:#8CDB8C"> p256</span></span> 13 - <span class="line"></span></code></pre> 14 - <p>Paste the output into the <code>OAUTH_SIGNING_KEY</code> field in Railway, then click <strong>Save Config</strong>.</p> 15 - <h3 id="3-Configure-Your-Domain"><a href="#3-Configure-Your-Domain" class="header-anchor">#</a>3. Configure Your Domain</h3> 16 - <p>After deployment completes:</p> 17 - <ol> 18 - <li>Click on your quickslice service</li> 19 - <li>Go to <strong>Settings</strong></li> 20 - <li>Click <strong>Generate Domain</strong> under Networking</li> 21 - </ol> 22 - <p>Railway creates a public URL like <code>quickslice-production-xxxx.up.railway.app</code>.</p> 23 - <p><strong>Redeploy to apply the domain:</strong></p> 24 - <ol> 25 - <li>Go to <strong>Deployments</strong></li> 26 - <li>Click the three-dot menu on the latest deployment</li> 27 - <li>Select <strong>Redeploy</strong></li> 28 - </ol> 29 - <h3 id="4-Create-Admin-Account"><a href="#4-Create-Admin-Account" class="header-anchor">#</a>4. Create Admin Account</h3> 30 - <p>Visit your domain. The welcome screen prompts you to create an admin account:</p> 31 - <ol> 32 - <li>Enter your AT Protocol handle (e.g., <code>yourname.bsky.social</code>)</li> 33 - <li>Click <strong>Authenticate</strong></li> 34 - <li>Authorize Quickslice on your PDS</li> 35 - <li>You're now the instance admin</li> 36 - </ol> 37 - <h3 id="5-Configure-Your-Instance"><a href="#5-Configure-Your-Instance" class="header-anchor">#</a>5. Configure Your Instance</h3> 38 - <p>From the homepage, go to <strong>Settings</strong>:</p> 39 - <ol> 40 - <li>Enter your <strong>Domain Authority</strong> in reverse-domain format (e.g., <code>xyz.statusphere</code>)</li> 41 - <li>Upload your Lexicons as a <code>.zip</code> file (JSON format, directory structure doesn't matter): 42 - <pre><code>lexicons.zip 43 - └── lexicons/ 44 - └── xyz/ 45 - └── statusphere/ 46 - ├── status.json 47 - └── follow.json 48 - </code></pre> 49 - </li> 50 - <li>Click <strong>Trigger Backfill</strong> to import existing records from the network. The Quickslice logo enters a loading state during backfill and the page refreshes when complete. Check Railway logs to monitor progress: 51 - <pre><code>INFO [backfill] PDS worker 67/87 done (1898 records) 52 - INFO [backfill] PDS worker 68/87 done (1117 records) 53 - INFO [backfill] PDS worker 69/87 done (746 records) 54 - ... 55 - </code></pre> 56 - </li> 57 - </ol> 58 - <h2 id="Environment-Variables"><a href="#Environment-Variables" class="header-anchor">#</a>Environment Variables</h2> 59 - <table> 60 - <thead> 61 - <tr> 62 - <th>Variable</th> 63 - <th>Required</th> 64 - <th>Default</th> 65 - <th>Description</th> 66 - </tr> 67 - </thead> 68 - <tbody> 69 - <tr> 70 - <td><code>OAUTH_SIGNING_KEY</code></td> 71 - <td>Yes</td> 72 - <td>-</td> 73 - <td>P-256 private key for signing OAuth tokens</td> 74 - </tr> 75 - <tr> 76 - <td><code>DATABASE_URL</code></td> 77 - <td>No</td> 78 - <td><code>quickslice.db</code></td> 79 - <td>Path to SQLite database</td> 80 - </tr> 81 - <tr> 82 - <td><code>HOST</code></td> 83 - <td>No</td> 84 - <td><code>127.0.0.1</code></td> 85 - <td>Server bind address (use <code>0.0.0.0</code> for containers)</td> 86 - </tr> 87 - <tr> 88 - <td><code>PORT</code></td> 89 - <td>No</td> 90 - <td><code>8080</code></td> 91 - <td>Server port</td> 92 - </tr> 93 - <tr> 94 - <td><code>SECRET_KEY_BASE</code></td> 95 - <td>Recommended</td> 96 - <td>Auto-generated</td> 97 - <td>Session encryption key (64+ chars)</td> 98 - </tr> 99 - <tr> 100 - <td><code>EXTERNAL_BASE_URL</code></td> 101 - <td>No</td> 102 - <td>Auto-detected</td> 103 - <td>Public URL for OAuth redirects</td> 104 - </tr> 105 - </tbody> 106 - </table> 107 - <h2 id="Flyio"><a href="#Flyio" class="header-anchor">#</a>Fly.io</h2> 108 - <h3 id="1-Create-a-Volume"><a href="#1-Create-a-Volume" class="header-anchor">#</a>1. Create a Volume</h3> 109 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">fly</span><span style="color:#8CDB8C"> volumes</span><span style="color:#8CDB8C"> create</span><span style="color:#8CDB8C"> app_data</span><span style="color:#8CDB8C"> --size</span><span style="color:#5EEBD8"> 10</span></span> 110 - <span class="line"></span></code></pre> 111 - <h3 id="2-Configure-flytoml"><a href="#2-Configure-flytoml" class="header-anchor">#</a>2. Configure fly.toml</h3> 112 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#DEDEDE">app </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">your-app-name</span><span style="color:#9A9A9A">'</span></span> 113 - <span class="line"><span style="color:#DEDEDE">primary_region </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">sjc</span><span style="color:#9A9A9A">'</span></span> 114 - <span class="line"></span> 115 - <span class="line"><span style="color:#9A9A9A">[</span><span style="color:#DEDEDE">build</span><span style="color:#9A9A9A">]</span></span> 116 - <span class="line"><span style="color:#DEDEDE"> dockerfile </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Dockerfile</span><span style="color:#9A9A9A">"</span></span> 117 - <span class="line"></span> 118 - <span class="line"><span style="color:#9A9A9A">[</span><span style="color:#DEDEDE">env</span><span style="color:#9A9A9A">]</span></span> 119 - <span class="line"><span style="color:#DEDEDE"> DATABASE_URL </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">sqlite:/data/quickslice.db</span><span style="color:#9A9A9A">'</span></span> 120 - <span class="line"><span style="color:#DEDEDE"> HOST </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">0.0.0.0</span><span style="color:#9A9A9A">'</span></span> 121 - <span class="line"><span style="color:#DEDEDE"> PORT </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">8080</span><span style="color:#9A9A9A">'</span></span> 122 - <span class="line"></span> 123 - <span class="line"><span style="color:#9A9A9A">[</span><span style="color:#DEDEDE">http_service</span><span style="color:#9A9A9A">]</span></span> 124 - <span class="line"><span style="color:#DEDEDE"> internal_port </span><span style="color:#9A9A9A">=</span><span style="color:#5EEBD8"> 8080</span></span> 125 - <span class="line"><span style="color:#DEDEDE"> force_https </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> true</span></span> 126 - <span class="line"><span style="color:#DEDEDE"> auto_stop_machines </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">stop</span><span style="color:#9A9A9A">'</span></span> 127 - <span class="line"><span style="color:#DEDEDE"> auto_start_machines </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> true</span></span> 128 - <span class="line"><span style="color:#DEDEDE"> min_machines_running </span><span style="color:#9A9A9A">=</span><span style="color:#5EEBD8"> 1</span></span> 129 - <span class="line"></span> 130 - <span class="line"><span style="color:#9A9A9A">[[</span><span style="color:#DEDEDE">mounts</span><span style="color:#9A9A9A">]]</span></span> 131 - <span class="line"><span style="color:#DEDEDE"> source </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">app_data</span><span style="color:#9A9A9A">'</span></span> 132 - <span class="line"><span style="color:#DEDEDE"> destination </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">/data</span><span style="color:#9A9A9A">'</span></span> 133 - <span class="line"></span> 134 - <span class="line"><span style="color:#9A9A9A">[[</span><span style="color:#DEDEDE">vm</span><span style="color:#9A9A9A">]]</span></span> 135 - <span class="line"><span style="color:#DEDEDE"> memory </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">1gb</span><span style="color:#9A9A9A">'</span></span> 136 - <span class="line"><span style="color:#DEDEDE"> cpu_kind </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">shared</span><span style="color:#9A9A9A">'</span></span> 137 - <span class="line"><span style="color:#DEDEDE"> cpus </span><span style="color:#9A9A9A">=</span><span style="color:#5EEBD8"> 1</span></span> 138 - <span class="line"></span></code></pre> 139 - <h3 id="3-Set-Secrets"><a href="#3-Set-Secrets" class="header-anchor">#</a>3. Set Secrets</h3> 140 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">fly</span><span style="color:#8CDB8C"> secrets</span><span style="color:#8CDB8C"> set</span><span style="color:#8CDB8C"> SECRET_KEY_BASE=</span><span style="color:#9A9A9A">$(</span><span style="color:#5EEBD8">openssl</span><span style="color:#8CDB8C"> rand</span><span style="color:#8CDB8C"> -base64</span><span style="color:#5EEBD8"> 48</span><span style="color:#9A9A9A">)</span></span> 141 - <span class="line"><span style="color:#5EEBD8">fly</span><span style="color:#8CDB8C"> secrets</span><span style="color:#8CDB8C"> set</span><span style="color:#8CDB8C"> OAUTH_SIGNING_KEY=</span><span style="color:#9A9A9A">"$(</span><span style="color:#5EEBD8">goat</span><span style="color:#8CDB8C"> key generate -t p256</span><span style="color:#9A9A9A">)"</span></span> 142 - <span class="line"></span></code></pre> 143 - <h3 id="4-Deploy"><a href="#4-Deploy" class="header-anchor">#</a>4. Deploy</h3> 144 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">fly</span><span style="color:#8CDB8C"> deploy</span></span> 145 - <span class="line"></span></code></pre> 146 - <h2 id="Docker-Compose"><a href="#Docker-Compose" class="header-anchor">#</a>Docker Compose</h2> 147 - <p>For self-hosted deployments:</p> 148 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">version</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">3.8</span><span style="color:#9A9A9A">"</span></span> 149 - <span class="line"></span> 150 - <span class="line"><span style="color:#5EEBD8">services</span><span style="color:#9A9A9A">:</span></span> 151 - <span class="line"><span style="color:#5EEBD8"> quickslice</span><span style="color:#9A9A9A">:</span></span> 152 - <span class="line"><span style="color:#5EEBD8"> image</span><span style="color:#9A9A9A">:</span><span style="color:#8CDB8C"> ghcr.io/bigmoves/quickslice:latest</span></span> 153 - <span class="line"><span style="color:#5EEBD8"> ports</span><span style="color:#9A9A9A">:</span></span> 154 - <span class="line"><span style="color:#9A9A9A"> -</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">8080:8080</span><span style="color:#9A9A9A">"</span></span> 155 - <span class="line"><span style="color:#5EEBD8"> volumes</span><span style="color:#9A9A9A">:</span></span> 156 - <span class="line"><span style="color:#9A9A9A"> -</span><span style="color:#8CDB8C"> quickslice-data:/data</span></span> 157 - <span class="line"><span style="color:#5EEBD8"> environment</span><span style="color:#9A9A9A">:</span></span> 158 - <span class="line"><span style="color:#9A9A9A"> -</span><span style="color:#8CDB8C"> HOST=0.0.0.0</span></span> 159 - <span class="line"><span style="color:#9A9A9A"> -</span><span style="color:#8CDB8C"> PORT=8080</span></span> 160 - <span class="line"><span style="color:#9A9A9A"> -</span><span style="color:#8CDB8C"> DATABASE_URL=sqlite:/data/quickslice.db</span></span> 161 - <span class="line"><span style="color:#9A9A9A"> -</span><span style="color:#8CDB8C"> SECRET_KEY_BASE=${SECRET_KEY_BASE}</span></span> 162 - <span class="line"><span style="color:#9A9A9A"> -</span><span style="color:#8CDB8C"> OAUTH_SIGNING_KEY=${OAUTH_SIGNING_KEY}</span></span> 163 - <span class="line"><span style="color:#5EEBD8"> restart</span><span style="color:#9A9A9A">:</span><span style="color:#8CDB8C"> unless-stopped</span></span> 164 - <span class="line"></span> 165 - <span class="line"><span style="color:#5EEBD8">volumes</span><span style="color:#9A9A9A">:</span></span> 166 - <span class="line"><span style="color:#5EEBD8"> quickslice-data</span><span style="color:#9A9A9A">:</span></span> 167 - <span class="line"></span></code></pre> 168 - <p>Create a <code>.env</code> file:</p> 169 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#DEDEDE">SECRET_KEY_BASE</span><span style="color:#9A9A9A">=$(</span><span style="color:#5EEBD8">openssl</span><span style="color:#8CDB8C"> rand</span><span style="color:#8CDB8C"> -base64</span><span style="color:#5EEBD8"> 48</span><span style="color:#9A9A9A">)</span></span> 170 - <span class="line"><span style="color:#DEDEDE">OAUTH_SIGNING_KEY</span><span style="color:#9A9A9A">=$(</span><span style="color:#5EEBD8">goat</span><span style="color:#8CDB8C"> key</span><span style="color:#8CDB8C"> generate</span><span style="color:#8CDB8C"> -t</span><span style="color:#8CDB8C"> p256</span><span style="color:#9A9A9A">)</span></span> 171 - <span class="line"></span></code></pre> 172 - <p>Start:</p> 173 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">docker</span><span style="color:#8CDB8C"> compose</span><span style="color:#8CDB8C"> up</span><span style="color:#8CDB8C"> -d</span></span> 174 - <span class="line"></span></code></pre> 175 - <h2 id="Backfill-Configuration"><a href="#Backfill-Configuration" class="header-anchor">#</a>Backfill Configuration</h2> 176 - <p>NOTE: These configurations are evolving. If your container runs low on memory or crashes, reduce concurrent workers and requests.</p> 177 - <p>Control memory usage during backfill with these variables:</p> 178 - <table> 179 - <thead> 180 - <tr> 181 - <th>Variable</th> 182 - <th>Default</th> 183 - <th>Description</th> 184 - </tr> 185 - </thead> 186 - <tbody> 187 - <tr> 188 - <td><code>BACKFILL_MAX_PDS_WORKERS</code></td> 189 - <td>10</td> 190 - <td>Max concurrent PDS endpoints</td> 191 - </tr> 192 - <tr> 193 - <td><code>BACKFILL_PDS_CONCURRENCY</code></td> 194 - <td>4</td> 195 - <td>Max concurrent repo fetches per PDS</td> 196 - </tr> 197 - <tr> 198 - <td><code>BACKFILL_MAX_HTTP_CONCURRENT</code></td> 199 - <td>50</td> 200 - <td>Global HTTP request limit</td> 201 - </tr> 202 - </tbody> 203 - </table> 204 - <p><strong>1GB RAM:</strong></p> 205 - <pre><code>BACKFILL_MAX_PDS_WORKERS=8 206 - BACKFILL_PDS_CONCURRENCY=2 207 - BACKFILL_MAX_HTTP_CONCURRENT=30 208 - </code></pre> 209 - <p><strong>2GB+ RAM:</strong> Use defaults or increase values.</p> 210 - <h2 id="Resource-Requirements"><a href="#Resource-Requirements" class="header-anchor">#</a>Resource Requirements</h2> 211 - <p><strong>Minimum:</strong></p> 212 - <ul> 213 - <li>Memory: 1GB</li> 214 - <li>CPU: 1 shared core</li> 215 - <li>Disk: 10GB volume</li> 216 - </ul> 217 - <p><strong>Recommendations:</strong></p> 218 - <ul> 219 - <li>Use SSD-backed volumes for SQLite performance</li> 220 - <li>Monitor database size and scale volume as needed</li> 221 - </ul> 222 - <h2 id="PostgreSQL-Deployment"><a href="#PostgreSQL-Deployment" class="header-anchor">#</a>PostgreSQL Deployment</h2> 223 - <p>For deployments requiring a full database server, use the PostgreSQL template:</p> 224 - <p><a href="https://railway.com/deploy/GRtFyd?referralCode=Ofii6e&amp;utm_medium=integration&amp;utm_source=template&amp;utm_campaign=generic"><img src="https://railway.com/button.svg" alt="Deploy on Railway" /></a></p> 225 - <p>This template provisions a PostgreSQL database alongside Quickslice. The <code>DATABASE_URL</code> is automatically configured.</p> 226 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/guides/authentication"><span class="page-nav-label">Previous</span><span class="page-nav-title">Authentication</span></a><a class="page-nav-link page-nav-next" href="/guides/patterns"><span class="page-nav-label">Next</span><span class="page-nav-title">Patterns</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Railway-Recommended" href="#Railway-Recommended">Railway (Recommended)</a><a class="minimap-item minimap-item-sub" data-target-id="1-Deploy" href="#1-Deploy">1. Deploy</a><a class="minimap-item minimap-item-sub" data-target-id="2-Generate-OAuth-Signing-Key" href="#2-Generate-OAuth-Signing-Key">2. Generate OAuth Signing Key</a><a class="minimap-item minimap-item-sub" data-target-id="3-Configure-Your-Domain" href="#3-Configure-Your-Domain">3. Configure Your Domain</a><a class="minimap-item minimap-item-sub" data-target-id="4-Create-Admin-Account" href="#4-Create-Admin-Account">4. Create Admin Account</a><a class="minimap-item minimap-item-sub" data-target-id="5-Configure-Your-Instance" href="#5-Configure-Your-Instance">5. Configure Your Instance</a><a class="minimap-item" data-target-id="Environment-Variables" href="#Environment-Variables">Environment Variables</a><a class="minimap-item" data-target-id="Flyio" href="#Flyio">Fly.io</a><a class="minimap-item minimap-item-sub" data-target-id="1-Create-a-Volume" href="#1-Create-a-Volume">1. Create a Volume</a><a class="minimap-item minimap-item-sub" data-target-id="2-Configure-flytoml" href="#2-Configure-flytoml">2. Configure fly.toml</a><a class="minimap-item minimap-item-sub" data-target-id="3-Set-Secrets" href="#3-Set-Secrets">3. Set Secrets</a><a class="minimap-item minimap-item-sub" data-target-id="4-Deploy" href="#4-Deploy">4. Deploy</a><a class="minimap-item" data-target-id="Docker-Compose" href="#Docker-Compose">Docker Compose</a><a class="minimap-item" data-target-id="Backfill-Configuration" href="#Backfill-Configuration">Backfill Configuration</a><a class="minimap-item" data-target-id="Resource-Requirements" href="#Resource-Requirements">Resource Requirements</a><a class="minimap-item" data-target-id="PostgreSQL-Deployment" href="#PostgreSQL-Deployment">PostgreSQL Deployment</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-224
www/priv/guides/joins/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Joins</title><meta content="quickslice - Joins" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a class="active" href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Joins">Joins</h1> 3 - <p>AT Protocol data lives in collections. A user's status records (<code>xyz.statusphere.status</code>) occupy one collection, their profile (<code>app.bsky.actor.profile</code>) another. Quickslice generates joins that query across collections—fetch a status and its author's profile in one request.</p> 4 - <h2 id="Join-Types"><a href="#Join-Types" class="header-anchor">#</a>Join Types</h2> 5 - <p>Quickslice generates three join types automatically:</p> 6 - <table> 7 - <thead> 8 - <tr> 9 - <th>Type</th> 10 - <th>What it does</th> 11 - <th>Field naming</th> 12 - </tr> 13 - </thead> 14 - <tbody> 15 - <tr> 16 - <td><strong>Forward</strong></td> 17 - <td>Follows a URI or strong ref to another record</td> 18 - <td><code>{fieldName}Resolved</code></td> 19 - </tr> 20 - <tr> 21 - <td><strong>Reverse</strong></td> 22 - <td>Finds all records that reference a given record</td> 23 - <td><code>{SourceType}Via{FieldName}</code></td> 24 - </tr> 25 - <tr> 26 - <td><strong>DID</strong></td> 27 - <td>Finds records by the same author</td> 28 - <td><code>{CollectionName}ByDid</code></td> 29 - </tr> 30 - </tbody> 31 - </table> 32 - <h2 id="Forward-Joins"><a href="#Forward-Joins" class="header-anchor">#</a>Forward Joins</h2> 33 - <p>Forward joins follow references from one record to another. When a record has a field containing an AT-URI or strong ref, Quickslice generates a <code>{fieldName}Resolved</code> field that fetches the referenced record.</p> 34 - <h3 id="Example-Resolving-a-Favorites-Subject"><a href="#Example-Resolving-a-Favorites-Subject" class="header-anchor">#</a>Example: Resolving a Favorite's Subject</h3> 35 - <p>A favorite record has a <code>subject</code> field containing an AT-URI. The <code>subjectResolved</code> field fetches the actual record:</p> 36 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 37 - <span class="line"><span style="color:#DEDEDE"> socialGrainFavorite</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 5</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 38 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 39 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 40 - <span class="line"><span style="color:#DEDEDE"> subject</span></span> 41 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 42 - <span class="line"><span style="color:#DEDEDE"> subjectResolved </span><span style="color:#9A9A9A">{</span></span> 43 - <span class="line"><span style="color:#9A9A9A"> ...</span><span style="color:#F07068"> on</span><span style="color:#5EEBD8"> SocialGrainGallery</span><span style="color:#9A9A9A"> {</span></span> 44 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 45 - <span class="line"><span style="color:#DEDEDE"> title</span></span> 46 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 47 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 48 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 49 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 50 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 51 - <span class="line"><span style="color:#9A9A9A">}</span></span> 52 - <span class="line"></span></code></pre> 53 - <p>Forward joins return a <code>Record</code> union type because the referenced record could be any type. Use inline fragments (<code>... on TypeName</code>) for type-specific fields.</p> 54 - <h2 id="Reverse-Joins"><a href="#Reverse-Joins" class="header-anchor">#</a>Reverse Joins</h2> 55 - <p>Reverse joins work oppositely: given a record, find all records that reference it. Quickslice analyzes your Lexicons and generates reverse join fields automatically.</p> 56 - <p>Reverse joins return paginated connections supporting filtering, sorting, and cursors.</p> 57 - <h3 id="Example-Comments-on-a-Photo"><a href="#Example-Comments-on-a-Photo" class="header-anchor">#</a>Example: Comments on a Photo</h3> 58 - <p>Find all comments that reference a specific photo:</p> 59 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 60 - <span class="line"><span style="color:#DEDEDE"> socialGrainPhoto</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 5</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 61 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 62 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 63 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 64 - <span class="line"><span style="color:#DEDEDE"> alt</span></span> 65 - <span class="line"><span style="color:#DEDEDE"> socialGrainCommentViaSubject</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 66 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 67 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 68 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 69 - <span class="line"><span style="color:#DEDEDE"> text</span></span> 70 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 71 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 72 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 73 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 74 - <span class="line"><span style="color:#DEDEDE"> hasNextPage</span></span> 75 - <span class="line"><span style="color:#DEDEDE"> endCursor</span></span> 76 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 77 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 78 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 79 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 80 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 81 - <span class="line"><span style="color:#9A9A9A">}</span></span> 82 - <span class="line"></span></code></pre> 83 - <h3 id="Sorting-and-Filtering-Reverse-Joins"><a href="#Sorting-and-Filtering-Reverse-Joins" class="header-anchor">#</a>Sorting and Filtering Reverse Joins</h3> 84 - <p>Reverse joins support the same sorting and filtering as top-level queries:</p> 85 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 86 - <span class="line"><span style="color:#DEDEDE"> socialGrainGallery</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 3</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 87 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 88 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 89 - <span class="line"><span style="color:#DEDEDE"> title</span></span> 90 - <span class="line"><span style="color:#DEDEDE"> socialGrainGalleryItemViaGallery</span><span style="color:#9A9A9A">(</span></span> 91 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span></span> 92 - <span class="line"><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> position, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> ASC </span><span style="color:#9A9A9A">}]</span></span> 93 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> gt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span><span style="color:#9A9A9A"> }</span></span> 94 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 95 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 96 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 97 - <span class="line"><span style="color:#DEDEDE"> position</span></span> 98 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 99 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 100 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 101 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 102 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 103 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 104 - <span class="line"><span style="color:#9A9A9A">}</span></span> 105 - <span class="line"></span></code></pre> 106 - <h2 id="DID-Joins"><a href="#DID-Joins" class="header-anchor">#</a>DID Joins</h2> 107 - <p>DID joins connect records by author identity. Every record has a <code>did</code> field identifying its creator. Quickslice generates <code>{CollectionName}ByDid</code> fields to find related records by the same author.</p> 108 - <h3 id="Example-Author-Profile-from-a-Status"><a href="#Example-Author-Profile-from-a-Status" class="header-anchor">#</a>Example: Author Profile from a Status</h3> 109 - <p>Get the author's profile alongside their status:</p> 110 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 111 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 112 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 113 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 114 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 115 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 116 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 117 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 118 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url </span><span style="color:#9A9A9A">}</span></span> 119 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 120 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 121 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 122 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 123 - <span class="line"><span style="color:#9A9A9A">}</span></span> 124 - <span class="line"></span></code></pre> 125 - <h3 id="Unique-vs-Non-Unique-DID-Joins"><a href="#Unique-vs-Non-Unique-DID-Joins" class="header-anchor">#</a>Unique vs Non-Unique DID Joins</h3> 126 - <p>Some collections have one record per DID (like profiles with a <code>literal:self</code> key). These return a single object:</p> 127 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">appBskyActorProfileByDid</span><span style="color:#9A9A9A"> {</span></span> 128 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 129 - <span class="line"><span style="color:#9A9A9A">}</span></span> 130 - <span class="line"></span></code></pre> 131 - <p>Other collections can have multiple records per DID. These return paginated connections:</p> 132 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">socialGrainPhotoByDid</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> 10</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span><span style="color:#DEDEDE">{ </span><span style="color:#5EEBD8">field</span><span style="color:#DEDEDE">: </span><span style="color:#5EEBD8">createdAt</span><span style="color:#9A9A9A">,</span><span style="color:#5EEBD8"> direction</span><span style="color:#DEDEDE">: </span><span style="color:#5EEBD8">DESC</span><span style="color:#DEDEDE"> }</span><span style="color:#9A9A9A">])</span><span style="color:#9A9A9A"> {</span></span> 133 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 134 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 135 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 136 - <span class="line"><span style="color:#DEDEDE"> alt</span></span> 137 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 138 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 139 - <span class="line"><span style="color:#9A9A9A">}</span></span> 140 - <span class="line"></span></code></pre> 141 - <h3 id="Cross-Lexicon-DID-Joins"><a href="#Cross-Lexicon-DID-Joins" class="header-anchor">#</a>Cross-Lexicon DID Joins</h3> 142 - <p>DID joins work across different Lexicon families. Get a user's Bluesky profile alongside their app-specific data:</p> 143 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 144 - <span class="line"><span style="color:#DEDEDE"> socialGrainPhoto</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 5</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 145 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 146 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 147 - <span class="line"><span style="color:#DEDEDE"> alt</span></span> 148 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 149 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 150 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url </span><span style="color:#9A9A9A">}</span></span> 151 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 152 - <span class="line"><span style="color:#DEDEDE"> socialGrainActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 153 - <span class="line"><span style="color:#DEDEDE"> description</span></span> 154 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 155 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 156 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 157 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 158 - <span class="line"><span style="color:#9A9A9A">}</span></span> 159 - <span class="line"></span></code></pre> 160 - <h2 id="Common-Patterns"><a href="#Common-Patterns" class="header-anchor">#</a>Common Patterns</h2> 161 - <h3 id="Profile-Lookups"><a href="#Profile-Lookups" class="header-anchor">#</a>Profile Lookups</h3> 162 - <p>The most common pattern: joining author profiles to any record type.</p> 163 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 164 - <span class="line"><span style="color:#DEDEDE"> myAppPost</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 165 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 166 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 167 - <span class="line"><span style="color:#DEDEDE"> content</span></span> 168 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 169 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 170 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url </span><span style="color:#9A9A9A">}</span></span> 171 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 172 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 173 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 174 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 175 - <span class="line"><span style="color:#9A9A9A">}</span></span> 176 - <span class="line"></span></code></pre> 177 - <h3 id="Engagement-Counts"><a href="#Engagement-Counts" class="header-anchor">#</a>Engagement Counts</h3> 178 - <p>Use reverse joins to count likes, comments, or other engagement:</p> 179 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 180 - <span class="line"><span style="color:#DEDEDE"> socialGrainPhoto</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 181 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 182 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 183 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 184 - <span class="line"><span style="color:#DEDEDE"> socialGrainFavoriteViaSubject </span><span style="color:#9A9A9A">{</span></span> 185 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 186 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 187 - <span class="line"><span style="color:#DEDEDE"> socialGrainCommentViaSubject </span><span style="color:#9A9A9A">{</span></span> 188 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 189 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 190 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 191 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 192 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 193 - <span class="line"><span style="color:#9A9A9A">}</span></span> 194 - <span class="line"></span></code></pre> 195 - <h3 id="User-Activity"><a href="#User-Activity" class="header-anchor">#</a>User Activity</h3> 196 - <p>Get all records by a user across multiple collections:</p> 197 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 198 - <span class="line"><span style="color:#DEDEDE"> socialGrainActorProfile</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 1</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> actorHandle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">alice.bsky.social</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span><span style="color:#9A9A9A"> })</span><span style="color:#9A9A9A"> {</span></span> 199 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 200 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 201 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 202 - <span class="line"><span style="color:#DEDEDE"> socialGrainPhotoByDid</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 5</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 203 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 204 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> alt </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> }</span></span> 205 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 206 - <span class="line"><span style="color:#DEDEDE"> socialGrainGalleryByDid</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 5</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 207 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 208 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> title </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> }</span></span> 209 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 210 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 211 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 212 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 213 - <span class="line"><span style="color:#9A9A9A">}</span></span> 214 - <span class="line"></span></code></pre> 215 - <h2 id="How-Batching-Works"><a href="#How-Batching-Works" class="header-anchor">#</a>How Batching Works</h2> 216 - <p>Quickslice batches join resolution to avoid the N+1 query problem. When querying 100 photos with author profiles:</p> 217 - <ol> 218 - <li>Fetches 100 photos in one query</li> 219 - <li>Collects all unique DIDs from those photos</li> 220 - <li>Fetches all profiles in a single query: <code>WHERE did IN (...)</code></li> 221 - <li>Maps profiles back to their photos</li> 222 - </ol> 223 - <p>All join types batch automatically.</p> 224 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/guides/queries"><span class="page-nav-label">Previous</span><span class="page-nav-title">Queries</span></a><a class="page-nav-link page-nav-next" href="/guides/mutations"><span class="page-nav-label">Next</span><span class="page-nav-title">Mutations</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Join-Types" href="#Join-Types">Join Types</a><a class="minimap-item" data-target-id="Forward-Joins" href="#Forward-Joins">Forward Joins</a><a class="minimap-item minimap-item-sub" data-target-id="Example-Resolving-a-Favorites-Subject" href="#Example-Resolving-a-Favorites-Subject">Example: Resolving a Favorite&#39;s Subject</a><a class="minimap-item" data-target-id="Reverse-Joins" href="#Reverse-Joins">Reverse Joins</a><a class="minimap-item minimap-item-sub" data-target-id="Example-Comments-on-a-Photo" href="#Example-Comments-on-a-Photo">Example: Comments on a Photo</a><a class="minimap-item minimap-item-sub" data-target-id="Sorting-and-Filtering-Reverse-Joins" href="#Sorting-and-Filtering-Reverse-Joins">Sorting and Filtering Reverse Joins</a><a class="minimap-item" data-target-id="DID-Joins" href="#DID-Joins">DID Joins</a><a class="minimap-item minimap-item-sub" data-target-id="Example-Author-Profile-from-a-Status" href="#Example-Author-Profile-from-a-Status">Example: Author Profile from a Status</a><a class="minimap-item minimap-item-sub" data-target-id="Unique-vs-Non-Unique-DID-Joins" href="#Unique-vs-Non-Unique-DID-Joins">Unique vs Non-Unique DID Joins</a><a class="minimap-item minimap-item-sub" data-target-id="Cross-Lexicon-DID-Joins" href="#Cross-Lexicon-DID-Joins">Cross-Lexicon DID Joins</a><a class="minimap-item" data-target-id="Common-Patterns" href="#Common-Patterns">Common Patterns</a><a class="minimap-item minimap-item-sub" data-target-id="Profile-Lookups" href="#Profile-Lookups">Profile Lookups</a><a class="minimap-item minimap-item-sub" data-target-id="Engagement-Counts" href="#Engagement-Counts">Engagement Counts</a><a class="minimap-item minimap-item-sub" data-target-id="User-Activity" href="#User-Activity">User Activity</a><a class="minimap-item" data-target-id="How-Batching-Works" href="#How-Batching-Works">How Batching Works</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-137
www/priv/guides/mutations/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Mutations</title><meta content="quickslice - Mutations" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a class="active" href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Mutations">Mutations</h1> 3 - <p>Mutations write records to the authenticated user's repository. All mutations require authentication.</p> 4 - <h2 id="Creating-Records"><a href="#Creating-Records" class="header-anchor">#</a>Creating Records</h2> 5 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 6 - <span class="line"><span style="color:#DEDEDE"> createXyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 7 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 8 - <span class="line"><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">🎉</span><span style="color:#9A9A9A">"</span></span> 9 - <span class="line"><span style="color:#8CDB8C"> createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-30T12:00:00Z</span><span style="color:#9A9A9A">"</span></span> 10 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 11 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 12 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 13 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 14 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 15 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 16 - <span class="line"><span style="color:#9A9A9A">}</span></span> 17 - <span class="line"></span></code></pre> 18 - <p>Quickslice:</p> 19 - <ol> 20 - <li>Writes the record to the user's PDS</li> 21 - <li>Indexes locally for immediate query availability</li> 22 - </ol> 23 - <h3 id="Custom-Record-Keys"><a href="#Custom-Record-Keys" class="header-anchor">#</a>Custom Record Keys</h3> 24 - <p>By default, Quickslice generates a TID (timestamp-based ID) for the record key. You can specify a custom key:</p> 25 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 26 - <span class="line"><span style="color:#DEDEDE"> createXyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 27 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 28 - <span class="line"><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">✨</span><span style="color:#9A9A9A">"</span></span> 29 - <span class="line"><span style="color:#8CDB8C"> createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-30T12:00:00Z</span><span style="color:#9A9A9A">"</span></span> 30 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 31 - <span class="line"><span style="color:#DEDEDE"> rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">my-custom-key</span><span style="color:#9A9A9A">"</span></span> 32 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 33 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 34 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 35 - <span class="line"><span style="color:#9A9A9A">}</span></span> 36 - <span class="line"></span></code></pre> 37 - <p>Some Lexicons require specific key patterns. For example, profiles use <code>self</code> as the record key.</p> 38 - <h2 id="Updating-Records"><a href="#Updating-Records" class="header-anchor">#</a>Updating Records</h2> 39 - <p>Update an existing record by its record key:</p> 40 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 41 - <span class="line"><span style="color:#DEDEDE"> updateXyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 42 - <span class="line"><span style="color:#DEDEDE"> rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">3kvt7a2xyzw2a</span><span style="color:#9A9A9A">"</span></span> 43 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 44 - <span class="line"><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">🚀</span><span style="color:#9A9A9A">"</span></span> 45 - <span class="line"><span style="color:#8CDB8C"> createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-30T12:00:00Z</span><span style="color:#9A9A9A">"</span></span> 46 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 47 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 48 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 49 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 50 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 51 - <span class="line"><span style="color:#9A9A9A">}</span></span> 52 - <span class="line"></span></code></pre> 53 - <p>The update replaces the entire record. Include all required fields, not just the ones you're changing.</p> 54 - <h2 id="Deleting-Records"><a href="#Deleting-Records" class="header-anchor">#</a>Deleting Records</h2> 55 - <p>Delete a record by its record key:</p> 56 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 57 - <span class="line"><span style="color:#DEDEDE"> deleteXyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">3kvt7a2xyzw2a</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 58 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 59 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 60 - <span class="line"><span style="color:#9A9A9A">}</span></span> 61 - <span class="line"></span></code></pre> 62 - <h2 id="Working-with-Blobs"><a href="#Working-with-Blobs" class="header-anchor">#</a>Working with Blobs</h2> 63 - <p>Records can include binary data like images. Upload the blob first, then reference it.</p> 64 - <h3 id="Upload-a-Blob"><a href="#Upload-a-Blob" class="header-anchor">#</a>Upload a Blob</h3> 65 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 66 - <span class="line"><span style="color:#DEDEDE"> uploadBlob</span><span style="color:#9A9A9A">(</span></span> 67 - <span class="line"><span style="color:#DEDEDE"> data</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==</span><span style="color:#9A9A9A">"</span></span> 68 - <span class="line"><span style="color:#DEDEDE"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/png</span><span style="color:#9A9A9A">"</span></span> 69 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 70 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 71 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 72 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 73 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 74 - <span class="line"><span style="color:#9A9A9A">}</span></span> 75 - <span class="line"></span></code></pre> 76 - <p>The <code>data</code> field accepts base64-encoded binary data. The response includes a <code>ref</code> (CID) for use in your record.</p> 77 - <h3 id="Use-the-Blob-in-a-Record"><a href="#Use-the-Blob-in-a-Record" class="header-anchor">#</a>Use the Blob in a Record</h3> 78 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 79 - <span class="line"><span style="color:#DEDEDE"> updateAppBskyActorProfile</span><span style="color:#9A9A9A">(</span></span> 80 - <span class="line"><span style="color:#DEDEDE"> rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">self</span><span style="color:#9A9A9A">"</span></span> 81 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 82 - <span class="line"><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Alice</span><span style="color:#9A9A9A">"</span></span> 83 - <span class="line"><span style="color:#8CDB8C"> avatar</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 84 - <span class="line"><span style="color:#8CDB8C"> ref</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreiabc123...</span><span style="color:#9A9A9A">"</span></span> 85 - <span class="line"><span style="color:#8CDB8C"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/png</span><span style="color:#9A9A9A">"</span></span> 86 - <span class="line"><span style="color:#8CDB8C"> size</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 95</span></span> 87 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 88 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 89 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 90 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 91 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 92 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span></span> 93 - <span class="line"><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span></span> 94 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 95 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 96 - <span class="line"><span style="color:#9A9A9A">}</span></span> 97 - <span class="line"></span></code></pre> 98 - <p>See the <a href="/../reference/blobs">Blobs Reference</a> for more details on blob handling and URL presets.</p> 99 - <h2 id="Error-Handling"><a href="#Error-Handling" class="header-anchor">#</a>Error Handling</h2> 100 - <p>Common mutation errors:</p> 101 - <table> 102 - <thead> 103 - <tr> 104 - <th>Error</th> 105 - <th>Cause</th> 106 - </tr> 107 - </thead> 108 - <tbody> 109 - <tr> 110 - <td><code>401 Unauthorized</code></td> 111 - <td>Missing or invalid authentication token</td> 112 - </tr> 113 - <tr> 114 - <td><code>400 Bad Request</code></td> 115 - <td>Invalid input (missing required fields, wrong types)</td> 116 - </tr> 117 - <tr> 118 - <td><code>404 Not Found</code></td> 119 - <td>Record doesn't exist (for update/delete)</td> 120 - </tr> 121 - <tr> 122 - <td><code>403 Forbidden</code></td> 123 - <td>Trying to modify another user's record</td> 124 - </tr> 125 - </tbody> 126 - </table> 127 - <h2 id="Authentication"><a href="#Authentication" class="header-anchor">#</a>Authentication</h2> 128 - <p>Mutations require authentication. Headers depend on the OAuth flow:</p> 129 - <p><strong>DPoP flow</strong> (recommended for browser apps):</p> 130 - <pre><code>Authorization: DPoP &lt;access_token&gt; 131 - DPoP: &lt;dpop_proof&gt; 132 - </code></pre> 133 - <p><strong>Bearer token flow</strong>:</p> 134 - <pre><code>Authorization: Bearer &lt;access_token&gt; 135 - </code></pre> 136 - <p>See the <a href="/authentication">Authentication Guide</a> for flow details and token acquisition.</p> 137 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/guides/joins"><span class="page-nav-label">Previous</span><span class="page-nav-title">Joins</span></a><a class="page-nav-link page-nav-next" href="/guides/authentication"><span class="page-nav-label">Next</span><span class="page-nav-title">Authentication</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Creating-Records" href="#Creating-Records">Creating Records</a><a class="minimap-item minimap-item-sub" data-target-id="Custom-Record-Keys" href="#Custom-Record-Keys">Custom Record Keys</a><a class="minimap-item" data-target-id="Updating-Records" href="#Updating-Records">Updating Records</a><a class="minimap-item" data-target-id="Deleting-Records" href="#Deleting-Records">Deleting Records</a><a class="minimap-item" data-target-id="Working-with-Blobs" href="#Working-with-Blobs">Working with Blobs</a><a class="minimap-item minimap-item-sub" data-target-id="Upload-a-Blob" href="#Upload-a-Blob">Upload a Blob</a><a class="minimap-item minimap-item-sub" data-target-id="Use-the-Blob-in-a-Record" href="#Use-the-Blob-in-a-Record">Use the Blob in a Record</a><a class="minimap-item" data-target-id="Error-Handling" href="#Error-Handling">Error Handling</a><a class="minimap-item" data-target-id="Authentication" href="#Authentication">Authentication</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-232
www/priv/guides/patterns/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Patterns</title><meta content="quickslice - Patterns" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a class="active" href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Common-Patterns">Common Patterns</h1> 3 - <p>Recipes for common use cases when building with Quickslice.</p> 4 - <h2 id="Profile-Lookups"><a href="#Profile-Lookups" class="header-anchor">#</a>Profile Lookups</h2> 5 - <p>Join author profiles to any record type to display names and avatars.</p> 6 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> PostsWithAuthors</span><span style="color:#9A9A9A"> {</span></span> 7 - <span class="line"><span style="color:#DEDEDE"> myAppPost</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 8 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 9 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 10 - <span class="line"><span style="color:#DEDEDE"> content</span></span> 11 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 12 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 13 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 14 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> }</span></span> 15 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 16 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 17 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 18 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 19 - <span class="line"><span style="color:#9A9A9A">}</span></span> 20 - <span class="line"></span></code></pre> 21 - <p>The <code>appBskyActorProfileByDid</code> field works on all records because every record has a <code>did</code> field.</p> 22 - <h2 id="User-Timelines"><a href="#User-Timelines" class="header-anchor">#</a>User Timelines</h2> 23 - <p>Fetch all records by a specific user using DID joins from their profile.</p> 24 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> UserTimeline</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$handle</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 25 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 1</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> actorHandle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $handle </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> })</span><span style="color:#9A9A9A"> {</span></span> 26 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 27 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 28 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 29 - <span class="line"><span style="color:#DEDEDE"> myAppPostByDid</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 30 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 31 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 32 - <span class="line"><span style="color:#DEDEDE"> content</span></span> 33 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 34 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 35 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 36 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 37 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 38 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 39 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 40 - <span class="line"><span style="color:#9A9A9A">}</span></span> 41 - <span class="line"></span></code></pre> 42 - <h2 id="Engagement-Counts"><a href="#Engagement-Counts" class="header-anchor">#</a>Engagement Counts</h2> 43 - <p>Use reverse joins with <code>totalCount</code> to show likes, comments, or other engagement metrics.</p> 44 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> PhotosWithEngagement</span><span style="color:#9A9A9A"> {</span></span> 45 - <span class="line"><span style="color:#DEDEDE"> socialGrainPhoto</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 46 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 47 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 48 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 49 - <span class="line"><span style="color:#DEDEDE"> alt</span></span> 50 - <span class="line"><span style="color:#DEDEDE"> socialGrainFavoriteViaSubject </span><span style="color:#9A9A9A">{</span></span> 51 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 52 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 53 - <span class="line"><span style="color:#DEDEDE"> socialGrainCommentViaSubject </span><span style="color:#9A9A9A">{</span></span> 54 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 55 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 56 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 57 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 58 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 59 - <span class="line"><span style="color:#9A9A9A">}</span></span> 60 - <span class="line"></span></code></pre> 61 - <h2 id="Feed-with-Nested-Data"><a href="#Feed-with-Nested-Data" class="header-anchor">#</a>Feed with Nested Data</h2> 62 - <p>Build a rich feed by combining multiple join types.</p> 63 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> Feed</span><span style="color:#9A9A9A"> {</span></span> 64 - <span class="line"><span style="color:#DEDEDE"> myAppPost</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 65 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 66 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 67 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 68 - <span class="line"><span style="color:#DEDEDE"> content</span></span> 69 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 70 - <span class="line"></span> 71 - <span class="line"><span style="color:#6B6B6B;font-style:italic"> # Author profile</span></span> 72 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 73 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 74 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> }</span></span> 75 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 76 - <span class="line"></span> 77 - <span class="line"><span style="color:#6B6B6B;font-style:italic"> # Engagement counts</span></span> 78 - <span class="line"><span style="color:#DEDEDE"> myAppLikeViaSubject </span><span style="color:#9A9A9A">{</span></span> 79 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 80 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 81 - <span class="line"><span style="color:#DEDEDE"> myAppCommentViaSubject </span><span style="color:#9A9A9A">{</span></span> 82 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 83 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 84 - <span class="line"></span> 85 - <span class="line"><span style="color:#6B6B6B;font-style:italic"> # Preview of recent comments</span></span> 86 - <span class="line"><span style="color:#DEDEDE"> myAppCommentViaSubject</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 3</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 87 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 88 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 89 - <span class="line"><span style="color:#DEDEDE"> text</span></span> 90 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 91 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 92 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 93 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 94 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 95 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 96 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 97 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 98 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 99 - <span class="line"><span style="color:#9A9A9A">}</span></span> 100 - <span class="line"></span></code></pre> 101 - <h2 id="Paginated-Lists"><a href="#Paginated-Lists" class="header-anchor">#</a>Paginated Lists</h2> 102 - <p>Implement infinite scroll or &quot;load more&quot; with cursor-based pagination.</p> 103 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> PaginatedStatuses</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$cursor</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 104 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 105 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span></span> 106 - <span class="line"><span style="color:#DEDEDE"> after</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $cursor</span></span> 107 - <span class="line"><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}]</span></span> 108 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 109 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 110 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 111 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 112 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 113 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 114 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 115 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 116 - <span class="line"><span style="color:#DEDEDE"> hasNextPage</span></span> 117 - <span class="line"><span style="color:#DEDEDE"> endCursor</span></span> 118 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 119 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 120 - <span class="line"><span style="color:#9A9A9A">}</span></span> 121 - <span class="line"></span></code></pre> 122 - <p>First request: <code>{ &quot;cursor&quot;: null }</code></p> 123 - <p>Subsequent requests: <code>{ &quot;cursor&quot;: &quot;endCursor_from_previous_response&quot; }</code></p> 124 - <p>Continue until <code>hasNextPage</code> is <code>false</code>.</p> 125 - <h2 id="Filtered-Search"><a href="#Filtered-Search" class="header-anchor">#</a>Filtered Search</h2> 126 - <p>Combine multiple filters for search functionality.</p> 127 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> SearchProfiles</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$query</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 128 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile</span><span style="color:#9A9A9A">(</span></span> 129 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span></span> 130 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> contains</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $query </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> }</span></span> 131 - <span class="line"><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> displayName, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> ASC </span><span style="color:#9A9A9A">}]</span></span> 132 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 133 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 134 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 135 - <span class="line"><span style="color:#DEDEDE"> actorHandle</span></span> 136 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 137 - <span class="line"><span style="color:#DEDEDE"> description</span></span> 138 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> }</span></span> 139 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 140 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 141 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 142 - <span class="line"><span style="color:#9A9A9A">}</span></span> 143 - <span class="line"></span></code></pre> 144 - <h2 id="Date-Range-Queries"><a href="#Date-Range-Queries" class="header-anchor">#</a>Date Range Queries</h2> 145 - <p>Filter records within a time period.</p> 146 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> RecentActivity</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$since</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> DateTime</span><span style="color:#9A9A9A">!,</span><span style="color:#DEDEDE"> $until</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> DateTime</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 147 - <span class="line"><span style="color:#DEDEDE"> myAppPost</span><span style="color:#9A9A9A">(</span></span> 148 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 149 - <span class="line"><span style="color:#8CDB8C"> createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> gte</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $since, </span><span style="color:#8CDB8C">lt</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $until </span><span style="color:#9A9A9A">}</span></span> 150 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 151 - <span class="line"><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}]</span></span> 152 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 153 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 154 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 155 - <span class="line"><span style="color:#DEDEDE"> content</span></span> 156 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 157 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 158 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 159 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 160 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 161 - <span class="line"><span style="color:#9A9A9A">}</span></span> 162 - <span class="line"></span></code></pre> 163 - <p>Variables:</p> 164 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 165 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">since</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 166 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">until</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-02-01T00:00:00Z</span><span style="color:#9A9A9A">"</span></span> 167 - <span class="line"><span style="color:#9A9A9A">}</span></span> 168 - <span class="line"></span></code></pre> 169 - <h2 id="Current-Users-Data"><a href="#Current-Users-Data" class="header-anchor">#</a>Current User's Data</h2> 170 - <p>Use the <code>viewer</code> query to get the authenticated user's records.</p> 171 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> MyProfile</span><span style="color:#9A9A9A"> {</span></span> 172 - <span class="line"><span style="color:#DEDEDE"> viewer </span><span style="color:#9A9A9A">{</span></span> 173 - <span class="line"><span style="color:#DEDEDE"> did</span></span> 174 - <span class="line"><span style="color:#DEDEDE"> handle</span></span> 175 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 176 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 177 - <span class="line"><span style="color:#DEDEDE"> description</span></span> 178 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> }</span></span> 179 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 180 - <span class="line"><span style="color:#DEDEDE"> myAppPostByDid</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 181 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 182 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 183 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 184 - <span class="line"><span style="color:#DEDEDE"> content</span></span> 185 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 186 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 187 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 188 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 189 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 190 - <span class="line"><span style="color:#9A9A9A">}</span></span> 191 - <span class="line"></span></code></pre> 192 - <h2 id="Real-Time-Updates"><a href="#Real-Time-Updates" class="header-anchor">#</a>Real-Time Updates</h2> 193 - <p>Subscribe to new records and update your UI live.</p> 194 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#5EEBD8"> NewStatuses</span><span style="color:#9A9A9A"> {</span></span> 195 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusCreated </span><span style="color:#9A9A9A">{</span></span> 196 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 197 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 198 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 199 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 200 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 201 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> }</span></span> 202 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 203 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 204 - <span class="line"><span style="color:#9A9A9A">}</span></span> 205 - <span class="line"></span></code></pre> 206 - <p>Combine with an initial query to show existing data, then append new records as they arrive via subscription.</p> 207 - <h2 id="Aggregations"><a href="#Aggregations" class="header-anchor">#</a>Aggregations</h2> 208 - <p>Get statistics like top items or activity over time.</p> 209 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> TopArtists</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$user</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 210 - <span class="line"><span style="color:#DEDEDE"> fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">(</span></span> 211 - <span class="line"><span style="color:#DEDEDE"> groupBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> artists </span><span style="color:#9A9A9A">}]</span></span> 212 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> actorHandle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $user </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> }</span></span> 213 - <span class="line"><span style="color:#DEDEDE"> orderBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> count</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}</span></span> 214 - <span class="line"><span style="color:#DEDEDE"> limit</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span></span> 215 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 216 - <span class="line"><span style="color:#DEDEDE"> artists</span></span> 217 - <span class="line"><span style="color:#DEDEDE"> count</span></span> 218 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 219 - <span class="line"><span style="color:#9A9A9A">}</span></span> 220 - <span class="line"></span></code></pre> 221 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> MonthlyActivity</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$user</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 222 - <span class="line"><span style="color:#DEDEDE"> myAppPostAggregated</span><span style="color:#9A9A9A">(</span></span> 223 - <span class="line"><span style="color:#DEDEDE"> groupBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">interval</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> MONTH </span><span style="color:#9A9A9A">}]</span></span> 224 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> actorHandle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $user </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> }</span></span> 225 - <span class="line"><span style="color:#DEDEDE"> orderBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> count</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}</span></span> 226 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 227 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 228 - <span class="line"><span style="color:#DEDEDE"> count</span></span> 229 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 230 - <span class="line"><span style="color:#9A9A9A">}</span></span> 231 - <span class="line"></span></code></pre> 232 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/guides/deployment"><span class="page-nav-label">Previous</span><span class="page-nav-title">Deployment</span></a><a class="page-nav-link page-nav-next" href="/guides/troubleshooting"><span class="page-nav-label">Next</span><span class="page-nav-title">Troubleshooting</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Profile-Lookups" href="#Profile-Lookups">Profile Lookups</a><a class="minimap-item" data-target-id="User-Timelines" href="#User-Timelines">User Timelines</a><a class="minimap-item" data-target-id="Engagement-Counts" href="#Engagement-Counts">Engagement Counts</a><a class="minimap-item" data-target-id="Feed-with-Nested-Data" href="#Feed-with-Nested-Data">Feed with Nested Data</a><a class="minimap-item" data-target-id="Paginated-Lists" href="#Paginated-Lists">Paginated Lists</a><a class="minimap-item" data-target-id="Filtered-Search" href="#Filtered-Search">Filtered Search</a><a class="minimap-item" data-target-id="Date-Range-Queries" href="#Date-Range-Queries">Date Range Queries</a><a class="minimap-item" data-target-id="Current-Users-Data" href="#Current-Users-Data">Current User&#39;s Data</a><a class="minimap-item" data-target-id="Real-Time-Updates" href="#Real-Time-Updates">Real-Time Updates</a><a class="minimap-item" data-target-id="Aggregations" href="#Aggregations">Aggregations</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-243
www/priv/guides/queries/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Queries</title><meta content="quickslice - Queries" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a class="active" href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Queries">Queries</h1> 3 - <p>Quickslice generates a GraphQL query for each Lexicon record type. Queries are public; no authentication required.</p> 4 - <h2 id="Relay-Connections"><a href="#Relay-Connections" class="header-anchor">#</a>Relay Connections</h2> 5 - <p>Queries return data in the <a href="https://relay.dev/graphql/connections.htm">Relay Connection</a> format:</p> 6 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 7 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus </span><span style="color:#9A9A9A">{</span></span> 8 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 9 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 10 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 11 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 12 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 13 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 14 - <span class="line"><span style="color:#DEDEDE"> cursor</span></span> 15 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 16 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 17 - <span class="line"><span style="color:#DEDEDE"> hasNextPage</span></span> 18 - <span class="line"><span style="color:#DEDEDE"> endCursor</span></span> 19 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 20 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 21 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 22 - <span class="line"><span style="color:#9A9A9A">}</span></span> 23 - <span class="line"></span></code></pre> 24 - <ul> 25 - <li><code>edges</code>: Array of results, each containing a <code>node</code> (the record) and <code>cursor</code> (for pagination)</li> 26 - <li><code>pageInfo</code>: Pagination metadata</li> 27 - <li><code>totalCount</code>: Total number of matching records</li> 28 - </ul> 29 - <h2 id="Filtering"><a href="#Filtering" class="header-anchor">#</a>Filtering</h2> 30 - <p>Use the <code>where</code> argument to filter records:</p> 31 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 32 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">🎉</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span><span style="color:#9A9A9A"> })</span><span style="color:#9A9A9A"> {</span></span> 33 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 34 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 35 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 36 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 37 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 38 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 39 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 40 - <span class="line"><span style="color:#9A9A9A">}</span></span> 41 - <span class="line"></span></code></pre> 42 - <h3 id="Filter-Operators"><a href="#Filter-Operators" class="header-anchor">#</a>Filter Operators</h3> 43 - <table> 44 - <thead> 45 - <tr> 46 - <th>Operator</th> 47 - <th>Description</th> 48 - <th>Example</th> 49 - </tr> 50 - </thead> 51 - <tbody> 52 - <tr> 53 - <td><code>eq</code></td> 54 - <td>Equal to</td> 55 - <td><code>{ status: { eq: &quot;👍&quot; } }</code></td> 56 - </tr> 57 - <tr> 58 - <td><code>ne</code></td> 59 - <td>Not equal to</td> 60 - <td><code>{ status: { ne: &quot;👎&quot; } }</code></td> 61 - </tr> 62 - <tr> 63 - <td><code>in</code></td> 64 - <td>In array</td> 65 - <td><code>{ status: { in: [&quot;👍&quot;, &quot;🎉&quot;] } }</code></td> 66 - </tr> 67 - <tr> 68 - <td><code>contains</code></td> 69 - <td>String contains (case-insensitive)</td> 70 - <td><code>{ displayName: { contains: &quot;alice&quot; } }</code></td> 71 - </tr> 72 - <tr> 73 - <td><code>gt</code></td> 74 - <td>Greater than</td> 75 - <td><code>{ createdAt: { gt: &quot;2025-01-01T00:00:00Z&quot; } }</code></td> 76 - </tr> 77 - <tr> 78 - <td><code>lt</code></td> 79 - <td>Less than</td> 80 - <td><code>{ createdAt: { lt: &quot;2025-06-01T00:00:00Z&quot; } }</code></td> 81 - </tr> 82 - <tr> 83 - <td><code>gte</code></td> 84 - <td>Greater than or equal</td> 85 - <td><code>{ position: { gte: 1 } }</code></td> 86 - </tr> 87 - <tr> 88 - <td><code>lte</code></td> 89 - <td>Less than or equal</td> 90 - <td><code>{ position: { lte: 10 } }</code></td> 91 - </tr> 92 - </tbody> 93 - </table> 94 - <h3 id="Multiple-Conditions"><a href="#Multiple-Conditions" class="header-anchor">#</a>Multiple Conditions</h3> 95 - <p>Combine multiple conditions (they're ANDed together):</p> 96 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 97 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 98 - <span class="line"><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> contains</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">alice</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 99 - <span class="line"><span style="color:#8CDB8C"> createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> gt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 100 - <span class="line"><span style="color:#9A9A9A"> })</span><span style="color:#9A9A9A"> {</span></span> 101 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 102 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 103 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 104 - <span class="line"><span style="color:#DEDEDE"> description</span></span> 105 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 106 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 107 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 108 - <span class="line"><span style="color:#9A9A9A">}</span></span> 109 - <span class="line"></span></code></pre> 110 - <h2 id="Sorting"><a href="#Sorting" class="header-anchor">#</a>Sorting</h2> 111 - <p>Use <code>sortBy</code> to order results:</p> 112 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 113 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 114 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 115 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 116 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 117 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 118 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 119 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 120 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 121 - <span class="line"><span style="color:#9A9A9A">}</span></span> 122 - <span class="line"></span></code></pre> 123 - <h3 id="Multi-Field-Sorting"><a href="#Multi-Field-Sorting" class="header-anchor">#</a>Multi-Field Sorting</h3> 124 - <p>Sort by multiple fields (applied in order):</p> 125 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 126 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span></span> 127 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> displayName, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> ASC </span><span style="color:#9A9A9A">}</span></span> 128 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}</span></span> 129 - <span class="line"><span style="color:#9A9A9A"> ])</span><span style="color:#9A9A9A"> {</span></span> 130 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 131 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 132 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 133 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 134 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 135 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 136 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 137 - <span class="line"><span style="color:#9A9A9A">}</span></span> 138 - <span class="line"></span></code></pre> 139 - <h2 id="Pagination"><a href="#Pagination" class="header-anchor">#</a>Pagination</h2> 140 - <h3 id="Forward-Pagination"><a href="#Forward-Pagination" class="header-anchor">#</a>Forward Pagination</h3> 141 - <p>Use <code>first</code> to limit results and <code>after</code> to get the next page:</p> 142 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#6B6B6B;font-style:italic"># First page</span></span> 143 - <span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 144 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 145 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 146 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> status </span><span style="color:#9A9A9A">}</span></span> 147 - <span class="line"><span style="color:#DEDEDE"> cursor</span></span> 148 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 149 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 150 - <span class="line"><span style="color:#DEDEDE"> hasNextPage</span></span> 151 - <span class="line"><span style="color:#DEDEDE"> endCursor</span></span> 152 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 153 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 154 - <span class="line"><span style="color:#9A9A9A">}</span></span> 155 - <span class="line"></span> 156 - <span class="line"><span style="color:#6B6B6B;font-style:italic"># Next page (use endCursor from previous response)</span></span> 157 - <span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 158 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> after</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">cursor_from_previous_page</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 159 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 160 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> status </span><span style="color:#9A9A9A">}</span></span> 161 - <span class="line"><span style="color:#DEDEDE"> cursor</span></span> 162 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 163 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 164 - <span class="line"><span style="color:#DEDEDE"> hasNextPage</span></span> 165 - <span class="line"><span style="color:#DEDEDE"> endCursor</span></span> 166 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 167 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 168 - <span class="line"><span style="color:#9A9A9A">}</span></span> 169 - <span class="line"></span></code></pre> 170 - <h3 id="Backward-Pagination"><a href="#Backward-Pagination" class="header-anchor">#</a>Backward Pagination</h3> 171 - <p>Use <code>last</code> and <code>before</code> to paginate backward:</p> 172 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 173 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">last</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> before</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">some_cursor</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 174 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 175 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> status </span><span style="color:#9A9A9A">}</span></span> 176 - <span class="line"><span style="color:#DEDEDE"> cursor</span></span> 177 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 178 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 179 - <span class="line"><span style="color:#DEDEDE"> hasPreviousPage</span></span> 180 - <span class="line"><span style="color:#DEDEDE"> startCursor</span></span> 181 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 182 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 183 - <span class="line"><span style="color:#9A9A9A">}</span></span> 184 - <span class="line"></span></code></pre> 185 - <h3 id="PageInfo-Fields"><a href="#PageInfo-Fields" class="header-anchor">#</a>PageInfo Fields</h3> 186 - <table> 187 - <thead> 188 - <tr> 189 - <th>Field</th> 190 - <th>Description</th> 191 - </tr> 192 - </thead> 193 - <tbody> 194 - <tr> 195 - <td><code>hasNextPage</code></td> 196 - <td>More items exist after this page</td> 197 - </tr> 198 - <tr> 199 - <td><code>hasPreviousPage</code></td> 200 - <td>More items exist before this page</td> 201 - </tr> 202 - <tr> 203 - <td><code>startCursor</code></td> 204 - <td>Cursor of the first item</td> 205 - </tr> 206 - <tr> 207 - <td><code>endCursor</code></td> 208 - <td>Cursor of the last item</td> 209 - </tr> 210 - </tbody> 211 - </table> 212 - <h2 id="Complete-Example"><a href="#Complete-Example" class="header-anchor">#</a>Complete Example</h2> 213 - <p>Combining filtering, sorting, and pagination:</p> 214 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> GetRecentStatuses</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$pageSize</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> Int</span><span style="color:#9A9A9A">!,</span><span style="color:#DEDEDE"> $cursor</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 215 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 216 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> in</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span><span style="color:#9A9A9A;font-style:italic">"</span><span style="color:#6B6B6B;font-style:italic">👍"</span><span style="color:#DEDEDE">, </span><span style="color:#9A9A9A">"</span><span style="color:#8CDB8C">🎉</span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE">, </span><span style="color:#9A9A9A">"</span><span style="color:#8CDB8C">💙</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">]</span><span style="color:#9A9A9A"> }</span><span style="color:#9A9A9A"> }</span></span> 217 - <span class="line"><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> createdAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}]</span></span> 218 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $pageSize</span></span> 219 - <span class="line"><span style="color:#DEDEDE"> after</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $cursor</span></span> 220 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 221 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 222 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 223 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 224 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 225 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 226 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 227 - <span class="line"><span style="color:#DEDEDE"> cursor</span></span> 228 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 229 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 230 - <span class="line"><span style="color:#DEDEDE"> hasNextPage</span></span> 231 - <span class="line"><span style="color:#DEDEDE"> endCursor</span></span> 232 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 233 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 234 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 235 - <span class="line"><span style="color:#9A9A9A">}</span></span> 236 - <span class="line"></span></code></pre> 237 - <p>Variables:</p> 238 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 239 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">pageSize</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span><span style="color:#9A9A9A">,</span></span> 240 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">cursor</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> null</span></span> 241 - <span class="line"><span style="color:#9A9A9A">}</span></span> 242 - <span class="line"></span></code></pre> 243 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/tutorial"><span class="page-nav-label">Previous</span><span class="page-nav-title">Tutorial</span></a><a class="page-nav-link page-nav-next" href="/guides/joins"><span class="page-nav-label">Next</span><span class="page-nav-title">Joins</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Relay-Connections" href="#Relay-Connections">Relay Connections</a><a class="minimap-item" data-target-id="Filtering" href="#Filtering">Filtering</a><a class="minimap-item minimap-item-sub" data-target-id="Filter-Operators" href="#Filter-Operators">Filter Operators</a><a class="minimap-item minimap-item-sub" data-target-id="Multiple-Conditions" href="#Multiple-Conditions">Multiple Conditions</a><a class="minimap-item" data-target-id="Sorting" href="#Sorting">Sorting</a><a class="minimap-item minimap-item-sub" data-target-id="Multi-Field-Sorting" href="#Multi-Field-Sorting">Multi-Field Sorting</a><a class="minimap-item" data-target-id="Pagination" href="#Pagination">Pagination</a><a class="minimap-item minimap-item-sub" data-target-id="Forward-Pagination" href="#Forward-Pagination">Forward Pagination</a><a class="minimap-item minimap-item-sub" data-target-id="Backward-Pagination" href="#Backward-Pagination">Backward Pagination</a><a class="minimap-item minimap-item-sub" data-target-id="PageInfo-Fields" href="#PageInfo-Fields">PageInfo Fields</a><a class="minimap-item" data-target-id="Complete-Example" href="#Complete-Example">Complete Example</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-128
www/priv/guides/troubleshooting/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Troubleshooting</title><meta content="quickslice - Troubleshooting" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a class="active" href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Troubleshooting">Troubleshooting</h1> 3 - <p>Common issues and how to resolve them.</p> 4 - <h2 id="OAuth-Errors"><a href="#OAuth-Errors" class="header-anchor">#</a>OAuth Errors</h2> 5 - <h3 id="Invalid-redirect-URI"><a href="#Invalid-redirect-URI" class="header-anchor">#</a>&quot;Invalid redirect URI&quot;</h3> 6 - <p>The redirect URI in your OAuth request doesn't match any registered URI.</p> 7 - <p><strong>Fix:</strong> Ensure the redirect URI in your app exactly matches one in Settings &gt; OAuth Clients. URIs must match protocol, host, port, and path.</p> 8 - <h3 id="Invalid-client-ID"><a href="#Invalid-client-ID" class="header-anchor">#</a>&quot;Invalid client ID&quot;</h3> 9 - <p>The client ID doesn't exist or was deleted.</p> 10 - <p><strong>Fix:</strong> Verify the client ID in Settings &gt; OAuth Clients. If it was deleted, register a new client.</p> 11 - <h3 id="PKCE-code-verifier-mismatch"><a href="#PKCE-code-verifier-mismatch" class="header-anchor">#</a>&quot;PKCE code verifier mismatch&quot;</h3> 12 - <p>The code verifier sent during token exchange doesn't match the code challenge from authorization.</p> 13 - <p><strong>Fix:</strong> The code verifier wasn't stored correctly between authorization redirect and callback. If using the SDK, call <code>handleRedirectCallback()</code> in the same browser session that initiated login.</p> 14 - <h3 id="DPoP-proof-invalid"><a href="#DPoP-proof-invalid" class="header-anchor">#</a>&quot;DPoP proof invalid&quot;</h3> 15 - <p>The DPoP proof header is missing, malformed, or signed with the wrong key.</p> 16 - <p><strong>Fix:</strong> If using the SDK, this is handled automatically. If implementing manually, ensure:</p> 17 - <ul> 18 - <li>The DPoP header contains a valid JWT</li> 19 - <li>The JWT is signed with the same key used during token exchange</li> 20 - <li>The <code>htm</code> and <code>htu</code> claims match the request method and URL</li> 21 - </ul> 22 - <h2 id="GraphQL-Errors"><a href="#GraphQL-Errors" class="header-anchor">#</a>GraphQL Errors</h2> 23 - <h3 id="Cannot-query-field-X-on-type-Y"><a href="#Cannot-query-field-X-on-type-Y" class="header-anchor">#</a>&quot;Cannot query field X on type Y&quot;</h3> 24 - <p>The field doesn't exist on the queried type.</p> 25 - <p><strong>Fix:</strong> Check your query against the schema in GraphiQL. Common causes:</p> 26 - <ul> 27 - <li>Typo in field name</li> 28 - <li>Field exists on a different type (use inline fragments for unions)</li> 29 - <li>Lexicon wasn't imported yet</li> 30 - </ul> 31 - <h3 id="Variable-X-of-type-Y-used-in-position-expecting-Z"><a href="#Variable-X-of-type-Y-used-in-position-expecting-Z" class="header-anchor">#</a>&quot;Variable $X of type Y used in position expecting Z&quot;</h3> 32 - <p>Type mismatch between your variable declaration and how it's used.</p> 33 - <p><strong>Fix:</strong> Check variable types in your query definition. Common issues:</p> 34 - <ul> 35 - <li>Using <code>String</code> instead of <code>DateTime</code> for date fields</li> 36 - <li>Missing <code>!</code> for required variables</li> 37 - <li>Using wrong scalar type</li> 38 - </ul> 39 - <h3 id="Record-not-found"><a href="#Record-not-found" class="header-anchor">#</a>&quot;Record not found&quot;</h3> 40 - <p>The record you're trying to update or delete doesn't exist.</p> 41 - <p><strong>Fix:</strong> Verify the record key (rkey). Query for the record first to confirm it exists.</p> 42 - <h2 id="Jetstream-Issues"><a href="#Jetstream-Issues" class="header-anchor">#</a>Jetstream Issues</h2> 43 - <h3 id="Records-not-appearing-after-creation"><a href="#Records-not-appearing-after-creation" class="header-anchor">#</a>Records not appearing after creation</h3> 44 - <p>Records created via mutation should appear immediately due to optimistic indexing. If they don't:</p> 45 - <p><strong>Check:</strong></p> 46 - <ol> 47 - <li>Was the mutation successful? Check the response for errors.</li> 48 - <li>Is the record in the user's PDS? Use <code>goat repo get</code> to verify.</li> 49 - <li>Is Jetstream connected? Check the logs for connection errors.</li> 50 - </ol> 51 - <h3 id="Old-records-missing"><a href="#Old-records-missing" class="header-anchor">#</a>Old records missing</h3> 52 - <p>Records created before you deployed Quickslice won't appear until backfilled.</p> 53 - <p><strong>Fix:</strong> Trigger a backfill from the admin UI or wait for the scheduled backfill to complete.</p> 54 - <h3 id="Backfill-stuck-or-slow"><a href="#Backfill-stuck-or-slow" class="header-anchor">#</a>Backfill stuck or slow</h3> 55 - <p><strong>Check:</strong></p> 56 - <ol> 57 - <li>Memory usage - backfill is memory-intensive. See <a href="/guides/deployment">Deployment Guide</a> for tuning.</li> 58 - <li>Network connectivity to PDS endpoints</li> 59 - <li>Logs for specific PDS errors</li> 60 - </ol> 61 - <h2 id="Database-Issues"><a href="#Database-Issues" class="header-anchor">#</a>Database Issues</h2> 62 - <h3 id="Database-is-locked"><a href="#Database-is-locked" class="header-anchor">#</a>&quot;Database is locked&quot;</h3> 63 - <p>SQLite can't acquire a write lock. Caused by long-running queries or concurrent access.</p> 64 - <p><strong>Fix:</strong></p> 65 - <ul> 66 - <li>Ensure only one Quickslice instance writes to the database</li> 67 - <li>Check for stuck queries in logs</li> 68 - <li>Restart the service if needed</li> 69 - </ul> 70 - <h3 id="Disk-space-full"><a href="#Disk-space-full" class="header-anchor">#</a>Disk space full</h3> 71 - <p>SQLite needs space for WAL files and vacuuming.</p> 72 - <p><strong>Fix:</strong> Expand your volume. See your hosting platform's documentation.</p> 73 - <h2 id="Debugging-Tips"><a href="#Debugging-Tips" class="header-anchor">#</a>Debugging Tips</h2> 74 - <h3 id="Check-if-records-are-being-indexed"><a href="#Check-if-records-are-being-indexed" class="header-anchor">#</a>Check if records are being indexed</h3> 75 - <p>Query for recent records:</p> 76 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 77 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 5</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> indexedAt, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 78 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 79 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 80 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 81 - <span class="line"><span style="color:#DEDEDE"> indexedAt</span></span> 82 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 83 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 84 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 85 - <span class="line"><span style="color:#9A9A9A">}</span></span> 86 - <span class="line"></span></code></pre> 87 - <h3 id="Verify-OAuth-is-working"><a href="#Verify-OAuth-is-working" class="header-anchor">#</a>Verify OAuth is working</h3> 88 - <p>Query the viewer:</p> 89 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 90 - <span class="line"><span style="color:#DEDEDE"> viewer </span><span style="color:#9A9A9A">{</span></span> 91 - <span class="line"><span style="color:#DEDEDE"> did</span></span> 92 - <span class="line"><span style="color:#DEDEDE"> handle</span></span> 93 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 94 - <span class="line"><span style="color:#9A9A9A">}</span></span> 95 - <span class="line"></span></code></pre> 96 - <p>Returns <code>null</code> if not authenticated. Returns user info if authenticated.</p> 97 - <h3 id="Inspect-the-GraphQL-schema"><a href="#Inspect-the-GraphQL-schema" class="header-anchor">#</a>Inspect the GraphQL schema</h3> 98 - <p>Use GraphiQL at <code>/graphiql</code> to explore types, queries, and mutations. The Docs panel shows all fields and types.</p> 99 - <h3 id="Check-Lexicon-registration"><a href="#Check-Lexicon-registration" class="header-anchor">#</a>Check Lexicon registration</h3> 100 - <p>Use the MCP endpoint or admin UI to list registered Lexicons:</p> 101 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 102 - <span class="line"><span style="color:#DEDEDE"> __schema </span><span style="color:#9A9A9A">{</span></span> 103 - <span class="line"><span style="color:#DEDEDE"> types </span><span style="color:#9A9A9A">{</span></span> 104 - <span class="line"><span style="color:#DEDEDE"> name</span></span> 105 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 106 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 107 - <span class="line"><span style="color:#9A9A9A">}</span></span> 108 - <span class="line"></span></code></pre> 109 - <p>Look for types matching your Lexicon NSIDs (e.g., <code>XyzStatusphereStatus</code>).</p> 110 - <h2 id="FAQ"><a href="#FAQ" class="header-anchor">#</a>FAQ</h2> 111 - <h3 id="Why-arent-my-records-showing-up"><a href="#Why-arent-my-records-showing-up" class="header-anchor">#</a>&quot;Why aren't my records showing up?&quot;</h3> 112 - <ol> 113 - <li><strong>Just created?</strong> Should appear immediately. Check mutation response for errors.</li> 114 - <li><strong>Created before deployment?</strong> Needs backfill. Trigger from admin UI.</li> 115 - <li><strong>Different Lexicon?</strong> Ensure the Lexicon is registered in your instance.</li> 116 - </ol> 117 - <h3 id="Why-is-my-mutation-failing"><a href="#Why-is-my-mutation-failing" class="header-anchor">#</a>&quot;Why is my mutation failing?&quot;</h3> 118 - <ol> 119 - <li><strong>401 Unauthorized?</strong> Token expired or invalid. Re-authenticate.</li> 120 - <li><strong>403 Forbidden?</strong> Trying to modify another user's record.</li> 121 - <li><strong>400 Bad Request?</strong> Check input against Lexicon schema. Required fields missing?</li> 122 - </ol> 123 - <h3 id="How-do-I-check-what-Lexicons-are-loaded"><a href="#How-do-I-check-what-Lexicons-are-loaded" class="header-anchor">#</a>&quot;How do I check what Lexicons are loaded?&quot;</h3> 124 - <p>Go to Settings in the admin UI, or query via MCP:</p> 125 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">claude</span><span style="color:#8CDB8C"> mcp</span><span style="color:#8CDB8C"> add</span><span style="color:#8CDB8C"> --transport</span><span style="color:#8CDB8C"> http</span><span style="color:#8CDB8C"> quickslice</span><span style="color:#8CDB8C"> https://yourapp.slices.network/mcp</span></span> 126 - <span class="line"><span style="color:#6B6B6B;font-style:italic"># Then ask: "What lexicons are registered?"</span></span> 127 - <span class="line"></span></code></pre> 128 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/guides/patterns"><span class="page-nav-label">Previous</span><span class="page-nav-title">Patterns</span></a><a class="page-nav-link page-nav-next" href="/reference/aggregations"><span class="page-nav-label">Next</span><span class="page-nav-title">Aggregations</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="OAuth-Errors" href="#OAuth-Errors">OAuth Errors</a><a class="minimap-item minimap-item-sub" data-target-id="Invalid-redirect-URI" href="#Invalid-redirect-URI">&quot;Invalid redirect URI&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="Invalid-client-ID" href="#Invalid-client-ID">&quot;Invalid client ID&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="PKCE-code-verifier-mismatch" href="#PKCE-code-verifier-mismatch">&quot;PKCE code verifier mismatch&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="DPoP-proof-invalid" href="#DPoP-proof-invalid">&quot;DPoP proof invalid&quot;</a><a class="minimap-item" data-target-id="GraphQL-Errors" href="#GraphQL-Errors">GraphQL Errors</a><a class="minimap-item minimap-item-sub" data-target-id="Cannot-query-field-X-on-type-Y" href="#Cannot-query-field-X-on-type-Y">&quot;Cannot query field X on type Y&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="Variable-X-of-type-Y-used-in-position-expecting-Z" href="#Variable-X-of-type-Y-used-in-position-expecting-Z">&quot;Variable $X of type Y used in position expecting Z&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="Record-not-found" href="#Record-not-found">&quot;Record not found&quot;</a><a class="minimap-item" data-target-id="Jetstream-Issues" href="#Jetstream-Issues">Jetstream Issues</a><a class="minimap-item minimap-item-sub" data-target-id="Records-not-appearing-after-creation" href="#Records-not-appearing-after-creation">Records not appearing after creation</a><a class="minimap-item minimap-item-sub" data-target-id="Old-records-missing" href="#Old-records-missing">Old records missing</a><a class="minimap-item minimap-item-sub" data-target-id="Backfill-stuck-or-slow" href="#Backfill-stuck-or-slow">Backfill stuck or slow</a><a class="minimap-item" data-target-id="Database-Issues" href="#Database-Issues">Database Issues</a><a class="minimap-item minimap-item-sub" data-target-id="Database-is-locked" href="#Database-is-locked">&quot;Database is locked&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="Disk-space-full" href="#Disk-space-full">Disk space full</a><a class="minimap-item" data-target-id="Debugging-Tips" href="#Debugging-Tips">Debugging Tips</a><a class="minimap-item minimap-item-sub" data-target-id="Check-if-records-are-being-indexed" href="#Check-if-records-are-being-indexed">Check if records are being indexed</a><a class="minimap-item minimap-item-sub" data-target-id="Verify-OAuth-is-working" href="#Verify-OAuth-is-working">Verify OAuth is working</a><a class="minimap-item minimap-item-sub" data-target-id="Inspect-the-GraphQL-schema" href="#Inspect-the-GraphQL-schema">Inspect the GraphQL schema</a><a class="minimap-item minimap-item-sub" data-target-id="Check-Lexicon-registration" href="#Check-Lexicon-registration">Check Lexicon registration</a><a class="minimap-item" data-target-id="FAQ" href="#FAQ">FAQ</a><a class="minimap-item minimap-item-sub" data-target-id="Why-arent-my-records-showing-up" href="#Why-arent-my-records-showing-up">&quot;Why aren&#39;t my records showing up?&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="Why-is-my-mutation-failing" href="#Why-is-my-mutation-failing">&quot;Why is my mutation failing?&quot;</a><a class="minimap-item minimap-item-sub" data-target-id="How-do-I-check-what-Lexicons-are-loaded" href="#How-do-I-check-what-Lexicons-are-loaded">&quot;How do I check what Lexicons are loaded?&quot;</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-37
www/priv/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Introduction</title><meta content="quickslice - Introduction" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a class="active" href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Quickslice">Quickslice</h1> 3 - <blockquote> 4 - <p><strong>Warning</strong> 5 - This project is in early development. APIs may change without notice.</p> 6 - </blockquote> 7 - <p>Quickslice is a quick way to spin up an <a href="https://atproto.com/guides/glossary#app-view">AppView</a> for AT Protocol applications. Import your Lexicon schemas and you get a GraphQL API with OAuth authentication, real-time sync from the network, and joins across record types without setting up a database or writing any backend code.</p> 8 - <h2 id="The-Problem"><a href="#The-Problem" class="header-anchor">#</a>The Problem</h2> 9 - <p>Building an AppView from scratch means writing a lot of infrastructure code:</p> 10 - <ul> 11 - <li>Jetstream connection and event handling</li> 12 - <li>Record ingestion and validation</li> 13 - <li>Database schema design and normalization</li> 14 - <li>XRPC API endpoints for querying and writing data</li> 15 - <li>OAuth session management and PDS writes</li> 16 - <li>Efficient batching when resolving related records</li> 17 - </ul> 18 - <p>This adds up before you write any application logic.</p> 19 - <h2 id="What-Quickslice-Does"><a href="#What-Quickslice-Does" class="header-anchor">#</a>What Quickslice Does</h2> 20 - <p>Quickslice handles all of that automatically:</p> 21 - <ul> 22 - <li><strong>Connects to Jetstream</strong> and tracks the record types defined in your Lexicons</li> 23 - <li><strong>Indexes</strong> relevant records into a database (SQLite or Postgres)</li> 24 - <li><strong>Generates GraphQL</strong> queries, mutations, and subscriptions from your Lexicon definitions</li> 25 - <li><strong>Handles OAuth</strong> and writes records back to the user's PDS</li> 26 - <li><strong>Enables joins</strong> by DID, URI, or strong reference, so you can query a status and its author's profile in one request</li> 27 - </ul> 28 - <h2 id="When-to-Use-It"><a href="#When-to-Use-It" class="header-anchor">#</a>When to Use It</h2> 29 - <ul> 30 - <li>You want to skip the AppView boilerplate</li> 31 - <li>You want to prototype Lexicon data structures quickly</li> 32 - <li>You want OAuth handled for you</li> 33 - <li>You want to ship your AppView already</li> 34 - </ul> 35 - <h2 id="Next-Steps"><a href="#Next-Steps" class="header-anchor">#</a>Next Steps</h2> 36 - <p><a href="/tutorial">Build Statusphere with Quickslice</a>: A hands-on tutorial showing what Quickslice handles for you</p> 37 - </div><nav class="page-nav"><div class="page-nav-link page-nav-empty"></div><a class="page-nav-link page-nav-next" href="/tutorial"><span class="page-nav-label">Next</span><span class="page-nav-title">Tutorial</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="The-Problem" href="#The-Problem">The Problem</a><a class="minimap-item" data-target-id="What-Quickslice-Does" href="#What-Quickslice-Does">What Quickslice Does</a><a class="minimap-item" data-target-id="When-to-Use-It" href="#When-to-Use-It">When to Use It</a><a class="minimap-item" data-target-id="Next-Steps" href="#Next-Steps">Next Steps</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-78
www/priv/minimap.js
··· 1 - (function() { 2 - 'use strict'; 3 - 4 - function init() { 5 - const content = document.querySelector('.content'); 6 - const minimap = document.querySelector('.minimap'); 7 - if (!content || !minimap) return; 8 - 9 - // Get the inner div that holds the actual content 10 - const contentInner = content.querySelector(':scope > div'); 11 - if (!contentInner) return; 12 - 13 - // Build items array from server-rendered minimap links 14 - const items = []; 15 - minimap.querySelectorAll('.minimap-item').forEach(link => { 16 - const targetId = link.dataset.targetId; 17 - const target = document.getElementById(targetId); 18 - if (target) { 19 - items.push({ element: link, target: target }); 20 - } 21 - }); 22 - 23 - if (items.length === 0) return; 24 - 25 - // Click handler for smooth scroll 26 - minimap.addEventListener('click', function(e) { 27 - const link = e.target.closest('.minimap-item'); 28 - if (!link) return; 29 - 30 - e.preventDefault(); 31 - const targetId = link.dataset.targetId; 32 - const target = document.getElementById(targetId); 33 - if (target) { 34 - const targetRect = target.getBoundingClientRect(); 35 - const contentRect = content.getBoundingClientRect(); 36 - const scrollTop = content.scrollTop + targetRect.top - contentRect.top - 230; 37 - content.scrollTo({ top: scrollTop, behavior: 'smooth' }); 38 - history.pushState(null, '', '#' + targetId); 39 - } 40 - }); 41 - 42 - // Scroll tracking 43 - let currentActive = null; 44 - 45 - function checkScrollPosition() { 46 - for (let i = items.length - 1; i >= 0; i--) { 47 - const rect = items[i].target.getBoundingClientRect(); 48 - if (rect.top < window.innerHeight * 0.4) { 49 - if (currentActive !== items[i]) { 50 - if (currentActive) { 51 - currentActive.element.classList.remove('minimap-item-active'); 52 - } 53 - items[i].element.classList.add('minimap-item-active'); 54 - currentActive = items[i]; 55 - } 56 - return; 57 - } 58 - } 59 - // If nothing found, activate first item 60 - if (!currentActive && items.length > 0) { 61 - items[0].element.classList.add('minimap-item-active'); 62 - currentActive = items[0]; 63 - } 64 - } 65 - 66 - // Run initial check and on scroll 67 - checkScrollPosition(); 68 - content.addEventListener('scroll', function() { 69 - requestAnimationFrame(checkScrollPosition); 70 - }); 71 - } 72 - 73 - if (document.readyState === 'loading') { 74 - document.addEventListener('DOMContentLoaded', init); 75 - } else { 76 - init(); 77 - } 78 - })();
-28
www/priv/mobile-nav.js
··· 1 - // Mobile navigation toggle 2 - (() => { 3 - const toggleSidebar = () => { 4 - document.querySelector('.sidebar')?.classList.toggle('open'); 5 - document.querySelector('.sidebar-backdrop')?.classList.toggle('open'); 6 - }; 7 - 8 - const closeSidebar = () => { 9 - document.querySelector('.sidebar')?.classList.remove('open'); 10 - document.querySelector('.sidebar-backdrop')?.classList.remove('open'); 11 - }; 12 - 13 - const init = () => { 14 - document.querySelector('.menu-toggle')?.addEventListener('click', toggleSidebar); 15 - document.querySelector('.sidebar-backdrop')?.addEventListener('click', toggleSidebar); 16 - 17 - // Close sidebar when clicking nav links on mobile 18 - document.querySelectorAll('.sidebar a').forEach(link => { 19 - link.addEventListener('click', () => { 20 - if (window.innerWidth < 768) closeSidebar(); 21 - }); 22 - }); 23 - }; 24 - 25 - document.readyState === 'loading' 26 - ? document.addEventListener('DOMContentLoaded', init) 27 - : init(); 28 - })();
www/priv/og/default.webp

This is a binary file and will not be displayed.

-109
www/priv/quickslice-theme.json
··· 1 - { 2 - "name": "quickslice", 3 - "displayName": "Quickslice", 4 - "type": "dark", 5 - "colors": { 6 - "editor.background": "#1c1c1c", 7 - "editor.foreground": "#dedede" 8 - }, 9 - "tokenColors": [ 10 - { 11 - "scope": ["comment", "punctuation.definition.comment"], 12 - "settings": { 13 - "foreground": "#6b6b6b", 14 - "fontStyle": "italic" 15 - } 16 - }, 17 - { 18 - "scope": ["string", "string.quoted", "string.template"], 19 - "settings": { 20 - "foreground": "#8CDB8C" 21 - } 22 - }, 23 - { 24 - "scope": [ 25 - "keyword", 26 - "keyword.control", 27 - "keyword.operator.expression", 28 - "storage.type", 29 - "storage.modifier" 30 - ], 31 - "settings": { 32 - "foreground": "#F07068" 33 - } 34 - }, 35 - { 36 - "scope": [ 37 - "entity.name.type", 38 - "entity.name.class", 39 - "support.type", 40 - "support.class", 41 - "entity.name.tag" 42 - ], 43 - "settings": { 44 - "foreground": "#5EEBD8" 45 - } 46 - }, 47 - { 48 - "scope": ["variable", "variable.parameter", "variable.other"], 49 - "settings": { 50 - "foreground": "#dedede" 51 - } 52 - }, 53 - { 54 - "scope": [ 55 - "entity.name.function", 56 - "support.function", 57 - "meta.function-call" 58 - ], 59 - "settings": { 60 - "foreground": "#5EEBD8" 61 - } 62 - }, 63 - { 64 - "scope": [ 65 - "entity.other.attribute-name", 66 - "support.type.property-name", 67 - "meta.object-literal.key" 68 - ], 69 - "settings": { 70 - "foreground": "#7EB3D8" 71 - } 72 - }, 73 - { 74 - "scope": ["constant.numeric", "constant.language"], 75 - "settings": { 76 - "foreground": "#5EEBD8" 77 - } 78 - }, 79 - { 80 - "scope": ["punctuation", "meta.brace", "meta.delimiter"], 81 - "settings": { 82 - "foreground": "#9a9a9a" 83 - } 84 - }, 85 - { 86 - "scope": [ 87 - "entity.other.attribute-name.directive", 88 - "punctuation.definition.directive", 89 - "keyword.other.directive" 90 - ], 91 - "settings": { 92 - "foreground": "#7EB3D8", 93 - "fontStyle": "italic" 94 - } 95 - }, 96 - { 97 - "scope": ["constant.language.boolean"], 98 - "settings": { 99 - "foreground": "#F07068" 100 - } 101 - }, 102 - { 103 - "scope": ["keyword.operator"], 104 - "settings": { 105 - "foreground": "#9a9a9a" 106 - } 107 - } 108 - ] 109 - }
-120
www/priv/reference/aggregations/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Aggregations</title><meta content="quickslice - Aggregations" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a class="active" href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Aggregations">Aggregations</h1> 3 - <p>Every record type has an aggregation query: <code>{collectionName}Aggregated</code>. For example, aggregate <code>fm.teal.alpha.feed.play</code> records with <code>fmTealAlphaFeedPlayAggregated</code>.</p> 4 - <p>Aggregation queries are public; no authentication required.</p> 5 - <h2 id="Basic-Aggregation"><a href="#Basic-Aggregation" class="header-anchor">#</a>Basic Aggregation</h2> 6 - <p>Group by a field to count occurrences:</p> 7 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 8 - <span class="line"><span style="color:#DEDEDE"> fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">groupBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> artists </span><span style="color:#9A9A9A">}])</span><span style="color:#9A9A9A"> {</span></span> 9 - <span class="line"><span style="color:#DEDEDE"> artists</span></span> 10 - <span class="line"><span style="color:#DEDEDE"> count</span></span> 11 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 12 - <span class="line"><span style="color:#9A9A9A">}</span></span> 13 - <span class="line"></span></code></pre> 14 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 15 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 16 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span></span> 17 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artists</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artistName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Radiohead</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }],</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 142</span><span style="color:#9A9A9A"> },</span></span> 18 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artists</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artistName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Boards of Canada</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }],</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 87</span><span style="color:#9A9A9A"> }</span></span> 19 - <span class="line"><span style="color:#9A9A9A"> ]</span></span> 20 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 21 - <span class="line"><span style="color:#9A9A9A">}</span></span> 22 - <span class="line"></span></code></pre> 23 - <h2 id="Filtering--Sorting"><a href="#Filtering--Sorting" class="header-anchor">#</a>Filtering &amp; Sorting</h2> 24 - <p>Use <code>where</code> to filter records, <code>orderBy</code> to sort by count, and <code>limit</code> to cap results.</p> 25 - <p>Get a user's top 10 artists for 2025:</p> 26 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 27 - <span class="line"><span style="color:#DEDEDE"> fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">(</span></span> 28 - <span class="line"><span style="color:#DEDEDE"> groupBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> artists </span><span style="color:#9A9A9A">}]</span></span> 29 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 30 - <span class="line"><span style="color:#8CDB8C"> actorHandle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">baileytownsend.dev</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 31 - <span class="line"><span style="color:#8CDB8C"> playedTime</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> gte</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE">, </span><span style="color:#8CDB8C">lt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2026-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 32 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 33 - <span class="line"><span style="color:#DEDEDE"> orderBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> count</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}</span></span> 34 - <span class="line"><span style="color:#DEDEDE"> limit</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span></span> 35 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 36 - <span class="line"><span style="color:#DEDEDE"> artists</span></span> 37 - <span class="line"><span style="color:#DEDEDE"> count</span></span> 38 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 39 - <span class="line"><span style="color:#9A9A9A">}</span></span> 40 - <span class="line"></span></code></pre> 41 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 42 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 43 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span></span> 44 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artists</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artistName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Radiohead</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }],</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 142</span><span style="color:#9A9A9A"> },</span></span> 45 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artists</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artistName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Boards of Canada</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }],</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 87</span><span style="color:#9A9A9A"> }</span></span> 46 - <span class="line"><span style="color:#9A9A9A"> ]</span></span> 47 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 48 - <span class="line"><span style="color:#9A9A9A">}</span></span> 49 - <span class="line"></span></code></pre> 50 - <h2 id="Multiple-Fields"><a href="#Multiple-Fields" class="header-anchor">#</a>Multiple Fields</h2> 51 - <p>Group by multiple fields. Get top tracks with their artists:</p> 52 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 53 - <span class="line"><span style="color:#DEDEDE"> fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">(</span></span> 54 - <span class="line"><span style="color:#DEDEDE"> groupBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> trackName </span><span style="color:#9A9A9A">}</span><span style="color:#DEDEDE">, </span><span style="color:#9A9A9A">{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> artists </span><span style="color:#9A9A9A">}]</span></span> 55 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 56 - <span class="line"><span style="color:#8CDB8C"> actorHandle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">baileytownsend.dev</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 57 - <span class="line"><span style="color:#8CDB8C"> playedTime</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> gte</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE">, </span><span style="color:#8CDB8C">lt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2026-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 58 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 59 - <span class="line"><span style="color:#DEDEDE"> orderBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> count</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}</span></span> 60 - <span class="line"><span style="color:#DEDEDE"> limit</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span></span> 61 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 62 - <span class="line"><span style="color:#DEDEDE"> trackName</span></span> 63 - <span class="line"><span style="color:#DEDEDE"> artists</span></span> 64 - <span class="line"><span style="color:#DEDEDE"> count</span></span> 65 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 66 - <span class="line"><span style="color:#9A9A9A">}</span></span> 67 - <span class="line"></span></code></pre> 68 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 69 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 70 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span></span> 71 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">trackName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Everything In Its Right Place</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artists</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artistName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Radiohead</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }],</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 23</span><span style="color:#9A9A9A"> },</span></span> 72 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">trackName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Roygbiv</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artists</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">artistName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Boards of Canada</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }],</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 18</span><span style="color:#9A9A9A"> }</span></span> 73 - <span class="line"><span style="color:#9A9A9A"> ]</span></span> 74 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 75 - <span class="line"><span style="color:#9A9A9A">}</span></span> 76 - <span class="line"></span></code></pre> 77 - <h2 id="Date-Truncation"><a href="#Date-Truncation" class="header-anchor">#</a>Date Truncation</h2> 78 - <p>Group datetime fields by time intervals: <code>HOUR</code>, <code>DAY</code>, <code>WEEK</code>, or <code>MONTH</code>.</p> 79 - <p>Get plays per month:</p> 80 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 81 - <span class="line"><span style="color:#DEDEDE"> fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">(</span></span> 82 - <span class="line"><span style="color:#DEDEDE"> groupBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> playedTime, </span><span style="color:#8CDB8C">interval</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> MONTH </span><span style="color:#9A9A9A">}]</span></span> 83 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 84 - <span class="line"><span style="color:#8CDB8C"> actorHandle</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">baileytownsend.dev</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 85 - <span class="line"><span style="color:#8CDB8C"> playedTime</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> gte</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE">, </span><span style="color:#8CDB8C">lt</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2026-01-01T00:00:00Z</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 86 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 87 - <span class="line"><span style="color:#DEDEDE"> orderBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> count</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}</span></span> 88 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 89 - <span class="line"><span style="color:#DEDEDE"> playedTime</span></span> 90 - <span class="line"><span style="color:#DEDEDE"> count</span></span> 91 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 92 - <span class="line"><span style="color:#9A9A9A">}</span></span> 93 - <span class="line"></span></code></pre> 94 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 95 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 96 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">fmTealAlphaFeedPlayAggregated</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span></span> 97 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">playedTime</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-03-01</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 847</span><span style="color:#9A9A9A"> },</span></span> 98 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">playedTime</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-01</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 623</span><span style="color:#9A9A9A"> },</span></span> 99 - <span class="line"><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">playedTime</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-02-01</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">count</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 598</span><span style="color:#9A9A9A"> }</span></span> 100 - <span class="line"><span style="color:#9A9A9A"> ]</span></span> 101 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 102 - <span class="line"><span style="color:#9A9A9A">}</span></span> 103 - <span class="line"></span></code></pre> 104 - <h2 id="Reference"><a href="#Reference" class="header-anchor">#</a>Reference</h2> 105 - <h3 id="Query-Structure"><a href="#Query-Structure" class="header-anchor">#</a>Query Structure</h3> 106 - <ul> 107 - <li><code>{collectionName}Aggregated</code> - Aggregation query for any record type</li> 108 - <li><code>groupBy</code> (required) - Array of fields to group by, with optional <code>interval</code> for datetime fields</li> 109 - <li><code>where</code> (optional) - Filter conditions</li> 110 - <li><code>orderBy</code> (optional) - Sort by <code>count</code> (<code>ASC</code> or <code>DESC</code>)</li> 111 - <li><code>limit</code> (optional) - Maximum groups to return (default: 100)</li> 112 - </ul> 113 - <h3 id="Available-Columns"><a href="#Available-Columns" class="header-anchor">#</a>Available Columns</h3> 114 - <p>Beyond record fields, group by: <code>uri</code>, <code>cid</code>, <code>did</code>, <code>collection</code>, <code>indexedAt</code>, <code>actorHandle</code></p> 115 - <h3 id="Validation"><a href="#Validation" class="header-anchor">#</a>Validation</h3> 116 - <ul> 117 - <li>Date intervals can only be applied to datetime fields</li> 118 - <li>Maximum 5 groupBy fields per query</li> 119 - </ul> 120 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/guides/troubleshooting"><span class="page-nav-label">Previous</span><span class="page-nav-title">Troubleshooting</span></a><a class="page-nav-link page-nav-next" href="/reference/subscriptions"><span class="page-nav-label">Next</span><span class="page-nav-title">Subscriptions</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Basic-Aggregation" href="#Basic-Aggregation">Basic Aggregation</a><a class="minimap-item" data-target-id="Filtering--Sorting" href="#Filtering--Sorting">Filtering &amp; Sorting</a><a class="minimap-item" data-target-id="Multiple-Fields" href="#Multiple-Fields">Multiple Fields</a><a class="minimap-item" data-target-id="Date-Truncation" href="#Date-Truncation">Date Truncation</a><a class="minimap-item" data-target-id="Reference" href="#Reference">Reference</a><a class="minimap-item minimap-item-sub" data-target-id="Query-Structure" href="#Query-Structure">Query Structure</a><a class="minimap-item minimap-item-sub" data-target-id="Available-Columns" href="#Available-Columns">Available Columns</a><a class="minimap-item minimap-item-sub" data-target-id="Validation" href="#Validation">Validation</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-296
www/priv/reference/blobs/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Blobs</title><meta content="quickslice - Blobs" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a class="active" href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Working-with-Blobs">Working with Blobs</h1> 3 - <p>Blobs store binary data like images, videos, and files. Upload separately and reference by CID (Content Identifier).</p> 4 - <h2 id="Upload-Blob"><a href="#Upload-Blob" class="header-anchor">#</a>Upload Blob</h2> 5 - <p>Upload binary data encoded as base64:</p> 6 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 7 - <span class="line"><span style="color:#DEDEDE"> uploadBlob</span><span style="color:#9A9A9A">(</span></span> 8 - <span class="line"><span style="color:#DEDEDE"> data</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAY...</span><span style="color:#9A9A9A">"</span></span> 9 - <span class="line"><span style="color:#DEDEDE"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/png</span><span style="color:#9A9A9A">"</span></span> 10 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 11 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 12 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 13 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 14 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 15 - <span class="line"><span style="color:#9A9A9A">}</span></span> 16 - <span class="line"></span></code></pre> 17 - <p>Response:</p> 18 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 19 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 20 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">uploadBlob</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 21 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">ref</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreiabc123xyz...</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 22 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">mimeType</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/png</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 23 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">size</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 1024</span></span> 24 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 25 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 26 - <span class="line"><span style="color:#9A9A9A">}</span></span> 27 - <span class="line"></span></code></pre> 28 - <h2 id="Blob-Reference"><a href="#Blob-Reference" class="header-anchor">#</a>Blob Reference</h2> 29 - <p>A blob reference contains:</p> 30 - <ul> 31 - <li><code>ref</code>: CID of the blob content</li> 32 - <li><code>mimeType</code>: MIME type (e.g., <code>image/jpeg</code>, <code>image/png</code>)</li> 33 - <li><code>size</code>: Size in bytes</li> 34 - </ul> 35 - <h2 id="Using-Blobs-in-Records"><a href="#Using-Blobs-in-Records" class="header-anchor">#</a>Using Blobs in Records</h2> 36 - <h3 id="Profile-Avatar"><a href="#Profile-Avatar" class="header-anchor">#</a>Profile Avatar</h3> 37 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 38 - <span class="line"><span style="color:#DEDEDE"> updateAppBskyActorProfile</span><span style="color:#9A9A9A">(</span></span> 39 - <span class="line"><span style="color:#DEDEDE"> rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">self</span><span style="color:#9A9A9A">"</span></span> 40 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 41 - <span class="line"><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Alice</span><span style="color:#9A9A9A">"</span></span> 42 - <span class="line"><span style="color:#8CDB8C"> avatar</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 43 - <span class="line"><span style="color:#8CDB8C"> ref</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreiabc123...</span><span style="color:#9A9A9A">"</span></span> 44 - <span class="line"><span style="color:#8CDB8C"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span></span> 45 - <span class="line"><span style="color:#8CDB8C"> size</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 125000</span></span> 46 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 47 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 48 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 49 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 50 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span></span> 51 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 52 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 53 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 54 - <span class="line"><span style="color:#DEDEDE"> url</span></span> 55 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 56 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 57 - <span class="line"><span style="color:#9A9A9A">}</span></span> 58 - <span class="line"></span></code></pre> 59 - <h3 id="Profile-Banner"><a href="#Profile-Banner" class="header-anchor">#</a>Profile Banner</h3> 60 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#9A9A9A"> {</span></span> 61 - <span class="line"><span style="color:#DEDEDE"> updateAppBskyActorProfile</span><span style="color:#9A9A9A">(</span></span> 62 - <span class="line"><span style="color:#DEDEDE"> rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">self</span><span style="color:#9A9A9A">"</span></span> 63 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 64 - <span class="line"><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Alice</span><span style="color:#9A9A9A">"</span></span> 65 - <span class="line"><span style="color:#8CDB8C"> banner</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 66 - <span class="line"><span style="color:#8CDB8C"> ref</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreixyz789...</span><span style="color:#9A9A9A">"</span></span> 67 - <span class="line"><span style="color:#8CDB8C"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span></span> 68 - <span class="line"><span style="color:#8CDB8C"> size</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 450000</span></span> 69 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 70 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 71 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 72 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 73 - <span class="line"><span style="color:#DEDEDE"> banner </span><span style="color:#9A9A9A">{</span></span> 74 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 75 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 76 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 77 - <span class="line"><span style="color:#DEDEDE"> url</span></span> 78 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 79 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 80 - <span class="line"><span style="color:#9A9A9A">}</span></span> 81 - <span class="line"></span></code></pre> 82 - <h2 id="Blob-URLs"><a href="#Blob-URLs" class="header-anchor">#</a>Blob URLs</h2> 83 - <p>Blobs generate CDN URLs automatically. Use the <code>url</code> field with optional presets:</p> 84 - <h3 id="Default-URL"><a href="#Default-URL" class="header-anchor">#</a>Default URL</h3> 85 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 86 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile </span><span style="color:#9A9A9A">{</span></span> 87 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 88 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 89 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span></span> 90 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 91 - <span class="line"><span style="color:#DEDEDE"> url</span></span> 92 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 93 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 94 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 95 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 96 - <span class="line"><span style="color:#9A9A9A">}</span></span> 97 - <span class="line"></span></code></pre> 98 - <p>Returns: <code>https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:.../bafkreiabc123@jpeg</code></p> 99 - <h3 id="Avatar-Preset"><a href="#Avatar-Preset" class="header-anchor">#</a>Avatar Preset</h3> 100 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 101 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile </span><span style="color:#9A9A9A">{</span></span> 102 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 103 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 104 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span></span> 105 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 106 - <span class="line"><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span></span> 107 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 108 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 109 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 110 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 111 - <span class="line"><span style="color:#9A9A9A">}</span></span> 112 - <span class="line"></span></code></pre> 113 - <p>Returns: <code>https://cdn.bsky.app/img/avatar/plain/did:plc:.../bafkreiabc123@jpeg</code></p> 114 - <h3 id="Banner-Preset"><a href="#Banner-Preset" class="header-anchor">#</a>Banner Preset</h3> 115 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#9A9A9A"> {</span></span> 116 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile </span><span style="color:#9A9A9A">{</span></span> 117 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 118 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 119 - <span class="line"><span style="color:#DEDEDE"> banner </span><span style="color:#9A9A9A">{</span></span> 120 - <span class="line"><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">banner</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span></span> 121 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 122 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 123 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 124 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 125 - <span class="line"><span style="color:#9A9A9A">}</span></span> 126 - <span class="line"></span></code></pre> 127 - <p>Returns: <code>https://cdn.bsky.app/img/banner/plain/did:plc:.../bafkreixyz789@jpeg</code></p> 128 - <h2 id="Available-Presets"><a href="#Available-Presets" class="header-anchor">#</a>Available Presets</h2> 129 - <ul> 130 - <li><code>avatar</code> - Optimized for profile avatars (square, small)</li> 131 - <li><code>banner</code> - Optimized for profile banners (wide, medium)</li> 132 - <li><code>feed_thumbnail</code> - Thumbnails in feed view</li> 133 - <li><code>feed_fullsize</code> - Full size images in feed (default)</li> 134 - </ul> 135 - <h2 id="Complete-Example-Update-Profile-with-Images"><a href="#Complete-Example-Update-Profile-with-Images" class="header-anchor">#</a>Complete Example: Update Profile with Images</h2> 136 - <h3 id="Step-1-Upload-Avatar"><a href="#Step-1-Upload-Avatar" class="header-anchor">#</a>Step 1: Upload Avatar</h3> 137 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#5EEBD8"> UploadAvatar</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$avatarData</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 138 - <span class="line"><span style="color:#DEDEDE"> uploadBlob</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">data</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $avatarData</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 139 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 140 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 141 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 142 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 143 - <span class="line"><span style="color:#9A9A9A">}</span></span> 144 - <span class="line"></span></code></pre> 145 - <p>Variables:</p> 146 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 147 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">avatarData</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">base64EncodedJpegData...</span><span style="color:#9A9A9A">"</span></span> 148 - <span class="line"><span style="color:#9A9A9A">}</span></span> 149 - <span class="line"></span></code></pre> 150 - <p>Response:</p> 151 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 152 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 153 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">uploadBlob</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 154 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">ref</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreiabc123avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 155 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">mimeType</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 156 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">size</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 125000</span></span> 157 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 158 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 159 - <span class="line"><span style="color:#9A9A9A">}</span></span> 160 - <span class="line"></span></code></pre> 161 - <h3 id="Step-2-Upload-Banner"><a href="#Step-2-Upload-Banner" class="header-anchor">#</a>Step 2: Upload Banner</h3> 162 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#5EEBD8"> UploadBanner</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$bannerData</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 163 - <span class="line"><span style="color:#DEDEDE"> uploadBlob</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">data</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $bannerData</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 164 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 165 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 166 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 167 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 168 - <span class="line"><span style="color:#9A9A9A">}</span></span> 169 - <span class="line"></span></code></pre> 170 - <p>Variables:</p> 171 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 172 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">bannerData</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">base64EncodedJpegData...</span><span style="color:#9A9A9A">"</span></span> 173 - <span class="line"><span style="color:#9A9A9A">}</span></span> 174 - <span class="line"></span></code></pre> 175 - <p>Response:</p> 176 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 177 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 178 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">uploadBlob</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 179 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">ref</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreixyz789banner</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 180 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">mimeType</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 181 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">size</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 450000</span></span> 182 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 183 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 184 - <span class="line"><span style="color:#9A9A9A">}</span></span> 185 - <span class="line"></span></code></pre> 186 - <h3 id="Step-3-Update-Profile"><a href="#Step-3-Update-Profile" class="header-anchor">#</a>Step 3: Update Profile</h3> 187 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#5EEBD8"> UpdateProfileWithImages</span><span style="color:#9A9A9A"> {</span></span> 188 - <span class="line"><span style="color:#DEDEDE"> updateAppBskyActorProfile</span><span style="color:#9A9A9A">(</span></span> 189 - <span class="line"><span style="color:#DEDEDE"> rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">self</span><span style="color:#9A9A9A">"</span></span> 190 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 191 - <span class="line"><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Alice Smith</span><span style="color:#9A9A9A">"</span></span> 192 - <span class="line"><span style="color:#8CDB8C"> description</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Software engineer &#x26; designer</span><span style="color:#9A9A9A">"</span></span> 193 - <span class="line"><span style="color:#8CDB8C"> avatar</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 194 - <span class="line"><span style="color:#8CDB8C"> ref</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreiabc123avatar</span><span style="color:#9A9A9A">"</span></span> 195 - <span class="line"><span style="color:#8CDB8C"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span></span> 196 - <span class="line"><span style="color:#8CDB8C"> size</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 125000</span></span> 197 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 198 - <span class="line"><span style="color:#8CDB8C"> banner</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 199 - <span class="line"><span style="color:#8CDB8C"> ref</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreixyz789banner</span><span style="color:#9A9A9A">"</span></span> 200 - <span class="line"><span style="color:#8CDB8C"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span></span> 201 - <span class="line"><span style="color:#8CDB8C"> size</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 450000</span></span> 202 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 203 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 204 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 205 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 206 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 207 - <span class="line"><span style="color:#DEDEDE"> description</span></span> 208 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span></span> 209 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 210 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 211 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 212 - <span class="line"><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span></span> 213 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 214 - <span class="line"><span style="color:#DEDEDE"> banner </span><span style="color:#9A9A9A">{</span></span> 215 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 216 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 217 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 218 - <span class="line"><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">banner</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span></span> 219 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 220 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 221 - <span class="line"><span style="color:#9A9A9A">}</span></span> 222 - <span class="line"></span></code></pre> 223 - <p>Response:</p> 224 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 225 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 226 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">updateAppBskyActorProfile</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 227 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">uri</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">at://did:plc:xyz/app.bsky.actor.profile/self</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 228 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">displayName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Alice Smith</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 229 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">description</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Software engineer &#x26; designer</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 230 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 231 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">ref</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreiabc123avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 232 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">mimeType</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 233 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">size</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 125000</span><span style="color:#9A9A9A">,</span></span> 234 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">url</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">https://cdn.bsky.app/img/avatar/plain/did:plc:xyz/bafkreiabc123avatar@jpeg</span><span style="color:#9A9A9A">"</span></span> 235 - <span class="line"><span style="color:#9A9A9A"> },</span></span> 236 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">banner</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 237 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">ref</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreixyz789banner</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 238 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">mimeType</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 239 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">size</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 450000</span><span style="color:#9A9A9A">,</span></span> 240 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">url</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">https://cdn.bsky.app/img/banner/plain/did:plc:xyz/bafkreixyz789banner@jpeg</span><span style="color:#9A9A9A">"</span></span> 241 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 242 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 243 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 244 - <span class="line"><span style="color:#9A9A9A">}</span></span> 245 - <span class="line"></span></code></pre> 246 - <h2 id="JavaScript-Example"><a href="#JavaScript-Example" class="header-anchor">#</a>JavaScript Example</h2> 247 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#6B6B6B;font-style:italic">// Convert file to base64</span></span> 248 - <span class="line"><span style="color:#F07068">async</span><span style="color:#F07068"> function</span><span style="color:#5EEBD8"> fileToBase64</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">file</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 249 - <span class="line"><span style="color:#F07068"> return</span><span style="color:#9A9A9A"> new</span><span style="color:#5EEBD8"> Promise</span><span style="color:#9A9A9A">((</span><span style="color:#DEDEDE">resolve</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> reject</span><span style="color:#9A9A9A">)</span><span style="color:#F07068"> =></span><span style="color:#9A9A9A"> {</span></span> 250 - <span class="line"><span style="color:#F07068"> const</span><span style="color:#DEDEDE"> reader </span><span style="color:#9A9A9A">=</span><span style="color:#9A9A9A"> new</span><span style="color:#5EEBD8"> FileReader</span><span style="color:#9A9A9A">();</span></span> 251 - <span class="line"><span style="color:#DEDEDE"> reader</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">readAsDataURL</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">file</span><span style="color:#9A9A9A">);</span></span> 252 - <span class="line"><span style="color:#DEDEDE"> reader</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">onload</span><span style="color:#9A9A9A"> =</span><span style="color:#9A9A9A"> ()</span><span style="color:#F07068"> =></span><span style="color:#9A9A9A"> {</span></span> 253 - <span class="line"><span style="color:#F07068"> const</span><span style="color:#DEDEDE"> base64 </span><span style="color:#9A9A9A">=</span><span style="color:#DEDEDE"> reader</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">result</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">split</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">'</span><span style="color:#8CDB8C">,</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">)[</span><span style="color:#5EEBD8">1</span><span style="color:#9A9A9A">];</span><span style="color:#6B6B6B;font-style:italic"> // Remove data:image/jpeg;base64, prefix</span></span> 254 - <span class="line"><span style="color:#5EEBD8"> resolve</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">base64</span><span style="color:#9A9A9A">);</span></span> 255 - <span class="line"><span style="color:#9A9A9A"> };</span></span> 256 - <span class="line"><span style="color:#DEDEDE"> reader</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">onerror </span><span style="color:#9A9A9A">=</span><span style="color:#DEDEDE"> reject</span><span style="color:#9A9A9A">;</span></span> 257 - <span class="line"><span style="color:#9A9A9A"> });</span></span> 258 - <span class="line"><span style="color:#9A9A9A">}</span></span> 259 - <span class="line"></span> 260 - <span class="line"><span style="color:#6B6B6B;font-style:italic">// Upload blob</span></span> 261 - <span class="line"><span style="color:#F07068">async</span><span style="color:#F07068"> function</span><span style="color:#5EEBD8"> uploadBlob</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">file</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> token</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 262 - <span class="line"><span style="color:#F07068"> const</span><span style="color:#DEDEDE"> base64Data </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#5EEBD8"> fileToBase64</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">file</span><span style="color:#9A9A9A">);</span></span> 263 - <span class="line"></span> 264 - <span class="line"><span style="color:#F07068"> const</span><span style="color:#DEDEDE"> response </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#5EEBD8"> fetch</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">'</span><span style="color:#8CDB8C">/graphql</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> {</span></span> 265 - <span class="line"><span style="color:#7EB3D8"> method</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">POST</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">,</span></span> 266 - <span class="line"><span style="color:#7EB3D8"> headers</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 267 - <span class="line"><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">Content-Type</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">application/json</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">,</span></span> 268 - <span class="line"><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">Authorization</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> `</span><span style="color:#8CDB8C">Bearer </span><span style="color:#9A9A9A">${</span><span style="color:#DEDEDE">token</span><span style="color:#9A9A9A">}`</span></span> 269 - <span class="line"><span style="color:#9A9A9A"> },</span></span> 270 - <span class="line"><span style="color:#7EB3D8"> body</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> JSON</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">stringify</span><span style="color:#9A9A9A">({</span></span> 271 - <span class="line"><span style="color:#7EB3D8"> query</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> `</span></span> 272 - <span class="line"><span style="color:#8CDB8C"> mutation UploadBlob($data: String!, $mimeType: String!) {</span></span> 273 - <span class="line"><span style="color:#8CDB8C"> uploadBlob(data: $data, mimeType: $mimeType) {</span></span> 274 - <span class="line"><span style="color:#8CDB8C"> ref</span></span> 275 - <span class="line"><span style="color:#8CDB8C"> mimeType</span></span> 276 - <span class="line"><span style="color:#8CDB8C"> size</span></span> 277 - <span class="line"><span style="color:#8CDB8C"> }</span></span> 278 - <span class="line"><span style="color:#8CDB8C"> }</span></span> 279 - <span class="line"><span style="color:#9A9A9A"> `</span><span style="color:#9A9A9A">,</span></span> 280 - <span class="line"><span style="color:#7EB3D8"> variables</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 281 - <span class="line"><span style="color:#7EB3D8"> data</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> base64Data</span><span style="color:#9A9A9A">,</span></span> 282 - <span class="line"><span style="color:#7EB3D8"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> file</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">type</span></span> 283 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 284 - <span class="line"><span style="color:#9A9A9A"> })</span></span> 285 - <span class="line"><span style="color:#9A9A9A"> });</span></span> 286 - <span class="line"></span> 287 - <span class="line"><span style="color:#F07068"> const</span><span style="color:#DEDEDE"> result </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#DEDEDE"> response</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">json</span><span style="color:#9A9A9A">();</span></span> 288 - <span class="line"><span style="color:#F07068"> return</span><span style="color:#DEDEDE"> result</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">data</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">uploadBlob</span><span style="color:#9A9A9A">;</span></span> 289 - <span class="line"><span style="color:#9A9A9A">}</span></span> 290 - <span class="line"></span> 291 - <span class="line"><span style="color:#6B6B6B;font-style:italic">// Usage</span></span> 292 - <span class="line"><span style="color:#F07068">const</span><span style="color:#DEDEDE"> avatarFile </span><span style="color:#9A9A9A">=</span><span style="color:#DEDEDE"> document</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">getElementById</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">'</span><span style="color:#8CDB8C">avatar-input</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">).</span><span style="color:#DEDEDE">files</span><span style="color:#9A9A9A">[</span><span style="color:#5EEBD8">0</span><span style="color:#9A9A9A">];</span></span> 293 - <span class="line"><span style="color:#F07068">const</span><span style="color:#DEDEDE"> blob </span><span style="color:#9A9A9A">=</span><span style="color:#F07068"> await</span><span style="color:#5EEBD8"> uploadBlob</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">avatarFile</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">your-token</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">);</span></span> 294 - <span class="line"><span style="color:#DEDEDE">console</span><span style="color:#9A9A9A">.</span><span style="color:#5EEBD8">log</span><span style="color:#9A9A9A">(</span><span style="color:#9A9A9A">'</span><span style="color:#8CDB8C">Uploaded blob:</span><span style="color:#9A9A9A">'</span><span style="color:#9A9A9A">,</span><span style="color:#DEDEDE"> blob</span><span style="color:#9A9A9A">.</span><span style="color:#DEDEDE">ref</span><span style="color:#9A9A9A">);</span></span> 295 - <span class="line"></span></code></pre> 296 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/reference/subscriptions"><span class="page-nav-label">Previous</span><span class="page-nav-title">Subscriptions</span></a><a class="page-nav-link page-nav-next" href="/reference/variables"><span class="page-nav-label">Next</span><span class="page-nav-title">Variables</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Upload-Blob" href="#Upload-Blob">Upload Blob</a><a class="minimap-item" data-target-id="Blob-Reference" href="#Blob-Reference">Blob Reference</a><a class="minimap-item" data-target-id="Using-Blobs-in-Records" href="#Using-Blobs-in-Records">Using Blobs in Records</a><a class="minimap-item minimap-item-sub" data-target-id="Profile-Avatar" href="#Profile-Avatar">Profile Avatar</a><a class="minimap-item minimap-item-sub" data-target-id="Profile-Banner" href="#Profile-Banner">Profile Banner</a><a class="minimap-item" data-target-id="Blob-URLs" href="#Blob-URLs">Blob URLs</a><a class="minimap-item minimap-item-sub" data-target-id="Default-URL" href="#Default-URL">Default URL</a><a class="minimap-item minimap-item-sub" data-target-id="Avatar-Preset" href="#Avatar-Preset">Avatar Preset</a><a class="minimap-item minimap-item-sub" data-target-id="Banner-Preset" href="#Banner-Preset">Banner Preset</a><a class="minimap-item" data-target-id="Available-Presets" href="#Available-Presets">Available Presets</a><a class="minimap-item" data-target-id="Complete-Example-Update-Profile-with-Images" href="#Complete-Example-Update-Profile-with-Images">Complete Example: Update Profile with Images</a><a class="minimap-item minimap-item-sub" data-target-id="Step-1-Upload-Avatar" href="#Step-1-Upload-Avatar">Step 1: Upload Avatar</a><a class="minimap-item minimap-item-sub" data-target-id="Step-2-Upload-Banner" href="#Step-2-Upload-Banner">Step 2: Upload Banner</a><a class="minimap-item minimap-item-sub" data-target-id="Step-3-Update-Profile" href="#Step-3-Update-Profile">Step 3: Update Profile</a><a class="minimap-item" data-target-id="JavaScript-Example" href="#JavaScript-Example">JavaScript Example</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-62
www/priv/reference/mcp/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - MCP</title><meta content="quickslice - MCP" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a class="active" href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="MCP-Server">MCP Server</h1> 3 - <p>Quickslice provides an MCP (Model Context Protocol) server that lets AI assistants query ATProto data directly.</p> 4 - <h2 id="Endpoint"><a href="#Endpoint" class="header-anchor">#</a>Endpoint</h2> 5 - <p>Every Quickslice instance exposes MCP at <code>{EXTERNAL_BASE_URL}/mcp</code>. For example:</p> 6 - <pre><code>https://xyzstatusphere.slices.network/mcp 7 - </code></pre> 8 - <h2 id="Setup"><a href="#Setup" class="header-anchor">#</a>Setup</h2> 9 - <h3 id="Claude-Code"><a href="#Claude-Code" class="header-anchor">#</a>Claude Code</h3> 10 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">claude</span><span style="color:#8CDB8C"> mcp</span><span style="color:#8CDB8C"> add</span><span style="color:#8CDB8C"> --transport</span><span style="color:#8CDB8C"> http</span><span style="color:#8CDB8C"> quickslice</span><span style="color:#8CDB8C"> https://xyzstatusphere.slices.network/mcp</span></span> 11 - <span class="line"></span></code></pre> 12 - <h3 id="Other-MCP-Clients"><a href="#Other-MCP-Clients" class="header-anchor">#</a>Other MCP Clients</h3> 13 - <p>Point any MCP-compatible client at the <code>/mcp</code> endpoint using HTTP transport.</p> 14 - <h2 id="Available-Tools"><a href="#Available-Tools" class="header-anchor">#</a>Available Tools</h2> 15 - <table> 16 - <thead> 17 - <tr> 18 - <th>Tool</th> 19 - <th>Description</th> 20 - </tr> 21 - </thead> 22 - <tbody> 23 - <tr> 24 - <td><code>list_lexicons</code></td> 25 - <td>List all registered lexicons</td> 26 - </tr> 27 - <tr> 28 - <td><code>get_lexicon</code></td> 29 - <td>Get full lexicon definition by NSID</td> 30 - </tr> 31 - <tr> 32 - <td><code>list_queries</code></td> 33 - <td>List available GraphQL queries</td> 34 - </tr> 35 - <tr> 36 - <td><code>get_oauth_info</code></td> 37 - <td>Get OAuth flows, scopes, and endpoints</td> 38 - </tr> 39 - <tr> 40 - <td><code>get_server_capabilities</code></td> 41 - <td>Get server version and features</td> 42 - </tr> 43 - <tr> 44 - <td><code>introspect_schema</code></td> 45 - <td>Get full GraphQL schema</td> 46 - </tr> 47 - <tr> 48 - <td><code>execute_query</code></td> 49 - <td>Execute a GraphQL query</td> 50 - </tr> 51 - </tbody> 52 - </table> 53 - <h2 id="Example-Prompts"><a href="#Example-Prompts" class="header-anchor">#</a>Example Prompts</h2> 54 - <p>Once connected, you can ask things like:</p> 55 - <ul> 56 - <li>&quot;What lexicons are registered?&quot;</li> 57 - <li>&quot;Show me the schema for xyz.statusphere.status&quot;</li> 58 - <li>&quot;Query the latest 10 statusphere statuses&quot;</li> 59 - <li>&quot;What GraphQL queries are available?&quot;</li> 60 - <li>&quot;What OAuth scopes does this server support?&quot;</li> 61 - </ul> 62 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/reference/variables"><span class="page-nav-label">Previous</span><span class="page-nav-title">Variables</span></a><div class="page-nav-link page-nav-empty"></div></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Endpoint" href="#Endpoint">Endpoint</a><a class="minimap-item" data-target-id="Setup" href="#Setup">Setup</a><a class="minimap-item minimap-item-sub" data-target-id="Claude-Code" href="#Claude-Code">Claude Code</a><a class="minimap-item minimap-item-sub" data-target-id="Other-MCP-Clients" href="#Other-MCP-Clients">Other MCP Clients</a><a class="minimap-item" data-target-id="Available-Tools" href="#Available-Tools">Available Tools</a><a class="minimap-item" data-target-id="Example-Prompts" href="#Example-Prompts">Example Prompts</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-141
www/priv/reference/subscriptions/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Subscriptions</title><meta content="quickslice - Subscriptions" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a class="active" href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Subscriptions">Subscriptions</h1> 3 - <p>Subscriptions deliver real-time updates when records are created, updated, or deleted. The server pushes events over WebSocket instead of requiring polling.</p> 4 - <p>Connect to <code>/graphql</code> using the <a href="/https://github.com/enisdenjo/graphql-ws/blob/master/PROTOCOL"><code>graphql-ws</code></a> protocol.</p> 5 - <h2 id="Basic-Subscription"><a href="#Basic-Subscription" class="header-anchor">#</a>Basic Subscription</h2> 6 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#9A9A9A"> {</span></span> 7 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusCreated </span><span style="color:#9A9A9A">{</span></span> 8 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 9 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 10 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 11 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 12 - <span class="line"><span style="color:#9A9A9A">}</span></span> 13 - <span class="line"></span></code></pre> 14 - <h2 id="Field-Selection"><a href="#Field-Selection" class="header-anchor">#</a>Field Selection</h2> 15 - <p>Request only the fields you need:</p> 16 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#9A9A9A"> {</span></span> 17 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusCreated </span><span style="color:#9A9A9A">{</span></span> 18 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 19 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 20 - <span class="line"><span style="color:#9A9A9A">}</span></span> 21 - <span class="line"></span></code></pre> 22 - <p>Response:</p> 23 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 24 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 25 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">xyzStatusphereStatusCreated</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 26 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">status</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">🚀</span><span style="color:#9A9A9A">"</span></span> 27 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 28 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 29 - <span class="line"><span style="color:#9A9A9A">}</span></span> 30 - <span class="line"></span></code></pre> 31 - <h2 id="Named-Subscription"><a href="#Named-Subscription" class="header-anchor">#</a>Named Subscription</h2> 32 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#5EEBD8"> OnNewStatus</span><span style="color:#9A9A9A"> {</span></span> 33 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusCreated </span><span style="color:#9A9A9A">{</span></span> 34 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 35 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 36 - <span class="line"><span style="color:#DEDEDE"> actorHandle</span></span> 37 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 38 - <span class="line"><span style="color:#9A9A9A">}</span></span> 39 - <span class="line"></span></code></pre> 40 - <h2 id="Subscription-Types"><a href="#Subscription-Types" class="header-anchor">#</a>Subscription Types</h2> 41 - <p>Each collection has three subscription fields:</p> 42 - <ul> 43 - <li><code>{collection}Created</code> - Fires when a new record is created</li> 44 - <li><code>{collection}Updated</code> - Fires when a record is updated</li> 45 - <li><code>{collection}Deleted</code> - Fires when a record is deleted</li> 46 - </ul> 47 - <h3 id="Examples"><a href="#Examples" class="header-anchor">#</a>Examples</h3> 48 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#6B6B6B;font-style:italic"># New status created</span></span> 49 - <span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#9A9A9A"> {</span></span> 50 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusCreated </span><span style="color:#9A9A9A">{</span></span> 51 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 52 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 53 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 54 - <span class="line"><span style="color:#9A9A9A">}</span></span> 55 - <span class="line"></span> 56 - <span class="line"><span style="color:#6B6B6B;font-style:italic"># Status updated</span></span> 57 - <span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#9A9A9A"> {</span></span> 58 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusUpdated </span><span style="color:#9A9A9A">{</span></span> 59 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 60 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 61 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 62 - <span class="line"><span style="color:#9A9A9A">}</span></span> 63 - <span class="line"></span> 64 - <span class="line"><span style="color:#6B6B6B;font-style:italic"># Status deleted</span></span> 65 - <span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#9A9A9A"> {</span></span> 66 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusDeleted </span><span style="color:#9A9A9A">{</span></span> 67 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 68 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 69 - <span class="line"><span style="color:#9A9A9A">}</span></span> 70 - <span class="line"></span></code></pre> 71 - <h2 id="With-Joins"><a href="#With-Joins" class="header-anchor">#</a>With Joins</h2> 72 - <p>Subscriptions support joins like queries:</p> 73 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">subscription</span><span style="color:#9A9A9A"> {</span></span> 74 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatusCreated </span><span style="color:#9A9A9A">{</span></span> 75 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 76 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 77 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 78 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 79 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span></span> 80 - <span class="line"><span style="color:#DEDEDE"> url</span></span> 81 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 82 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 83 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 84 - <span class="line"><span style="color:#9A9A9A">}</span></span> 85 - <span class="line"></span></code></pre> 86 - <p>Response:</p> 87 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 88 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 89 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">xyzStatusphereStatusCreated</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 90 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">uri</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">at://did:plc:abc123/xyz.statusphere.status/3m4vk4wi</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 91 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">status</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">🎉 Just shipped!</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 92 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">appBskyActorProfileByDid</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 93 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">displayName</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Alice</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 94 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 95 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">url</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">https://cdn.bsky.app/img/avatar/plain/did:plc:abc123/bafyrei...</span><span style="color:#9A9A9A">"</span></span> 96 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 97 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 98 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 99 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 100 - <span class="line"><span style="color:#9A9A9A">}</span></span> 101 - <span class="line"></span></code></pre> 102 - <h2 id="WebSocket-Protocol"><a href="#WebSocket-Protocol" class="header-anchor">#</a>WebSocket Protocol</h2> 103 - <h3 id="1-Connect"><a href="#1-Connect" class="header-anchor">#</a>1. Connect</h3> 104 - <pre><code>ws://localhost:8080/graphql # Local development 105 - wss://quickslice.example.com/graphql # Production 106 - </code></pre> 107 - <h3 id="2-Initialize"><a href="#2-Initialize" class="header-anchor">#</a>2. Initialize</h3> 108 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 109 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">connection_init</span><span style="color:#9A9A9A">"</span></span> 110 - <span class="line"><span style="color:#9A9A9A">}</span></span> 111 - <span class="line"></span></code></pre> 112 - <h3 id="3-Subscribe"><a href="#3-Subscribe" class="header-anchor">#</a>3. Subscribe</h3> 113 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 114 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">id</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">1</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 115 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">subscribe</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 116 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">payload</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 117 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">query</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">subscription { xyzStatusphereStatusCreated { uri status } }</span><span style="color:#9A9A9A">"</span></span> 118 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 119 - <span class="line"><span style="color:#9A9A9A">}</span></span> 120 - <span class="line"></span></code></pre> 121 - <h3 id="4-Receive-Events"><a href="#4-Receive-Events" class="header-anchor">#</a>4. Receive Events</h3> 122 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 123 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">id</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">1</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 124 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">next</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 125 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">payload</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 126 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">data</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 127 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">xyzStatusphereStatusCreated</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 128 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">uri</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">at://...</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 129 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">status</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Hello!</span><span style="color:#9A9A9A">"</span></span> 130 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 131 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 132 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 133 - <span class="line"><span style="color:#9A9A9A">}</span></span> 134 - <span class="line"></span></code></pre> 135 - <h3 id="5-Unsubscribe"><a href="#5-Unsubscribe" class="header-anchor">#</a>5. Unsubscribe</h3> 136 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 137 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">id</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">1</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 138 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">complete</span><span style="color:#9A9A9A">"</span></span> 139 - <span class="line"><span style="color:#9A9A9A">}</span></span> 140 - <span class="line"></span></code></pre> 141 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/reference/aggregations"><span class="page-nav-label">Previous</span><span class="page-nav-title">Aggregations</span></a><a class="page-nav-link page-nav-next" href="/reference/blobs"><span class="page-nav-label">Next</span><span class="page-nav-title">Blobs</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Basic-Subscription" href="#Basic-Subscription">Basic Subscription</a><a class="minimap-item" data-target-id="Field-Selection" href="#Field-Selection">Field Selection</a><a class="minimap-item" data-target-id="Named-Subscription" href="#Named-Subscription">Named Subscription</a><a class="minimap-item" data-target-id="Subscription-Types" href="#Subscription-Types">Subscription Types</a><a class="minimap-item minimap-item-sub" data-target-id="Examples" href="#Examples">Examples</a><a class="minimap-item" data-target-id="With-Joins" href="#With-Joins">With Joins</a><a class="minimap-item" data-target-id="WebSocket-Protocol" href="#WebSocket-Protocol">WebSocket Protocol</a><a class="minimap-item minimap-item-sub" data-target-id="1-Connect" href="#1-Connect">1. Connect</a><a class="minimap-item minimap-item-sub" data-target-id="2-Initialize" href="#2-Initialize">2. Initialize</a><a class="minimap-item minimap-item-sub" data-target-id="3-Subscribe" href="#3-Subscribe">3. Subscribe</a><a class="minimap-item minimap-item-sub" data-target-id="4-Receive-Events" href="#4-Receive-Events">4. Receive Events</a><a class="minimap-item minimap-item-sub" data-target-id="5-Unsubscribe" href="#5-Unsubscribe">5. Unsubscribe</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-176
www/priv/reference/variables/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Variables</title><meta content="quickslice - Variables" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a class="active" href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Variables">Variables</h1> 3 - <p>GraphQL variables parameterize queries and mutations for reusability and security.</p> 4 - <h2 id="Basic-Variables"><a href="#Basic-Variables" class="header-anchor">#</a>Basic Variables</h2> 5 - <h3 id="Query-with-Variables"><a href="#Query-with-Variables" class="header-anchor">#</a>Query with Variables</h3> 6 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> GetStatusByEmoji</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$emoji</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 7 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 8 - <span class="line"><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $emoji </span><span style="color:#9A9A9A">}</span></span> 9 - <span class="line"><span style="color:#9A9A9A"> })</span><span style="color:#9A9A9A"> {</span></span> 10 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 11 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 12 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 13 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 14 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 15 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 16 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 17 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 18 - <span class="line"><span style="color:#9A9A9A">}</span></span> 19 - <span class="line"></span></code></pre> 20 - <p>Variables:</p> 21 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 22 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">emoji</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">🎉</span><span style="color:#9A9A9A">"</span></span> 23 - <span class="line"><span style="color:#9A9A9A">}</span></span> 24 - <span class="line"></span></code></pre> 25 - <h3 id="Mutation-with-Variables"><a href="#Mutation-with-Variables" class="header-anchor">#</a>Mutation with Variables</h3> 26 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#5EEBD8"> CreateStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$statusEmoji</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!,</span><span style="color:#DEDEDE"> $timestamp</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 27 - <span class="line"><span style="color:#DEDEDE"> createXyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 28 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 29 - <span class="line"><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $statusEmoji</span></span> 30 - <span class="line"><span style="color:#8CDB8C"> createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $timestamp</span></span> 31 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 32 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 33 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 34 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 35 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 36 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 37 - <span class="line"><span style="color:#9A9A9A">}</span></span> 38 - <span class="line"></span></code></pre> 39 - <p>Variables:</p> 40 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 41 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">statusEmoji</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">🚀</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 42 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">timestamp</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">2025-01-30T12:00:00Z</span><span style="color:#9A9A9A">"</span></span> 43 - <span class="line"><span style="color:#9A9A9A">}</span></span> 44 - <span class="line"></span></code></pre> 45 - <h2 id="Multiple-Variables"><a href="#Multiple-Variables" class="header-anchor">#</a>Multiple Variables</h2> 46 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> GetFilteredStatuses</span><span style="color:#9A9A9A">(</span></span> 47 - <span class="line"><span style="color:#DEDEDE"> $emoji</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!</span></span> 48 - <span class="line"><span style="color:#DEDEDE"> $pageSize</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> Int</span><span style="color:#9A9A9A">!</span></span> 49 - <span class="line"><span style="color:#DEDEDE"> $cursor</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span></span> 50 - <span class="line"><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 51 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 52 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $emoji </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> }</span></span> 53 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $pageSize</span></span> 54 - <span class="line"><span style="color:#DEDEDE"> after</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $cursor</span></span> 55 - <span class="line"><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">createdAt</span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE">, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}]</span></span> 56 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 57 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 58 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 59 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 60 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 61 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 62 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 63 - <span class="line"><span style="color:#DEDEDE"> cursor</span></span> 64 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 65 - <span class="line"><span style="color:#DEDEDE"> pageInfo </span><span style="color:#9A9A9A">{</span></span> 66 - <span class="line"><span style="color:#DEDEDE"> hasNextPage</span></span> 67 - <span class="line"><span style="color:#DEDEDE"> endCursor</span></span> 68 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 69 - <span class="line"><span style="color:#DEDEDE"> totalCount</span></span> 70 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 71 - <span class="line"><span style="color:#9A9A9A">}</span></span> 72 - <span class="line"></span></code></pre> 73 - <p>Variables:</p> 74 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 75 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">emoji</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">✨</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 76 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">pageSize</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span><span style="color:#9A9A9A">,</span></span> 77 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">cursor</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> null</span></span> 78 - <span class="line"><span style="color:#9A9A9A">}</span></span> 79 - <span class="line"></span></code></pre> 80 - <h2 id="Optional-Variables"><a href="#Optional-Variables" class="header-anchor">#</a>Optional Variables</h2> 81 - <p>Use default values for optional variables:</p> 82 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> GetProfiles</span><span style="color:#9A9A9A">(</span></span> 83 - <span class="line"><span style="color:#DEDEDE"> $name</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A"> =</span><span style="color:#9A9A9A"> ""</span></span> 84 - <span class="line"><span style="color:#DEDEDE"> $pageSize</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> Int</span><span style="color:#9A9A9A"> =</span><span style="color:#5EEBD8"> 20</span></span> 85 - <span class="line"><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 86 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfile</span><span style="color:#9A9A9A">(</span></span> 87 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> contains</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $name </span><span style="color:#9A9A9A">}</span><span style="color:#9A9A9A"> }</span></span> 88 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $pageSize</span></span> 89 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 90 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 91 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 92 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 93 - <span class="line"><span style="color:#DEDEDE"> description</span></span> 94 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 95 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 96 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 97 - <span class="line"><span style="color:#9A9A9A">}</span></span> 98 - <span class="line"></span></code></pre> 99 - <p>Variables:</p> 100 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 101 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">name</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">alice</span><span style="color:#9A9A9A">"</span></span> 102 - <span class="line"><span style="color:#9A9A9A">}</span></span> 103 - <span class="line"></span></code></pre> 104 - <p>Or omit variables to use defaults:</p> 105 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{}</span></span> 106 - <span class="line"></span></code></pre> 107 - <h2 id="Blob-Upload-with-Variables"><a href="#Blob-Upload-with-Variables" class="header-anchor">#</a>Blob Upload with Variables</h2> 108 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#5EEBD8"> UploadImage</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$imageData</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!,</span><span style="color:#DEDEDE"> $type</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 109 - <span class="line"><span style="color:#DEDEDE"> uploadBlob</span><span style="color:#9A9A9A">(</span></span> 110 - <span class="line"><span style="color:#DEDEDE"> data</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $imageData</span></span> 111 - <span class="line"><span style="color:#DEDEDE"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $type</span></span> 112 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 113 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 114 - <span class="line"><span style="color:#DEDEDE"> mimeType</span></span> 115 - <span class="line"><span style="color:#DEDEDE"> size</span></span> 116 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 117 - <span class="line"><span style="color:#9A9A9A">}</span></span> 118 - <span class="line"></span></code></pre> 119 - <p>Variables:</p> 120 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 121 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">imageData</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">base64EncodedImageData...</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 122 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span></span> 123 - <span class="line"><span style="color:#9A9A9A">}</span></span> 124 - <span class="line"></span></code></pre> 125 - <h2 id="Update-Profile-with-Variables"><a href="#Update-Profile-with-Variables" class="header-anchor">#</a>Update Profile with Variables</h2> 126 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#5EEBD8"> UpdateProfile</span><span style="color:#9A9A9A">(</span></span> 127 - <span class="line"><span style="color:#DEDEDE"> $name</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!</span></span> 128 - <span class="line"><span style="color:#DEDEDE"> $bio</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!</span></span> 129 - <span class="line"><span style="color:#DEDEDE"> $avatarRef</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!</span></span> 130 - <span class="line"><span style="color:#DEDEDE"> $avatarType</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!</span></span> 131 - <span class="line"><span style="color:#DEDEDE"> $avatarSize</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> Int</span><span style="color:#9A9A9A">!</span></span> 132 - <span class="line"><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 133 - <span class="line"><span style="color:#DEDEDE"> updateAppBskyActorProfile</span><span style="color:#9A9A9A">(</span></span> 134 - <span class="line"><span style="color:#DEDEDE"> rkey</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">self</span><span style="color:#9A9A9A">"</span></span> 135 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 136 - <span class="line"><span style="color:#8CDB8C"> displayName</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $name</span></span> 137 - <span class="line"><span style="color:#8CDB8C"> description</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $bio</span></span> 138 - <span class="line"><span style="color:#8CDB8C"> avatar</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 139 - <span class="line"><span style="color:#8CDB8C"> ref</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $avatarRef</span></span> 140 - <span class="line"><span style="color:#8CDB8C"> mimeType</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $avatarType</span></span> 141 - <span class="line"><span style="color:#8CDB8C"> size</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $avatarSize</span></span> 142 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 143 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 144 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 145 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 146 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 147 - <span class="line"><span style="color:#DEDEDE"> description</span></span> 148 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span></span> 149 - <span class="line"><span style="color:#DEDEDE"> ref</span></span> 150 - <span class="line"><span style="color:#DEDEDE"> url</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">preset</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">avatar</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">)</span></span> 151 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 152 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 153 - <span class="line"><span style="color:#9A9A9A">}</span></span> 154 - <span class="line"></span></code></pre> 155 - <p>Variables:</p> 156 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 157 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">name</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Alice Smith</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 158 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">bio</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Software engineer &#x26; designer</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 159 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">avatarRef</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">bafkreiabc123...</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 160 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">avatarType</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">image/jpeg</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 161 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">avatarSize</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 125000</span></span> 162 - <span class="line"><span style="color:#9A9A9A">}</span></span> 163 - <span class="line"></span></code></pre> 164 - <h2 id="Using-in-HTTP-Requests"><a href="#Using-in-HTTP-Requests" class="header-anchor">#</a>Using in HTTP Requests</h2> 165 - <p>Send variables in the HTTP request body:</p> 166 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#5EEBD8">curl</span><span style="color:#8CDB8C"> -X</span><span style="color:#8CDB8C"> POST</span><span style="color:#8CDB8C"> http://localhost:8080/graphql</span><span style="color:#DEDEDE"> \</span></span> 167 - <span class="line"><span style="color:#8CDB8C"> -H</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Content-Type: application/json</span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE"> \</span></span> 168 - <span class="line"><span style="color:#8CDB8C"> -H</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">Authorization: Bearer &#x3C;token></span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE"> \</span></span> 169 - <span class="line"><span style="color:#8CDB8C"> -d</span><span style="color:#9A9A9A"> '</span><span style="color:#8CDB8C">{</span></span> 170 - <span class="line"><span style="color:#8CDB8C"> "query": "query GetStatus($emoji: String!) { xyzStatusphereStatus(where: { status: { eq: $emoji } }) { edges { node { status } } } }",</span></span> 171 - <span class="line"><span style="color:#8CDB8C"> "variables": {</span></span> 172 - <span class="line"><span style="color:#8CDB8C"> "emoji": "🎉"</span></span> 173 - <span class="line"><span style="color:#8CDB8C"> }</span></span> 174 - <span class="line"><span style="color:#8CDB8C"> }</span><span style="color:#9A9A9A">'</span></span> 175 - <span class="line"></span></code></pre> 176 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/reference/blobs"><span class="page-nav-label">Previous</span><span class="page-nav-title">Blobs</span></a><a class="page-nav-link page-nav-next" href="/reference/mcp"><span class="page-nav-label">Next</span><span class="page-nav-title">MCP</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="Basic-Variables" href="#Basic-Variables">Basic Variables</a><a class="minimap-item minimap-item-sub" data-target-id="Query-with-Variables" href="#Query-with-Variables">Query with Variables</a><a class="minimap-item minimap-item-sub" data-target-id="Mutation-with-Variables" href="#Mutation-with-Variables">Mutation with Variables</a><a class="minimap-item" data-target-id="Multiple-Variables" href="#Multiple-Variables">Multiple Variables</a><a class="minimap-item" data-target-id="Optional-Variables" href="#Optional-Variables">Optional Variables</a><a class="minimap-item" data-target-id="Blob-Upload-with-Variables" href="#Blob-Upload-with-Variables">Blob Upload with Variables</a><a class="minimap-item" data-target-id="Update-Profile-with-Variables" href="#Update-Profile-with-Variables">Update Profile with Variables</a><a class="minimap-item" data-target-id="Using-in-HTTP-Requests" href="#Using-in-HTTP-Requests">Using in HTTP Requests</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>
-1
www/priv/search-index.json
··· 1 - [{"path":"/","title":"Introduction","group":"Getting Started","content":"Quickslice > \\1 > This project is in early development. APIs may change without notice. Quickslice is a quick way to spin up an \\1 for AT Protocol applications. Import your Lexicon schemas and you get a GraphQL API with OAuth authentication, real-time sync from the network, and joins across record types without setting up a database or writing any backend code. ## The Problem Building an AppView from scratch means writing a lot of infrastructure code: - Jetstream connection and event handling - Record ingestion and validation - Database schema design and normalization - XRPC API endpoints for querying and writing data - OAuth session management and PDS writes - Efficient batching when resolving related records This adds up before you write any application logic. ## What Quickslice Does Quickslice handles all of that automatically: - \\1 and tracks the record types defined in your Lexicons - \\1 relevant records into a database (SQLite or Postgres) - \\1 queries, mutations, and subscriptions from your Lexicon definitions - \\1 and writes records back to the user's PDS - \\1 by DID, URI, or strong reference, so you can query a status and its author's profile in one request ## When to Use It - You want to skip the AppView boilerplate - You want to prototype Lexicon data structures quickly - You want OAuth handled for you - You want to ship your AppView already ## Next Steps \\1: A hands-on tutorial showing what Quickslice handles for you","headings":[]},{"path":"/tutorial","title":"Tutorial","group":"Getting Started","content":"Tutorial: Build Statusphere with Quickslice Let's build Statusphere, an app where users share their current status as an emoji. This is the same app from the \\1, but using Quickslice as the AppView. Along the way, we'll show what you'd write manually versus what Quickslice handles automatically. \\1 A working example is running at \\1, connected to a slice at \\1 with the lexicon. ## What We're Building Statusphere lets users: - Log in with their AT Protocol identity - Set their status as an emoji - See a feed of everyone's statuses with profile information By the end of this tutorial, you'll understand how Quickslice eliminates the boilerplate of building an AppView. ## Step 1: Project Setup and Importing Lexicons Every AT Protocol app starts with Lexicons. Here's the Lexicon for a status record: Importing this Lexicon into Quickslice triggers three automatic steps: 1. \\1: Quickslice tracks records from the network 2. \\1: Quickslice creates a normalized table with proper columns and indexes 3. \\1: Quickslice generates query, mutation, and subscription types | Without Quickslice | With Quickslice | |---|---| | Write Jetstream connection code | Import your Lexicon | | Filter events for your collection | | | Validate incoming records | | | Design database schema | Quickslice handles the rest. | | Write ingestion logic | | ## Step 2: Querying Status Records Query indexed records with GraphQL. Quickslice generates a query for each Lexicon type using Relay-style connections: The and pattern comes from \\1, a GraphQL pagination specification. Each contains a (the record) and a for pagination. You can filter with clauses: | Without Quickslice | With Quickslice | |---|---| | Design query API | Query is auto-generated: | | Write database queries | | | Handle pagination logic | | | Build filtering and sorting | | ## Step 3: Joining Profile Data Here Quickslice shines. Every status record has a field identifying its author. In Bluesky, profile information lives in records. Join directly from a status to its author's profile: The field is a \\1. It follows the on the status record to find the profile authored by that identity. Quickslice: - Collects DIDs from the status records - Batches them into a single database query (DataLoader pattern) - Joins profile data efficiently | Without Quickslice | With Quickslice | |---|---| | Collect DIDs from status records | Add join to your query: | | Batch resolve DIDs to profiles | | | Handle N+1 query problem | | | Write batching logic | | | Join data in API response | | ### Other Join Types Quickslice also supports: - \\1: Follow a URI or strong ref to another record - \\1: Find all records that reference a given record See the \\1 for complete documentation. ## Step 4: Writing a Status (Mutations) To set a user's status, call a mutation: Quickslice: 1. \\1: Creates the record in their personal data repository 2. \\1: The record appears in queries immediately, before Jetstream confirmation 3. \\1: Uses the authenticated session to sign the write | Without Quickslice | With Quickslice | |---|---| | Get OAuth session/agent | Call the mutation: | | Construct record with $type | | | Call putRecord XRPC on the PDS | | | Optimistically update local DB | | | Handle errors | | ## Step 5: Authentication Quickslice bridges AT Protocol OAuth. Your frontend initiates login; Quickslice manages the authorization flow: 1. User enters their handle (e.g., ) 2. Your app redirects to Quickslice's OAuth endpoint 3. Quickslice redirects to the user's PDS for authorization 4. User approves the app 5. PDS redirects back to Quickslice with an auth code 6. Quickslice exchanges the code for tokens and establishes a session For authenticated queries and mutations, include auth headers. The exact headers depend on your OAuth flow (DPoP or Bearer token). See the \\1 for details. ## Step 6: Deploying to Railway Deploy quickly with Railway: 1. Click the deploy button in the \\1 2. Generate an OAuth signing key with 3. Paste the key into the environment variable 4. Generate a domain and redeploy 5. Create your admin account by logging in 6. Upload your Lexicons See \\1 for detailed instructions. ## What Quickslice Handled Quickslice handled: - \\1: firehose connection, event filtering, reconnection - \\1: schema checking against Lexicons - \\1: tables, migrations, indexes - \\1: filtering, sorting, pagination endpoints - \\1: efficient related-record resolution - \\1: indexing before Jetstream confirmation - \\1: token exchange, session management, DPoP proofs Focus on your application logic; Quickslice handles infrastructure. ## Next Steps - \\1: Filtering, sorting, and pagination - \\1: Forward, reverse, and DID joins - \\1: Creating, updating, and deleting records - \\1: Setting up OAuth - \\1: Production configuration","headings":[]},{"path":"/guides/queries","title":"Queries","group":"Guides","content":"Queries Quickslice generates a GraphQL query for each Lexicon record type. Queries are public; no authentication required. ## Relay Connections Queries return data in the \\1 format: - : Array of results, each containing a (the record) and (for pagination) - : Pagination metadata - : Total number of matching records ## Filtering Use the argument to filter records: ### Filter Operators | Operator | Description | Example | |----------|-------------|---------| | | Equal to | | | | Not equal to | | | | In array | | | | String contains (case-insensitive) | | | | Greater than | | | | Less than | | | | Greater than or equal | | | | Less than or equal | | ### Multiple Conditions Combine multiple conditions (they're ANDed together): ## Sorting Use to order results: ### Multi-Field Sorting Sort by multiple fields (applied in order): ## Pagination ### Forward Pagination Use to limit results and to get the next page: ### Backward Pagination Use and to paginate backward: ### PageInfo Fields | Field | Description | |-------|-------------| | | More items exist after this page | | | More items exist before this page | | | Cursor of the first item | | | Cursor of the last item | ## Complete Example Combining filtering, sorting, and pagination: Variables:","headings":[]},{"path":"/guides/joins","title":"Joins","group":"Guides","content":"Joins AT Protocol data lives in collections. A user's status records ( ) occupy one collection, their profile ( ) another. Quickslice generates joins that query across collections—fetch a status and its author's profile in one request. ## Join Types Quickslice generates three join types automatically: | Type | What it does | Field naming | |------|--------------|--------------| | \\1 | Follows a URI or strong ref to another record | | | \\1 | Finds all records that reference a given record | | | \\1 | Finds records by the same author | | ## Forward Joins Forward joins follow references from one record to another. When a record has a field containing an AT-URI or strong ref, Quickslice generates a field that fetches the referenced record. ### Example: Resolving a Favorite's Subject A favorite record has a field containing an AT-URI. The field fetches the actual record: Forward joins return a union type because the referenced record could be any type. Use inline fragments ( ) for type-specific fields. ## Reverse Joins Reverse joins work oppositely: given a record, find all records that reference it. Quickslice analyzes your Lexicons and generates reverse join fields automatically. Reverse joins return paginated connections supporting filtering, sorting, and cursors. ### Example: Comments on a Photo Find all comments that reference a specific photo: ### Sorting and Filtering Reverse Joins Reverse joins support the same sorting and filtering as top-level queries: ## DID Joins DID joins connect records by author identity. Every record has a field identifying its creator. Quickslice generates fields to find related records by the same author. ### Example: Author Profile from a Status Get the author's profile alongside their status: ### Unique vs Non-Unique DID Joins Some collections have one record per DID (like profiles with a key). These return a single object: Other collections can have multiple records per DID. These return paginated connections: ### Cross-Lexicon DID Joins DID joins work across different Lexicon families. Get a user's Bluesky profile alongside their app-specific data: ## Common Patterns ### Profile Lookups The most common pattern: joining author profiles to any record type. ### Engagement Counts Use reverse joins to count likes, comments, or other engagement: ### User Activity Get all records by a user across multiple collections: ## How Batching Works Quickslice batches join resolution to avoid the N+1 query problem. When querying 100 photos with author profiles: 1. Fetches 100 photos in one query 2. Collects all unique DIDs from those photos 3. Fetches all profiles in a single query: 4. Maps profiles back to their photos All join types batch automatically.","headings":[]},{"path":"/guides/mutations","title":"Mutations","group":"Guides","content":"Mutations Mutations write records to the authenticated user's repository. All mutations require authentication. ## Creating Records Quickslice: 1. Writes the record to the user's PDS 2. Indexes locally for immediate query availability ### Custom Record Keys By default, Quickslice generates a TID (timestamp-based ID) for the record key. You can specify a custom key: Some Lexicons require specific key patterns. For example, profiles use as the record key. ## Updating Records Update an existing record by its record key: The update replaces the entire record. Include all required fields, not just the ones you're changing. ## Deleting Records Delete a record by its record key: ## Working with Blobs Records can include binary data like images. Upload the blob first, then reference it. ### Upload a Blob The field accepts base64-encoded binary data. The response includes a (CID) for use in your record. ### Use the Blob in a Record See the \\1 for more details on blob handling and URL presets. ## Error Handling Common mutation errors: | Error | Cause | |-------|-------| | | Missing or invalid authentication token | | | Invalid input (missing required fields, wrong types) | | | Record doesn't exist (for update/delete) | | | Trying to modify another user's record | ## Authentication Mutations require authentication. Headers depend on the OAuth flow: \\1 (recommended for browser apps): \\1: See the \\1 for flow details and token acquisition.","headings":[]},{"path":"/guides/authentication","title":"Authentication","group":"Guides","content":"Authentication Quickslice proxies OAuth between your app and users' Personal Data Servers (PDS). Your app never handles AT Protocol credentials directly. ## How It Works 1. User clicks login in your app 2. Your app redirects to Quickslice's endpoint 3. Quickslice redirects to the user's PDS for authorization 4. User enters credentials and approves your app 5. PDS redirects back to Quickslice with an auth code 6. Quickslice exchanges the code for tokens 7. Quickslice redirects back to your app with a code 8. Your app exchanges the code for an access token The access token authorizes mutations that write to the user's repository. ## Setting Up OAuth ### Generate a Signing Key Quickslice needs a private key to sign OAuth tokens. Generate one with : Set the output as your environment variable. ### Register an OAuth Client 1. Open your Quickslice instance and navigate to \\1 2. Scroll to \\1 and click \\1 3. Fill in the form: - \\1: Your app's name - \\1: Public (browser apps) or Confidential (server apps) - \\1: Where users return after auth (e.g., ) - \\1: Leave as 4. Copy the \\1 ### Public vs Confidential Clients | Type | Use Case | Secret | |------|----------|--------| | \\1 | Browser apps, mobile apps | No secret (client cannot secure it) | | \\1 | Server-side apps, backend services | Secret (stored securely on server) | ## Using the Client SDK The Quickslice client SDK handles OAuth, PKCE, DPoP, token refresh, and GraphQL requests. ### Install Or via CDN: ### Initialize ### Login ### Handle the Callback After authentication, the user returns to your redirect URI: ### Check Authentication State ### Logout ## Making Authenticated Requests ### With the SDK The SDK adds authentication headers automatically: ### Without the SDK Without the SDK, include headers based on your OAuth flow: \\1 (public clients): \\1 (confidential clients): ## The Viewer Query The query returns the authenticated user: Returns when not authenticated (no error thrown). ## Security: PKCE and DPoP The SDK implements two security mechanisms for browser apps: \\1 prevents authorization code interception. Before redirecting, the SDK generates a random secret and sends only its hash to the server. When exchanging the code for tokens, the SDK proves it initiated the request. \\1 binds tokens to a cryptographic key in your browser. Each request includes a signed proof. An attacker who steals your access token cannot use it without the key. ## OAuth Endpoints - - Start the OAuth flow - - Exchange authorization code for tokens - - Server metadata - - Client metadata","headings":[]},{"path":"/guides/deployment","title":"Deployment","group":"Guides","content":"Deployment Deploy Quickslice to production. Railway with one-click deploy is fastest. ## Railway (Recommended) ### 1. Deploy Click the button to deploy Quickslice with SQLite: \\1](https://railway.com/deploy/quickslice?referralCode=Ofii6e&utm\\1source=template&utm\\1medium=integration&utm\\1campaign=generic) This template provisions a PostgreSQL database alongside Quickslice. The is automatically configured.","headings":[]},{"path":"/guides/patterns","title":"Patterns","group":"Guides","content":"Common Patterns Recipes for common use cases when building with Quickslice. ## Profile Lookups Join author profiles to any record type to display names and avatars. The field works on all records because every record has a field. ## User Timelines Fetch all records by a specific user using DID joins from their profile. ## Engagement Counts Use reverse joins with to show likes, comments, or other engagement metrics. ## Feed with Nested Data Build a rich feed by combining multiple join types. ## Paginated Lists Implement infinite scroll or \"load more\" with cursor-based pagination. First request: Subsequent requests: Continue until is . ## Filtered Search Combine multiple filters for search functionality. ## Date Range Queries Filter records within a time period. Variables: ## Current User's Data Use the query to get the authenticated user's records. ## Real-Time Updates Subscribe to new records and update your UI live. Combine with an initial query to show existing data, then append new records as they arrive via subscription. ## Aggregations Get statistics like top items or activity over time.","headings":[]},{"path":"/guides/troubleshooting","title":"Troubleshooting","group":"Guides","content":"Troubleshooting Common issues and how to resolve them. ## OAuth Errors ### \"Invalid redirect URI\" The redirect URI in your OAuth request doesn't match any registered URI. \\1 Ensure the redirect URI in your app exactly matches one in Settings > OAuth Clients. URIs must match protocol, host, port, and path. ### \"Invalid client ID\" The client ID doesn't exist or was deleted. \\1 Verify the client ID in Settings > OAuth Clients. If it was deleted, register a new client. ### \"PKCE code verifier mismatch\" The code verifier sent during token exchange doesn't match the code challenge from authorization. \\1 The code verifier wasn't stored correctly between authorization redirect and callback. If using the SDK, call in the same browser session that initiated login. ### \"DPoP proof invalid\" The DPoP proof header is missing, malformed, or signed with the wrong key. \\1 If using the SDK, this is handled automatically. If implementing manually, ensure: - The DPoP header contains a valid JWT - The JWT is signed with the same key used during token exchange - The and claims match the request method and URL ## GraphQL Errors ### \"Cannot query field X on type Y\" The field doesn't exist on the queried type. \\1 Check your query against the schema in GraphiQL. Common causes: - Typo in field name - Field exists on a different type (use inline fragments for unions) - Lexicon wasn't imported yet ### \"Variable $X of type Y used in position expecting Z\" Type mismatch between your variable declaration and how it's used. \\1 Check variable types in your query definition. Common issues: - Using instead of for date fields - Missing for required variables - Using wrong scalar type ### \"Record not found\" The record you're trying to update or delete doesn't exist. \\1 Verify the record key (rkey). Query for the record first to confirm it exists. ## Jetstream Issues ### Records not appearing after creation Records created via mutation should appear immediately due to optimistic indexing. If they don't: \\1 1. Was the mutation successful? Check the response for errors. 2. Is the record in the user's PDS? Use to verify. 3. Is Jetstream connected? Check the logs for connection errors. ### Old records missing Records created before you deployed Quickslice won't appear until backfilled. \\1 Trigger a backfill from the admin UI or wait for the scheduled backfill to complete. ### Backfill stuck or slow \\1 1. Memory usage - backfill is memory-intensive. See \\1 for tuning. 2. Network connectivity to PDS endpoints 3. Logs for specific PDS errors ## Database Issues ### \"Database is locked\" SQLite can't acquire a write lock. Caused by long-running queries or concurrent access. \\1 - Ensure only one Quickslice instance writes to the database - Check for stuck queries in logs - Restart the service if needed ### Disk space full SQLite needs space for WAL files and vacuuming. \\1 Expand your volume. See your hosting platform's documentation. ## Debugging Tips ### Check if records are being indexed Query for recent records: ### Verify OAuth is working Query the viewer: Returns if not authenticated. Returns user info if authenticated. ### Inspect the GraphQL schema Use GraphiQL at to explore types, queries, and mutations. The Docs panel shows all fields and types. ### Check Lexicon registration Use the MCP endpoint or admin UI to list registered Lexicons: Look for types matching your Lexicon NSIDs (e.g., ). ## FAQ ### \"Why aren't my records showing up?\" 1. \\1 Should appear immediately. Check mutation response for errors. 2. \\1 Needs backfill. Trigger from admin UI. 3. \\1 Ensure the Lexicon is registered in your instance. ### \"Why is my mutation failing?\" 1. \\1 Token expired or invalid. Re-authenticate. 2. \\1 Trying to modify another user's record. 3. \\1 Check input against Lexicon schema. Required fields missing? ### \"How do I check what Lexicons are loaded?\" Go to Settings in the admin UI, or query via MCP:","headings":[]},{"path":"/reference/aggregations","title":"Aggregations","group":"Reference","content":"Aggregations Every record type has an aggregation query: . For example, aggregate records with . Aggregation queries are public; no authentication required. ## Basic Aggregation Group by a field to count occurrences: ## Filtering & Sorting Use to filter records, to sort by count, and to cap results. Get a user's top 10 artists for 2025: ## Multiple Fields Group by multiple fields. Get top tracks with their artists: ## Date Truncation Group datetime fields by time intervals: , , , or . Get plays per month: ## Reference ### Query Structure - - Aggregation query for any record type - (required) - Array of fields to group by, with optional for datetime fields - (optional) - Filter conditions - (optional) - Sort by ( or ) - (optional) - Maximum groups to return (default: 100) ### Available Columns Beyond record fields, group by: , , , , , ### Validation - Date intervals can only be applied to datetime fields - Maximum 5 groupBy fields per query","headings":[]},{"path":"/reference/subscriptions","title":"Subscriptions","group":"Reference","content":"Subscriptions Subscriptions deliver real-time updates when records are created, updated, or deleted. The server pushes events over WebSocket instead of requiring polling. Connect to using the \\1 protocol. ## Basic Subscription ## Field Selection Request only the fields you need: Response: ## Named Subscription ## Subscription Types Each collection has three subscription fields: - - Fires when a new record is created - - Fires when a record is updated - - Fires when a record is deleted ### Examples ## With Joins Subscriptions support joins like queries: Response: ## WebSocket Protocol ### 1. Connect ### 2. Initialize ### 3. Subscribe ### 4. Receive Events ### 5. Unsubscribe","headings":[]},{"path":"/reference/blobs","title":"Blobs","group":"Reference","content":"Working with Blobs Blobs store binary data like images, videos, and files. Upload separately and reference by CID (Content Identifier). ## Upload Blob Upload binary data encoded as base64: Response: ## Blob Reference A blob reference contains: - : CID of the blob content - : MIME type (e.g., , ) - : Size in bytes ## Using Blobs in Records ### Profile Avatar ### Profile Banner ## Blob URLs Blobs generate CDN URLs automatically. Use the field with optional presets: ### Default URL Returns: ### Avatar Preset Returns: ### Banner Preset Returns: ## Available Presets - - Optimized for profile avatars (square, small) - - Optimized for profile banners (wide, medium) - - Thumbnails in feed view - - Full size images in feed (default) ## Complete Example: Update Profile with Images ### Step 1: Upload Avatar Variables: Response: ### Step 2: Upload Banner Variables: Response: ### Step 3: Update Profile Response: ## JavaScript Example","headings":[]},{"path":"/reference/variables","title":"Variables","group":"Reference","content":"Variables GraphQL variables parameterize queries and mutations for reusability and security. ## Basic Variables ### Query with Variables Variables: ### Mutation with Variables Variables: ## Multiple Variables Variables: ## Optional Variables Use default values for optional variables: Variables: Or omit variables to use defaults: ## Blob Upload with Variables Variables: ## Update Profile with Variables Variables: ## Using in HTTP Requests Send variables in the HTTP request body:","headings":[]},{"path":"/reference/mcp","title":"MCP","group":"Reference","content":"MCP Server Quickslice provides an MCP (Model Context Protocol) server that lets AI assistants query ATProto data directly. ## Endpoint Every Quickslice instance exposes MCP at . For example: ## Setup ### Claude Code ### Other MCP Clients Point any MCP-compatible client at the endpoint using HTTP transport. ## Available Tools | Tool | Description | |------|-------------| | | List all registered lexicons | | | Get full lexicon definition by NSID | | | List available GraphQL queries | | | Get OAuth flows, scopes, and endpoints | | | Get server version and features | | | Get full GraphQL schema | | | Execute a GraphQL query | ## Example Prompts Once connected, you can ask things like: - \"What lexicons are registered?\" - \"Show me the schema for xyz.statusphere.status\" - \"Query the latest 10 statusphere statuses\" - \"What GraphQL queries are available?\" - \"What OAuth scopes does this server support?\"","headings":[]}]
-166
www/priv/search.js
··· 1 - // Search functionality for docs site 2 - (function() { 3 - let fuse = null; 4 - let searchIndex = null; 5 - let activeIndex = -1; 6 - 7 - const input = document.getElementById('search-input'); 8 - const results = document.getElementById('search-results'); 9 - 10 - if (!input || !results) return; 11 - 12 - // Load search index on first focus 13 - input.addEventListener('focus', loadIndex); 14 - 15 - // Handle input 16 - input.addEventListener('input', debounce(handleSearch, 150)); 17 - 18 - // Handle keyboard navigation 19 - input.addEventListener('keydown', handleKeydown); 20 - 21 - // Close results when clicking outside 22 - document.addEventListener('click', function(e) { 23 - if (!e.target.closest('.search-container')) { 24 - closeResults(); 25 - } 26 - }); 27 - 28 - async function loadIndex() { 29 - if (searchIndex) return; 30 - 31 - try { 32 - const response = await fetch('/search-index.json'); 33 - searchIndex = await response.json(); 34 - 35 - fuse = new Fuse(searchIndex, { 36 - keys: [ 37 - { name: 'title', weight: 3 }, 38 - { name: 'headings.text', weight: 2 }, 39 - { name: 'content', weight: 1 } 40 - ], 41 - includeMatches: true, 42 - threshold: 0.4, 43 - ignoreLocation: true, 44 - minMatchCharLength: 2 45 - }); 46 - } catch (err) { 47 - console.error('Failed to load search index:', err); 48 - } 49 - } 50 - 51 - function handleSearch() { 52 - const query = input.value.trim(); 53 - 54 - if (!query || !fuse) { 55 - closeResults(); 56 - return; 57 - } 58 - 59 - const matches = fuse.search(query, { limit: 8 }); 60 - 61 - if (matches.length === 0) { 62 - results.innerHTML = '<div class="search-no-results">No results found</div>'; 63 - results.classList.add('open'); 64 - activeIndex = -1; 65 - return; 66 - } 67 - 68 - results.innerHTML = matches.map((match, i) => { 69 - const item = match.item; 70 - const snippet = getSnippet(match, query); 71 - 72 - return ` 73 - <a href="${item.path}" class="search-result" data-index="${i}"> 74 - <div class="search-result-title">${escapeHtml(item.title)}</div> 75 - <div class="search-result-group">${escapeHtml(item.group)}</div> 76 - ${snippet ? `<div class="search-result-snippet">${snippet}</div>` : ''} 77 - </a> 78 - `; 79 - }).join(''); 80 - 81 - results.classList.add('open'); 82 - activeIndex = -1; 83 - } 84 - 85 - function getSnippet(match, query) { 86 - // Find content match 87 - const contentMatch = match.matches?.find(m => m.key === 'content'); 88 - if (!contentMatch) return null; 89 - 90 - const content = match.item.content; 91 - const indices = contentMatch.indices[0]; 92 - if (!indices) return null; 93 - 94 - const start = Math.max(0, indices[0] - 30); 95 - const end = Math.min(content.length, indices[1] + 50); 96 - 97 - let snippet = content.slice(start, end); 98 - if (start > 0) snippet = '...' + snippet; 99 - if (end < content.length) snippet = snippet + '...'; 100 - 101 - // Highlight match 102 - const queryLower = query.toLowerCase(); 103 - const snippetLower = snippet.toLowerCase(); 104 - const matchStart = snippetLower.indexOf(queryLower); 105 - 106 - if (matchStart >= 0) { 107 - const before = escapeHtml(snippet.slice(0, matchStart)); 108 - const matched = escapeHtml(snippet.slice(matchStart, matchStart + query.length)); 109 - const after = escapeHtml(snippet.slice(matchStart + query.length)); 110 - return before + '<mark>' + matched + '</mark>' + after; 111 - } 112 - 113 - return escapeHtml(snippet); 114 - } 115 - 116 - function handleKeydown(e) { 117 - const items = results.querySelectorAll('.search-result'); 118 - if (!items.length) return; 119 - 120 - if (e.key === 'ArrowDown') { 121 - e.preventDefault(); 122 - activeIndex = Math.min(activeIndex + 1, items.length - 1); 123 - updateActive(items); 124 - } else if (e.key === 'ArrowUp') { 125 - e.preventDefault(); 126 - activeIndex = Math.max(activeIndex - 1, 0); 127 - updateActive(items); 128 - } else if (e.key === 'Enter' && activeIndex >= 0) { 129 - e.preventDefault(); 130 - items[activeIndex].click(); 131 - } else if (e.key === 'Escape') { 132 - closeResults(); 133 - input.blur(); 134 - } 135 - } 136 - 137 - function updateActive(items) { 138 - items.forEach((item, i) => { 139 - item.classList.toggle('active', i === activeIndex); 140 - }); 141 - 142 - if (activeIndex >= 0) { 143 - items[activeIndex].scrollIntoView({ block: 'nearest' }); 144 - } 145 - } 146 - 147 - function closeResults() { 148 - results.classList.remove('open'); 149 - results.innerHTML = ''; 150 - activeIndex = -1; 151 - } 152 - 153 - function escapeHtml(text) { 154 - const div = document.createElement('div'); 155 - div.textContent = text; 156 - return div.innerHTML; 157 - } 158 - 159 - function debounce(fn, delay) { 160 - let timeout; 161 - return function(...args) { 162 - clearTimeout(timeout); 163 - timeout = setTimeout(() => fn.apply(this, args), delay); 164 - }; 165 - } 166 - })();
-748
www/priv/styles.css
··· 1 - @import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Barlow:wght@300;400;500;600&display=swap'); 2 - 3 - :root { 4 - /* Colors */ 5 - --bg-base: oklab(0.15 0 0); 6 - --bg-elevated: oklab(0.22 0 0); 7 - --bg-subtle: oklab(0.25 0 0); 8 - --border: oklab(0.30 0 0); 9 - --text-primary: oklab(0.98 0 0); 10 - --text-secondary: oklab(0.87 0 0); 11 - --text-muted: oklab(0.72 0 0); 12 - --text-dim: oklab(0.55 0 0); 13 - --text-hover: oklab(0.92 0 0); 14 - --text-comment: oklab(0.45 0 0); 15 - 16 - /* Accent colors (matched to logo) */ 17 - /* Logo top: #FF6347 → #FF4500 (red-orange) */ 18 - --accent-red: oklab(0.70 0.16 0.13); 19 - --accent-orange: oklab(0.68 0.18 0.15); 20 - /* Logo middle: #00CED1 → #4682B4 (cyan-blue) */ 21 - --accent-cyan: oklab(0.78 -0.10 -0.06); 22 - --accent-cyan-hover: oklab(0.84 -0.08 -0.04); 23 - --accent-blue: oklab(0.60 -0.04 -0.12); 24 - /* Logo bottom: #32CD32 (lime green) */ 25 - --accent-green: oklab(0.73 -0.19 0.14); 26 - 27 - /* Overlay */ 28 - --overlay: oklab(0 0 0 / 0.6); 29 - 30 - /* Font weights */ 31 - --font-light: 300; 32 - --font-normal: 400; 33 - --font-medium: 500; 34 - --font-semibold: 600; 35 - 36 - /* Fonts */ 37 - --font-body: 'Barlow', -apple-system, BlinkMacSystemFont, sans-serif; 38 - --font-display: 'Bebas Neue', Impact, sans-serif; 39 - 40 - /* Font sizes */ 41 - --text-xs: 0.8125rem; 42 - --text-sm: 0.9375rem; 43 - --text-base: 1rem; 44 - --text-lg: 1.125rem; 45 - --text-xl: 1.375rem; 46 - --text-2xl: 1.75rem; 47 - --text-3xl: 2rem; 48 - --text-4xl: 3.5rem; 49 - 50 - /* Radii */ 51 - --radius-sm: 4px; 52 - --radius-md: 8px; 53 - --radius-lg: 12px; 54 - --radius-xl: 16px; 55 - 56 - /* Spacing */ 57 - --space-1: 0.25rem; 58 - --space-2: 0.5rem; 59 - --space-3: 0.75rem; 60 - --space-4: 1rem; 61 - --space-5: 1.25rem; 62 - --space-6: 1.5rem; 63 - --space-8: 2rem; 64 - --space-10: 2.5rem; 65 - --space-12: 3rem; 66 - --space-16: 4rem; 67 - 68 - /* Sidebar */ 69 - --sidebar-width: 260px; 70 - --sidebar-width-mobile: 280px; 71 - } 72 - 73 - * { box-sizing: border-box; margin: 0; padding: 0; } 74 - 75 - html, body { 76 - height: 100%; 77 - overflow: hidden; 78 - } 79 - 80 - body { 81 - font-family: var(--font-body); 82 - font-size: var(--text-base); 83 - font-weight: var(--font-normal); 84 - line-height: 1.7; 85 - color: var(--text-secondary); 86 - background: var(--bg-base); 87 - } 88 - 89 - .container { 90 - display: flex; 91 - height: 100vh; 92 - overflow: hidden; 93 - } 94 - 95 - .sidebar { 96 - width: var(--sidebar-width); 97 - padding: var(--space-5) var(--space-3); 98 - background: var(--bg-base); 99 - overflow-y: auto; 100 - flex-shrink: 0; 101 - } 102 - 103 - .sidebar-brand { 104 - display: flex; 105 - align-items: center; 106 - gap: var(--space-3); 107 - padding: var(--space-1) var(--space-3); 108 - margin-bottom: var(--space-5); 109 - } 110 - 111 - .sidebar-logo { 112 - width: 32px; 113 - height: 32px; 114 - flex-shrink: 0; 115 - } 116 - 117 - .sidebar-title { 118 - font-family: var(--font-display); 119 - font-size: var(--text-xl); 120 - font-weight: var(--font-normal); 121 - letter-spacing: 0.04em; 122 - text-transform: uppercase; 123 - color: var(--text-primary); 124 - } 125 - 126 - .sidebar-version { 127 - font-size: var(--text-xs); 128 - color: var(--text-muted); 129 - margin-left: var(--space-2); 130 - } 131 - 132 - .tangled-link { 133 - display: flex !important; 134 - align-items: center; 135 - gap: var(--space-2); 136 - padding: var(--space-1) var(--space-3); 137 - margin-bottom: var(--space-3); 138 - font-size: var(--text-xs); 139 - color: var(--text-dim); 140 - opacity: 0.6; 141 - transition: opacity 0.15s ease; 142 - } 143 - 144 - .tangled-link:hover { 145 - opacity: 1; 146 - } 147 - 148 - .tangled-link .sidebar-logo { 149 - width: 14px; 150 - height: 14px; 151 - } 152 - 153 - .sidebar ul { list-style: none; } 154 - 155 - .sidebar li { margin: 0; } 156 - 157 - .sidebar-group { 158 - margin-bottom: var(--space-4); 159 - } 160 - 161 - .sidebar-group-label { 162 - font-size: var(--text-xs); 163 - font-weight: var(--font-semibold); 164 - color: var(--text-muted); 165 - text-transform: uppercase; 166 - letter-spacing: 0.05em; 167 - padding: var(--space-2) var(--space-3); 168 - margin-bottom: var(--space-1); 169 - } 170 - 171 - .sidebar a { 172 - display: block; 173 - padding: var(--space-1) var(--space-3); 174 - color: var(--text-dim); 175 - text-decoration: none; 176 - border-radius: var(--radius-md); 177 - font-size: var(--text-sm); 178 - font-weight: var(--font-medium); 179 - transition: color 0.15s ease; 180 - outline: none; 181 - } 182 - 183 - .sidebar a:hover, 184 - .sidebar a:focus-visible { 185 - color: var(--text-hover); 186 - } 187 - 188 - .sidebar a.active { 189 - color: var(--text-primary); 190 - text-decoration: underline; 191 - text-decoration-color: var(--accent-cyan); 192 - text-decoration-thickness: 3px; 193 - text-underline-offset: 4px; 194 - } 195 - 196 - .content { 197 - flex: 1; 198 - margin: var(--space-3); 199 - margin-left: 0; 200 - padding: var(--space-10) var(--space-12); 201 - background: var(--bg-elevated); 202 - border: 1px solid var(--border); 203 - border-radius: var(--radius-xl); 204 - overflow-y: auto; 205 - display: flex; 206 - justify-content: center; 207 - gap: var(--space-8); 208 - } 209 - 210 - .content > div { 211 - max-width: 720px; 212 - width: 100%; 213 - } 214 - 215 - .content > div::after { 216 - content: ''; 217 - display: block; 218 - height: var(--space-16); 219 - } 220 - 221 - .content h1 { 222 - font-family: var(--font-display); 223 - font-size: var(--text-4xl); 224 - font-weight: var(--font-normal); 225 - letter-spacing: 0.05em; 226 - line-height: 1; 227 - color: var(--text-primary); 228 - text-transform: uppercase; 229 - margin-bottom: var(--space-3); 230 - } 231 - 232 - .content > div > p:first-of-type { 233 - font-size: var(--text-lg); 234 - color: var(--text-muted); 235 - margin-bottom: var(--space-8); 236 - } 237 - 238 - .content h2, 239 - .content h3 { 240 - position: relative; 241 - } 242 - 243 - .content h2 { 244 - font-family: var(--font-display); 245 - font-size: var(--text-2xl); 246 - font-weight: var(--font-normal); 247 - letter-spacing: 0.04em; 248 - line-height: 1.1; 249 - color: var(--text-primary); 250 - text-transform: uppercase; 251 - margin: var(--space-10) 0 var(--space-4); 252 - } 253 - 254 - .content h3 { 255 - font-family: var(--font-body); 256 - font-size: var(--text-lg); 257 - font-weight: var(--font-semibold); 258 - color: var(--text-primary); 259 - margin: var(--space-8) 0 var(--space-3); 260 - } 261 - 262 - .content h2 .header-anchor, 263 - .content h3 .header-anchor { 264 - position: absolute; 265 - left: -1em; 266 - padding-right: 1em; 267 - opacity: 0; 268 - color: var(--text-muted); 269 - text-decoration: none; 270 - transition: opacity 0.15s ease; 271 - } 272 - 273 - .content h2:hover .header-anchor, 274 - .content h3:hover .header-anchor { 275 - opacity: 1; 276 - } 277 - 278 - .header-anchor:hover { 279 - color: var(--accent-cyan); 280 - } 281 - 282 - .content p { margin: var(--space-4) 0; } 283 - 284 - .content pre { 285 - background: var(--bg-base) !important; 286 - padding: var(--space-4) var(--space-5); 287 - overflow-x: auto; 288 - border-radius: var(--radius-md); 289 - margin: var(--space-5) 0; 290 - border: 1px solid var(--border); 291 - font-size: var(--text-sm); 292 - } 293 - 294 - /* Shiki generates pre.shiki */ 295 - .content pre.shiki code { 296 - background: none; 297 - padding: 0; 298 - } 299 - 300 - .content code { 301 - background: var(--border); 302 - padding: 0.15em 0.4em; 303 - border-radius: var(--radius-sm); 304 - font-size: var(--text-sm); 305 - color: var(--accent-cyan); 306 - } 307 - 308 - .content pre code { 309 - background: none; 310 - padding: 0; 311 - color: inherit; 312 - } 313 - 314 - .content ul, .content ol { 315 - margin: var(--space-4) 0; 316 - padding-left: var(--space-6); 317 - } 318 - 319 - .content li { margin: var(--space-2) 0; } 320 - 321 - .content blockquote { 322 - margin: var(--space-6) 0; 323 - padding: var(--space-4) var(--space-5); 324 - background: var(--bg-subtle); 325 - border: 1px solid var(--border); 326 - border-left: 3px solid var(--accent-cyan); 327 - border-radius: 0 var(--radius-lg) var(--radius-lg) 0; 328 - } 329 - 330 - .content blockquote p { margin: 0; } 331 - 332 - .content > div a { 333 - color: var(--accent-cyan); 334 - text-decoration: underline; 335 - text-underline-offset: 2px; 336 - transition: color 0.15s ease; 337 - } 338 - 339 - .content > div a:hover { 340 - color: var(--accent-cyan-hover); 341 - } 342 - 343 - .content strong { 344 - color: var(--text-primary); 345 - font-weight: var(--font-semibold); 346 - } 347 - 348 - .content table { 349 - border-collapse: collapse; 350 - margin: var(--space-6) 0; 351 - width: 100%; 352 - max-width: 100%; 353 - font-size: var(--text-xs); 354 - } 355 - 356 - .content th, .content td { 357 - border: 1px solid var(--border); 358 - padding: var(--space-2) var(--space-3); 359 - text-align: left; 360 - white-space: nowrap; 361 - } 362 - 363 - .content td:last-child { 364 - white-space: normal; 365 - } 366 - 367 - .content th { 368 - background: var(--bg-subtle); 369 - font-weight: var(--font-semibold); 370 - color: var(--text-primary); 371 - } 372 - 373 - /* Mobile menu button */ 374 - .menu-toggle { 375 - display: none; 376 - position: fixed; 377 - top: var(--space-4); 378 - right: var(--space-4); 379 - z-index: 1000; 380 - background: var(--bg-elevated); 381 - border: 1px solid var(--border); 382 - border-radius: var(--radius-md); 383 - padding: var(--space-2); 384 - cursor: pointer; 385 - color: var(--text-primary); 386 - } 387 - 388 - .menu-toggle svg { 389 - width: 24px; 390 - height: 24px; 391 - display: block; 392 - } 393 - 394 - /* Mobile backdrop */ 395 - .sidebar-backdrop { 396 - display: none; 397 - position: fixed; 398 - inset: 0; 399 - background: var(--overlay); 400 - z-index: 99; 401 - } 402 - 403 - /* Mobile header - sticky brand bar */ 404 - .mobile-header { 405 - display: none; 406 - } 407 - 408 - /* Mobile styles */ 409 - @media (max-width: 767px) { 410 - html, body { 411 - overflow: auto; 412 - } 413 - 414 - .mobile-header { 415 - display: flex; 416 - align-items: center; 417 - justify-content: space-between; 418 - position: sticky; 419 - top: 0; 420 - z-index: 50; 421 - padding: var(--space-3) var(--space-4); 422 - background: var(--bg-base); 423 - border-bottom: 1px solid var(--border); 424 - } 425 - 426 - .mobile-header-brand { 427 - display: flex; 428 - align-items: center; 429 - gap: var(--space-3); 430 - } 431 - 432 - .mobile-header .sidebar-logo { 433 - width: 28px; 434 - height: 28px; 435 - } 436 - 437 - .mobile-header .sidebar-title { 438 - font-size: var(--text-lg); 439 - } 440 - 441 - .mobile-header .sidebar-version { 442 - margin-left: var(--space-1); 443 - } 444 - 445 - .mobile-header .menu-toggle { 446 - display: block; 447 - position: static; 448 - background: transparent; 449 - border: none; 450 - padding: var(--space-2); 451 - } 452 - 453 - .container { 454 - flex-direction: column; 455 - height: auto; 456 - min-height: 100vh; 457 - overflow: visible; 458 - } 459 - 460 - .sidebar { 461 - position: fixed; 462 - top: 0; 463 - left: 0; 464 - height: 100vh; 465 - width: var(--sidebar-width-mobile); 466 - z-index: 100; 467 - transform: translateX(-100%); 468 - transition: transform 0.3s ease; 469 - border-right: 1px solid var(--border); 470 - } 471 - 472 - .sidebar.open { 473 - transform: translateX(0); 474 - } 475 - 476 - .sidebar-backdrop.open { 477 - display: block; 478 - } 479 - 480 - .content { 481 - margin: 0; 482 - border-radius: 0; 483 - border: none; 484 - padding: var(--space-6) var(--space-5) var(--space-8); 485 - min-height: 100vh; 486 - } 487 - 488 - .content > div { 489 - max-width: 100%; 490 - } 491 - 492 - .content h1 { 493 - font-size: var(--text-3xl); 494 - } 495 - 496 - .content h2 { 497 - font-size: var(--text-xl); 498 - } 499 - 500 - .content pre { 501 - padding: var(--space-3) var(--space-4); 502 - font-size: var(--text-xs); 503 - } 504 - 505 - .content table { 506 - display: block; 507 - overflow-x: auto; 508 - -webkit-overflow-scrolling: touch; 509 - } 510 - } 511 - 512 - /* Syntax highlighting - logo colors */ 513 - .hl-keyword { color: var(--accent-red); font-weight: var(--font-medium); } 514 - .hl-type { color: var(--accent-cyan); } 515 - .hl-property { color: var(--accent-blue); } 516 - .hl-string { color: var(--accent-green); } 517 - .hl-number { color: var(--accent-cyan); } 518 - .hl-variable { color: var(--accent-orange); } 519 - .hl-function { color: var(--accent-cyan); } 520 - .hl-directive { color: var(--accent-blue); font-style: italic; } 521 - .hl-comment { color: var(--text-comment); font-style: italic; } 522 - .hl-punctuation { color: var(--text-dim); } 523 - 524 - /* Minimap - right side navigation inside content */ 525 - .minimap { 526 - width: 180px; 527 - flex-shrink: 0; 528 - display: flex; 529 - flex-direction: column; 530 - gap: var(--space-1); 531 - position: sticky; 532 - top: var(--space-10); 533 - align-self: flex-start; 534 - max-height: calc(100vh - var(--space-16)); 535 - overflow-y: auto; 536 - padding-bottom: 30vh; 537 - } 538 - 539 - .minimap-header { 540 - font-size: var(--text-sm); 541 - font-weight: var(--font-semibold); 542 - color: var(--text-muted); 543 - padding: var(--space-1) var(--space-2); 544 - margin-bottom: var(--space-2); 545 - } 546 - 547 - .minimap-item { 548 - display: block; 549 - padding: var(--space-1) var(--space-3); 550 - color: var(--text-dim); 551 - text-decoration: none; 552 - border-radius: var(--radius-md); 553 - font-size: var(--text-sm); 554 - font-weight: var(--font-medium); 555 - transition: color 0.15s ease; 556 - outline: none; 557 - } 558 - 559 - .minimap-item:hover, 560 - .minimap-item:focus-visible { 561 - color: var(--text-hover); 562 - } 563 - 564 - .minimap-item-sub { 565 - padding-left: var(--space-5); 566 - font-size: var(--text-xs); 567 - } 568 - 569 - .minimap-item-active { 570 - color: var(--text-primary); 571 - text-decoration: underline; 572 - text-decoration-color: var(--accent-cyan); 573 - text-decoration-thickness: 3px; 574 - text-underline-offset: 4px; 575 - } 576 - 577 - /* Hide minimap on tablet and mobile */ 578 - @media (max-width: 1024px) { 579 - .minimap { 580 - display: none; 581 - } 582 - } 583 - 584 - /* Page navigation (prev/next) */ 585 - .page-nav { 586 - display: flex; 587 - gap: var(--space-4); 588 - margin-top: var(--space-12); 589 - padding-top: var(--space-8); 590 - border-top: 1px solid var(--border); 591 - } 592 - 593 - .page-nav-link { 594 - flex: 1; 595 - display: flex; 596 - flex-direction: column; 597 - gap: var(--space-1); 598 - padding: var(--space-4) var(--space-5); 599 - background: var(--bg-subtle); 600 - border: 1px solid var(--border); 601 - border-radius: var(--radius-lg); 602 - text-decoration: none; 603 - transition: border-color 0.15s ease, background 0.15s ease; 604 - } 605 - 606 - .content > div .page-nav-link, 607 - .content > div .page-nav-link:hover { 608 - text-decoration: none; 609 - } 610 - 611 - .page-nav-link:hover { 612 - border-color: var(--text-dim); 613 - background: oklab(0.30 0 0); 614 - } 615 - 616 - .page-nav-next { 617 - text-align: right; 618 - } 619 - 620 - .page-nav-empty { 621 - visibility: hidden; 622 - } 623 - 624 - .page-nav-label { 625 - font-size: var(--text-xs); 626 - font-weight: var(--font-semibold); 627 - color: var(--text-muted); 628 - text-transform: uppercase; 629 - letter-spacing: 0.05em; 630 - } 631 - 632 - .page-nav-title { 633 - font-size: var(--text-base); 634 - font-weight: var(--font-medium); 635 - color: var(--text-primary); 636 - } 637 - 638 - @media (max-width: 480px) { 639 - .page-nav { 640 - flex-direction: column; 641 - } 642 - 643 - .page-nav-next { 644 - text-align: left; 645 - } 646 - 647 - .page-nav-empty { 648 - display: none; 649 - } 650 - } 651 - 652 - /* Search */ 653 - .search-container { 654 - position: relative; 655 - padding: 0 var(--space-3); 656 - margin-bottom: var(--space-4); 657 - } 658 - 659 - .search-input { 660 - width: 100%; 661 - padding: var(--space-2) var(--space-3); 662 - background: var(--bg-elevated); 663 - border: 1px solid var(--border); 664 - border-radius: var(--radius-md); 665 - color: var(--text-primary); 666 - font-family: var(--font-body); 667 - font-size: var(--text-sm); 668 - outline: none; 669 - transition: border-color 0.15s ease; 670 - } 671 - 672 - .search-input::placeholder { 673 - color: var(--text-dim); 674 - } 675 - 676 - .search-input:focus { 677 - border-color: var(--text-muted); 678 - } 679 - 680 - .search-results { 681 - position: absolute; 682 - top: 100%; 683 - left: var(--space-3); 684 - right: var(--space-3); 685 - margin-top: var(--space-1); 686 - background: var(--bg-elevated); 687 - border: 1px solid var(--border); 688 - border-radius: var(--radius-md); 689 - max-height: 300px; 690 - overflow-y: auto; 691 - z-index: 50; 692 - display: none; 693 - } 694 - 695 - .search-results.open { 696 - display: block; 697 - } 698 - 699 - .search-result { 700 - display: block; 701 - padding: var(--space-2) var(--space-3); 702 - text-decoration: none; 703 - border-bottom: 1px solid var(--border); 704 - transition: background 0.15s ease; 705 - } 706 - 707 - .search-result:last-child { 708 - border-bottom: none; 709 - } 710 - 711 - .search-result:hover, 712 - .search-result.active { 713 - background: oklab(0.30 0 0); 714 - } 715 - 716 - .search-result-title { 717 - color: var(--text-primary); 718 - font-weight: var(--font-medium); 719 - font-size: var(--text-sm); 720 - } 721 - 722 - .search-result-group { 723 - color: var(--text-dim); 724 - font-size: var(--text-xs); 725 - } 726 - 727 - .search-result-snippet { 728 - color: var(--text-muted); 729 - font-size: var(--text-xs); 730 - margin-top: var(--space-1); 731 - overflow: hidden; 732 - text-overflow: ellipsis; 733 - white-space: nowrap; 734 - } 735 - 736 - .search-result-snippet mark { 737 - background: var(--accent-cyan); 738 - color: var(--bg-base); 739 - padding: 0 2px; 740 - border-radius: 2px; 741 - } 742 - 743 - .search-no-results { 744 - padding: var(--space-3); 745 - color: var(--text-muted); 746 - font-size: var(--text-sm); 747 - text-align: center; 748 - }
-287
www/priv/tutorial/index.html
··· 1 - <!doctype html> 2 - <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport"><title>quickslice - Tutorial</title><meta content="quickslice - Tutorial" property="og:title"><meta content="https://quickslice.slices.network/og/default.webp" property="og:image"><meta content="website" property="og:type"><meta content="summary_large_image" name="twitter:card"><link href="/styles.css" rel="stylesheet"></head><body><header class="mobile-header"><div class="mobile-header-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><button aria-label="Toggle menu" class="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="6" y2="6"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="12" y2="12"></line><line xmlns="http://www.w3.org/2000/svg" x1="3" x2="21" y1="18" y2="18"></line></svg></button></header><div class="sidebar-backdrop"></div><div class="container"><aside class="sidebar"><div class="sidebar-brand"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(64, 64)"><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="-28" fill="#FF5722" rx="50" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="0" fill="#00ACC1" rx="60" ry="20"></ellipse><ellipse xmlns="http://www.w3.org/2000/svg" cx="0" cy="28" fill="#32CD32" rx="40" ry="20"></ellipse></g></svg><span class="sidebar-title">quickslice</span><span class="sidebar-version">v0.17.1</span></div><a class="tangled-link" href="https://tangled.sh"><svg xmlns="http://www.w3.org/2000/svg" class="sidebar-logo" viewBox="0 0 24.122343 23.274094" xmlns="http://www.w3.org/2000/svg"><g xmlns="http://www.w3.org/2000/svg" transform="translate(-0.4388285,-0.8629527)"><path xmlns="http://www.w3.org/2000/svg" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" fill="currentColor"></path></g></svg><span>tangled.sh</span></a><div class="search-container"><input class="search-input" id="search-input" placeholder="Search docs..." type="text"><div class="search-results" id="search-results"></div></div><nav><div class="sidebar-group"><div class="sidebar-group-label">Getting Started</div><ul><li><a href="/">Introduction</a></li><li><a class="active" href="/tutorial">Tutorial</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Guides</div><ul><li><a href="/guides/queries">Queries</a></li><li><a href="/guides/joins">Joins</a></li><li><a href="/guides/mutations">Mutations</a></li><li><a href="/guides/authentication">Authentication</a></li><li><a href="/guides/deployment">Deployment</a></li><li><a href="/guides/patterns">Patterns</a></li><li><a href="/guides/troubleshooting">Troubleshooting</a></li></ul></div><div class="sidebar-group"><div class="sidebar-group-label">Reference</div><ul><li><a href="/reference/aggregations">Aggregations</a></li><li><a href="/reference/subscriptions">Subscriptions</a></li><li><a href="/reference/blobs">Blobs</a></li><li><a href="/reference/variables">Variables</a></li><li><a href="/reference/mcp">MCP</a></li></ul></div></nav></aside><main class="content"><div><div><h1 id="Tutorial-Build-Statusphere-with-Quickslice">Tutorial: Build Statusphere with Quickslice</h1> 3 - <p>Let's build Statusphere, an app where users share their current status as an emoji. This is the same app from the <a href="https://atproto.com/guides/applications">AT Protocol docs</a>, but using Quickslice as the AppView.</p> 4 - <p>Along the way, we'll show what you'd write manually versus what Quickslice handles automatically.</p> 5 - <p><strong>Try it live:</strong> A working example is running at <a href="https://stackblitz.com/edit/stackblitz-starters-g3uwhweu?file=index.html">StackBlitz</a>, connected to a slice at <a href="https://xyzstatusphere.slices.network">xyzstatusphere.slices.network</a> with the <code>xyz.statusphere.status</code> lexicon.</p> 6 - <h2 id="What-Were-Building"><a href="#What-Were-Building" class="header-anchor">#</a>What We're Building</h2> 7 - <p>Statusphere lets users:</p> 8 - <ul> 9 - <li>Log in with their AT Protocol identity</li> 10 - <li>Set their status as an emoji</li> 11 - <li>See a feed of everyone's statuses with profile information</li> 12 - </ul> 13 - <p>By the end of this tutorial, you'll understand how Quickslice eliminates the boilerplate of building an AppView.</p> 14 - <h2 id="Step-1-Project-Setup-and-Importing-Lexicons"><a href="#Step-1-Project-Setup-and-Importing-Lexicons" class="header-anchor">#</a>Step 1: Project Setup and Importing Lexicons</h2> 15 - <p>Every AT Protocol app starts with Lexicons. Here's the Lexicon for a status record:</p> 16 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#9A9A9A">{</span></span> 17 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">lexicon</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 1</span><span style="color:#9A9A9A">,</span></span> 18 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">id</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">xyz.statusphere.status</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 19 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">defs</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 20 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">main</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 21 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">record</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 22 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">key</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">tid</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 23 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">record</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 24 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">object</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 25 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">required</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [</span><span style="color:#9A9A9A">"</span><span style="color:#8CDB8C">status</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">createdAt</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">],</span></span> 26 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">properties</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 27 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">status</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span></span> 28 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">string</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span></span> 29 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">minLength</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 1</span><span style="color:#9A9A9A">,</span></span> 30 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">maxGraphemes</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 1</span><span style="color:#9A9A9A">,</span></span> 31 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">maxLength</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 32</span></span> 32 - <span class="line"><span style="color:#9A9A9A"> },</span></span> 33 - <span class="line"><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">createdAt</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">type</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">string</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">,</span><span style="color:#9A9A9A"> "</span><span style="color:#7EB3D8">format</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">datetime</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span></span> 34 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 35 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 36 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 37 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 38 - <span class="line"><span style="color:#9A9A9A">}</span></span> 39 - <span class="line"></span></code></pre> 40 - <p>Importing this Lexicon into Quickslice triggers three automatic steps:</p> 41 - <ol> 42 - <li><strong>Jetstream registration</strong>: Quickslice tracks <code>xyz.statusphere.status</code> records from the network</li> 43 - <li><strong>Database schema</strong>: Quickslice creates a normalized table with proper columns and indexes</li> 44 - <li><strong>GraphQL types</strong>: Quickslice generates query, mutation, and subscription types</li> 45 - </ol> 46 - <table> 47 - <thead> 48 - <tr> 49 - <th>Without Quickslice</th> 50 - <th>With Quickslice</th> 51 - </tr> 52 - </thead> 53 - <tbody> 54 - <tr> 55 - <td>Write Jetstream connection code</td> 56 - <td>Import your Lexicon</td> 57 - </tr> 58 - <tr> 59 - <td>Filter events for your collection</td> 60 - <td><code>xyz.statusphere.status</code></td> 61 - </tr> 62 - <tr> 63 - <td>Validate incoming records</td> 64 - <td /> 65 - </tr> 66 - <tr> 67 - <td>Design database schema</td> 68 - <td>Quickslice handles the rest.</td> 69 - </tr> 70 - <tr> 71 - <td>Write ingestion logic</td> 72 - <td /> 73 - </tr> 74 - </tbody> 75 - </table> 76 - <h2 id="Step-2-Querying-Status-Records"><a href="#Step-2-Querying-Status-Records" class="header-anchor">#</a>Step 2: Querying Status Records</h2> 77 - <p>Query indexed records with GraphQL. Quickslice generates a query for each Lexicon type using Relay-style connections:</p> 78 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> GetStatuses</span><span style="color:#9A9A9A"> {</span></span> 79 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 80 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span></span> 81 - <span class="line"><span style="color:#DEDEDE"> sortBy</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> [{</span><span style="color:#8CDB8C"> field</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">createdAt</span><span style="color:#9A9A9A">"</span><span style="color:#DEDEDE">, </span><span style="color:#8CDB8C">direction</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> DESC </span><span style="color:#9A9A9A">}]</span></span> 82 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 83 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 84 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 85 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 86 - <span class="line"><span style="color:#DEDEDE"> did</span></span> 87 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 88 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 89 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 90 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 91 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 92 - <span class="line"><span style="color:#9A9A9A">}</span></span> 93 - <span class="line"></span></code></pre> 94 - <p>The <code>edges</code> and <code>nodes</code> pattern comes from <a href="https://relay.dev/graphql/connections.htm">Relay</a>, a GraphQL pagination specification. Each <code>edge</code> contains a <code>node</code> (the record) and a <code>cursor</code> for pagination.</p> 95 - <p>You can filter with <code>where</code> clauses:</p> 96 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> RecentStatuses</span><span style="color:#9A9A9A"> {</span></span> 97 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 98 - <span class="line"><span style="color:#DEDEDE"> first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 10</span></span> 99 - <span class="line"><span style="color:#DEDEDE"> where</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> eq</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> "</span><span style="color:#8CDB8C">👍</span><span style="color:#9A9A9A">"</span><span style="color:#9A9A9A"> }</span><span style="color:#9A9A9A"> }</span></span> 100 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 101 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 102 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 103 - <span class="line"><span style="color:#DEDEDE"> did</span></span> 104 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 105 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 106 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 107 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 108 - <span class="line"><span style="color:#9A9A9A">}</span></span> 109 - <span class="line"></span></code></pre> 110 - <table> 111 - <thead> 112 - <tr> 113 - <th>Without Quickslice</th> 114 - <th>With Quickslice</th> 115 - </tr> 116 - </thead> 117 - <tbody> 118 - <tr> 119 - <td>Design query API</td> 120 - <td>Query is auto-generated:</td> 121 - </tr> 122 - <tr> 123 - <td>Write database queries</td> 124 - <td /> 125 - </tr> 126 - <tr> 127 - <td>Handle pagination logic</td> 128 - <td><code>xyzStatusphereStatus { edges { node { status } } }</code></td> 129 - </tr> 130 - <tr> 131 - <td>Build filtering and sorting</td> 132 - <td /> 133 - </tr> 134 - </tbody> 135 - </table> 136 - <h2 id="Step-3-Joining-Profile-Data"><a href="#Step-3-Joining-Profile-Data" class="header-anchor">#</a>Step 3: Joining Profile Data</h2> 137 - <p>Here Quickslice shines. Every status record has a <code>did</code> field identifying its author. In Bluesky, profile information lives in <code>app.bsky.actor.profile</code> records. Join directly from a status to its author's profile:</p> 138 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">query</span><span style="color:#5EEBD8"> StatusesWithProfiles</span><span style="color:#9A9A9A"> {</span></span> 139 - <span class="line"><span style="color:#DEDEDE"> xyzStatusphereStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">first</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> 20</span><span style="color:#9A9A9A">)</span><span style="color:#9A9A9A"> {</span></span> 140 - <span class="line"><span style="color:#DEDEDE"> edges </span><span style="color:#9A9A9A">{</span></span> 141 - <span class="line"><span style="color:#DEDEDE"> node </span><span style="color:#9A9A9A">{</span></span> 142 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 143 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 144 - <span class="line"><span style="color:#DEDEDE"> appBskyActorProfileByDid </span><span style="color:#9A9A9A">{</span></span> 145 - <span class="line"><span style="color:#DEDEDE"> displayName</span></span> 146 - <span class="line"><span style="color:#DEDEDE"> avatar </span><span style="color:#9A9A9A">{</span><span style="color:#DEDEDE"> url </span><span style="color:#9A9A9A">}</span></span> 147 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 148 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 149 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 150 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 151 - <span class="line"><span style="color:#9A9A9A">}</span></span> 152 - <span class="line"></span></code></pre> 153 - <p>The <code>appBskyActorProfileByDid</code> field is a <strong>DID join</strong>. It follows the <code>did</code> on the status record to find the profile authored by that identity.</p> 154 - <p>Quickslice:</p> 155 - <ul> 156 - <li>Collects DIDs from the status records</li> 157 - <li>Batches them into a single database query (DataLoader pattern)</li> 158 - <li>Joins profile data efficiently</li> 159 - </ul> 160 - <table> 161 - <thead> 162 - <tr> 163 - <th>Without Quickslice</th> 164 - <th>With Quickslice</th> 165 - </tr> 166 - </thead> 167 - <tbody> 168 - <tr> 169 - <td>Collect DIDs from status records</td> 170 - <td>Add join to your query:</td> 171 - </tr> 172 - <tr> 173 - <td>Batch resolve DIDs to profiles</td> 174 - <td /> 175 - </tr> 176 - <tr> 177 - <td>Handle N+1 query problem</td> 178 - <td><code>appBskyActorProfileByDid { displayName }</code></td> 179 - </tr> 180 - <tr> 181 - <td>Write batching logic</td> 182 - <td /> 183 - </tr> 184 - <tr> 185 - <td>Join data in API response</td> 186 - <td /> 187 - </tr> 188 - </tbody> 189 - </table> 190 - <h3 id="Other-Join-Types"><a href="#Other-Join-Types" class="header-anchor">#</a>Other Join Types</h3> 191 - <p>Quickslice also supports:</p> 192 - <ul> 193 - <li><strong>Forward joins</strong>: Follow a URI or strong ref to another record</li> 194 - <li><strong>Reverse joins</strong>: Find all records that reference a given record</li> 195 - </ul> 196 - <p>See the <a href="/guides/joins">Joins Guide</a> for complete documentation.</p> 197 - <h2 id="Step-4-Writing-a-Status-Mutations"><a href="#Step-4-Writing-a-Status-Mutations" class="header-anchor">#</a>Step 4: Writing a Status (Mutations)</h2> 198 - <p>To set a user's status, call a mutation:</p> 199 - <pre class="shiki quickslice" style="background-color:#1c1c1c;color:#dedede" tabindex="0"><code><span class="line"><span style="color:#F07068">mutation</span><span style="color:#5EEBD8"> CreateStatus</span><span style="color:#9A9A9A">(</span><span style="color:#DEDEDE">$status</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> String</span><span style="color:#9A9A9A">!,</span><span style="color:#DEDEDE"> $createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#5EEBD8"> DateTime</span><span style="color:#9A9A9A">!)</span><span style="color:#9A9A9A"> {</span></span> 200 - <span class="line"><span style="color:#DEDEDE"> createXyzStatusphereStatus</span><span style="color:#9A9A9A">(</span></span> 201 - <span class="line"><span style="color:#DEDEDE"> input</span><span style="color:#9A9A9A">:</span><span style="color:#9A9A9A"> {</span><span style="color:#8CDB8C"> status</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $status, </span><span style="color:#8CDB8C">createdAt</span><span style="color:#9A9A9A">:</span><span style="color:#DEDEDE"> $createdAt </span><span style="color:#9A9A9A">}</span></span> 202 - <span class="line"><span style="color:#9A9A9A"> )</span><span style="color:#9A9A9A"> {</span></span> 203 - <span class="line"><span style="color:#DEDEDE"> uri</span></span> 204 - <span class="line"><span style="color:#DEDEDE"> status</span></span> 205 - <span class="line"><span style="color:#DEDEDE"> createdAt</span></span> 206 - <span class="line"><span style="color:#9A9A9A"> }</span></span> 207 - <span class="line"><span style="color:#9A9A9A">}</span></span> 208 - <span class="line"></span></code></pre> 209 - <p>Quickslice:</p> 210 - <ol> 211 - <li><strong>Writes to the user's PDS</strong>: Creates the record in their personal data repository</li> 212 - <li><strong>Indexes optimistically</strong>: The record appears in queries immediately, before Jetstream confirmation</li> 213 - <li><strong>Handles OAuth</strong>: Uses the authenticated session to sign the write</li> 214 - </ol> 215 - <table> 216 - <thead> 217 - <tr> 218 - <th>Without Quickslice</th> 219 - <th>With Quickslice</th> 220 - </tr> 221 - </thead> 222 - <tbody> 223 - <tr> 224 - <td>Get OAuth session/agent</td> 225 - <td>Call the mutation:</td> 226 - </tr> 227 - <tr> 228 - <td>Construct record with $type</td> 229 - <td /> 230 - </tr> 231 - <tr> 232 - <td>Call putRecord XRPC on the PDS</td> 233 - <td><code>createXyzStatusphereStatus(input: { status: &quot;👍&quot; })</code></td> 234 - </tr> 235 - <tr> 236 - <td>Optimistically update local DB</td> 237 - <td /> 238 - </tr> 239 - <tr> 240 - <td>Handle errors</td> 241 - <td /> 242 - </tr> 243 - </tbody> 244 - </table> 245 - <h2 id="Step-5-Authentication"><a href="#Step-5-Authentication" class="header-anchor">#</a>Step 5: Authentication</h2> 246 - <p>Quickslice bridges AT Protocol OAuth. Your frontend initiates login; Quickslice manages the authorization flow:</p> 247 - <ol> 248 - <li>User enters their handle (e.g., <code>alice.bsky.social</code>)</li> 249 - <li>Your app redirects to Quickslice's OAuth endpoint</li> 250 - <li>Quickslice redirects to the user's PDS for authorization</li> 251 - <li>User approves the app</li> 252 - <li>PDS redirects back to Quickslice with an auth code</li> 253 - <li>Quickslice exchanges the code for tokens and establishes a session</li> 254 - </ol> 255 - <p>For authenticated queries and mutations, include auth headers. The exact headers depend on your OAuth flow (DPoP or Bearer token). See the <a href="/guides/authentication">Authentication Guide</a> for details.</p> 256 - <h2 id="Step-6-Deploying-to-Railway"><a href="#Step-6-Deploying-to-Railway" class="header-anchor">#</a>Step 6: Deploying to Railway</h2> 257 - <p>Deploy quickly with Railway:</p> 258 - <ol> 259 - <li>Click the deploy button in the <a href="/guides/deployment">Quickstart Guide</a></li> 260 - <li>Generate an OAuth signing key with <code>goat key generate -t p256</code></li> 261 - <li>Paste the key into the <code>OAUTH_SIGNING_KEY</code> environment variable</li> 262 - <li>Generate a domain and redeploy</li> 263 - <li>Create your admin account by logging in</li> 264 - <li>Upload your Lexicons</li> 265 - </ol> 266 - <p>See <a href="/guides/deployment">Deployment Guide</a> for detailed instructions.</p> 267 - <h2 id="What-Quickslice-Handled"><a href="#What-Quickslice-Handled" class="header-anchor">#</a>What Quickslice Handled</h2> 268 - <p>Quickslice handled:</p> 269 - <ul> 270 - <li><strong>Jetstream connection</strong>: firehose connection, event filtering, reconnection</li> 271 - <li><strong>Record validation</strong>: schema checking against Lexicons</li> 272 - <li><strong>Database schema</strong>: tables, migrations, indexes</li> 273 - <li><strong>Query API</strong>: filtering, sorting, pagination endpoints</li> 274 - <li><strong>Batching</strong>: efficient related-record resolution</li> 275 - <li><strong>Optimistic updates</strong>: indexing before Jetstream confirmation</li> 276 - <li><strong>OAuth flow</strong>: token exchange, session management, DPoP proofs</li> 277 - </ul> 278 - <p>Focus on your application logic; Quickslice handles infrastructure.</p> 279 - <h2 id="Next-Steps"><a href="#Next-Steps" class="header-anchor">#</a>Next Steps</h2> 280 - <ul> 281 - <li><a href="/guides/queries">Queries Guide</a>: Filtering, sorting, and pagination</li> 282 - <li><a href="/guides/joins">Joins Guide</a>: Forward, reverse, and DID joins</li> 283 - <li><a href="/guides/mutations">Mutations Guide</a>: Creating, updating, and deleting records</li> 284 - <li><a href="/guides/authentication">Authentication Guide</a>: Setting up OAuth</li> 285 - <li><a href="/guides/deployment">Deployment Guide</a>: Production configuration</li> 286 - </ul> 287 - </div><nav class="page-nav"><a class="page-nav-link page-nav-prev" href="/"><span class="page-nav-label">Previous</span><span class="page-nav-title">Introduction</span></a><a class="page-nav-link page-nav-next" href="/guides/queries"><span class="page-nav-label">Next</span><span class="page-nav-title">Queries</span></a></nav></div><nav aria-label="Page sections" class="minimap"><div class="minimap-header">On this page</div><a class="minimap-item" data-target-id="What-Were-Building" href="#What-Were-Building">What We&#39;re Building</a><a class="minimap-item" data-target-id="Step-1-Project-Setup-and-Importing-Lexicons" href="#Step-1-Project-Setup-and-Importing-Lexicons">Step 1: Project Setup and Importing Lexicons</a><a class="minimap-item" data-target-id="Step-2-Querying-Status-Records" href="#Step-2-Querying-Status-Records">Step 2: Querying Status Records</a><a class="minimap-item" data-target-id="Step-3-Joining-Profile-Data" href="#Step-3-Joining-Profile-Data">Step 3: Joining Profile Data</a><a class="minimap-item minimap-item-sub" data-target-id="Other-Join-Types" href="#Other-Join-Types">Other Join Types</a><a class="minimap-item" data-target-id="Step-4-Writing-a-Status-Mutations" href="#Step-4-Writing-a-Status-Mutations">Step 4: Writing a Status (Mutations)</a><a class="minimap-item" data-target-id="Step-5-Authentication" href="#Step-5-Authentication">Step 5: Authentication</a><a class="minimap-item" data-target-id="Step-6-Deploying-to-Railway" href="#Step-6-Deploying-to-Railway">Step 6: Deploying to Railway</a><a class="minimap-item" data-target-id="What-Quickslice-Handled" href="#What-Quickslice-Handled">What Quickslice Handled</a><a class="minimap-item" data-target-id="Next-Steps" href="#Next-Steps">Next Steps</a></nav></main></div><script src="/mobile-nav.js"></script><script src="/minimap.js"></script><script src="/fuse.min.js"></script><script src="/search.js"></script></body></html>