PageSourceSearch

https://unbound.cx/_app/immutable/nodes/27.C36-VQ8b.js

js unbound.cx collected 2026-10-05 06:33:34 UTC 12,803 bytes, 23 lines download raw bytes

1import{c as Pe,l as Ue,a as Qe}from"../chunks/BPQKp6QW.js";import{p as qe,t as Me,f as Ae,k as s,a as Ge,b as We,c as Re,u as X,h as i,s as o,i as e,F as Z,e as Be,n as r,r as a}from"../chunks/DpZX5E3g.js";import{s as c}from"../chunks/CWDdQJS0.js";import{p as Ie}from"../chunks/k0oaa6pU.js";import{h as l}from"../chunks/NmVdw5td.js";import{S as Ye}from"../chunks/DbPh46Rb.js";import{f as xe}from"../chunks/BaWzH2I0.js";import{S as Q}from"../chunks/ByyQVFMh.js";import{G as n}from"../chunks/zhos0mf6.js";import{F as Je}from"../chunks/DyTZcQ32.js";import{T as De}from"../chunks/z-rwaKIL.js";import{T as Fe}from"../chunks/DsyAubFB.js";t[Z]="src/routes/[[lang=lang]]/platform/crm/objects/+page.svelte";var Ne=Qe(Be(`<!> <main class="pg-platform-crm-objects"><section class="hero"><div class="wrap hero-grid"><div class="hero-claim"><div class="crumb"><a>Platform</a> / <a>CRM</a> / Objects</div> <div class="eyebrow">CRM</div> <h1 class="h1-long">Build the data model your business actually runs on.</h1> <p class="lede">A cloud database on the same platform that runs your phones and your queue. Custom objects
2          work out of the box, or grow into a highly available, event-driven database. Layouts give
3          your team the screens to manage the data, triggers send notifications, call any platform's
4          API, or update other records, and access goes down to the record type.</p> <div class="ctas"><a class="btn" href="#try">Start free</a> <a class="btn ghost" href="#talk">Talk to us</a></div> <!></div> <div class="hero-visual"><!></div></div></section> <section class="band" id="model"><div class="wrap"><!> <p class="band-line">If your business runs on it, it's an object.</p> <p class="band-note">Properties, policies, equipment, contracts. Create an object in Setup and it gets list and
5        record pages from its layouts, just like people and deals. Add fields to any object,
6        including people, companies, and opportunities. The dynamic layout builder turns one object,
7        or several related ones, into any interface your team needs: detail pages, compact views,
8        admin screens. Publish a layout, roll it back. Each team gets a record type with its own
9        fields, stages, and access.</p></div></section> <section class="section" id="logic"><div class="wrap"><div class="split"><div><div class="eyebrow">Logic</div> <h2>Triggers fire workflows. Scripts are normal JavaScript.</h2> <p class="sub">When a record changes, your workflow takes it from there. It can update other records,
10            message or call the customer, run a script, or tell another system.</p> <ul class="list"><li><h3>Triggers on any object.</h3> <p>Set a trigger on the object and the change starts the workflow.</p></li> <li><h3>Normal JavaScript.</h3> <p>When a point-and-click step isn't enough, write the logic in JavaScript.</p></li> <li><h3>Versioned and published.</h3> <p>Every workflow has versions and a publish step, and Sessions keep the history of
11                each run.</p></li></ul></div> <div><!></div></div></div></section> <section class="section alt" id="security"><div class="wrap"><div class="eyebrow">UOQL</div> <h2>Build your application on Unbound's database. Query it in UOQL.</h2> <p class="sub">Custom objects and UOQL, the Unbound Object Query Language, are enough to build an
12        application with Unbound as its database. Your admin screens live in Unbound, and
13        replication, latency, and backups are ours to worry about, not yours. UOQL is SQL compliant,
14        so anyone who knows SQL reads and writes it right away. Permissions run from the object down
15        to the record type, so opening an object to a team doesn't open all of its records.</p> <ul class="glyph-row"><li><!><strong>UOQL</strong> <p>SQL-compliant queries over the whole object store, under the same security as the rest
16            of the platform.</p></li> <li><!><strong>Dynamic layout builder</strong> <p>Drag fields, lists, and related records from one or more objects into the interface you
17            want, without writing a screen.</p></li> <li><!><strong>Point and click</strong> <p>Build reports in the builder, and open the query behind them when you want to edit it.</p></li> <li><!><strong>Record-type permissions</strong> <p>Read, write, and update rights by record type, bundled into permission sets for groups,
18            users, and bots.</p></li> <li><!><strong>Policies</strong> <p>Write policies in the designer or as raw JSON. OAuth 2.0 issues the tokens for users and
19            APIs.</p></li></ul></div></section> <section class="section" id="mcp"><div class="wrap"><div class="split"><div><!></div> <div><div class="eyebrow">MCP</div> <h2>Your objects as MCP tools.</h2> <p class="sub">Build an MCP tool in a workflow, and bots, teammates, and outside platforms can read and
20            write your objects under your permissions. You don't need a developer to build one.</p> <ul class="list"><li><h3>Built in Workflows.</h3> <p>An MCP tool is a workflow, versioned and published like any other.</p></li> <li><h3>On live tasks.</h3> <p>Reps and bots use the tool mid-conversation to pull a record, confirm details, or
21                take a payment.</p></li> <li><h3>Outside MCPs too.</h3> <p>Bring external MCP servers into a workflow when the job needs another system.</p></li></ul> <p class="bots-line">On a live task, a bot uses the MCP tools you built to read a custom object and write the
22            answer back. It holds a permission set, and it can only change the record types in that
23            set. <a>How bots work on Unbound</a></p></div></div></div></section> <section class="section alt" id="related"><div class="wrap"><div class="eyebrow">Related</div> <h2>Objects in the rest of the CRM.</h2> <div class="grid4"><a class="card"><!> <div class="k">People</div> <h3>The core object</h3> <p>Where each conversation ends up.</p> <span class="dig" aria-hidden="true"></span></a> <a class="card"><!> <div class="k">Companies</div> <h3>Accounts</h3> <p>Sites and contracts on the account.</p> <span class="dig" aria-hidden="true"></span></a> <a class="card"><!> <div class="k">Opportunities</div> <h3>Triggers</h3> <p>Triggers on each stage change.</p> <span class="dig" aria-hidden="true"></span></a> <a class="card"><!> <div class="k">Portals</div> <h3>Outside access</h3> <p>Customers and partners on your objects.</p> <span class="dig" aria-hidden="true"></span></a></div> <a class="dig up">Back to CRM</a></div></section> <section class="section" id="faq"><div class="wrap"><div class="eyebrow">Questions</div> <h2>What buyers ask about objects and security.</h2> <!></div></section> <!></main>`,1),t[Z],[[46,0,[[47,2,[[48,4,[[49,6,[[50,8,[[51,10],[52,10]]],[54,8],[55,8],[56,8],[62,8,[[63,10],[64,10]]]]],[68,6]]]]],[81,2,[[82,4,[[84,6],[85,6]]]]],[96,2,[[97,4,[[98,6,[[99,8,[[100,10],[101,10],[102,10],[106,10,[[107,12,[[108,14],[109,14]]],[111,12,[[112,14],[113,14]]],[115,12,[[116,14],[117,14]]]]]]],[124,8]]]]]]],[138,2,[[139,4,[[140,6],[141,6],[142,6],[149,6,[[150,8,[[151,36],[152,10]]],[157,8,[[158,29],[159,10]]],[164,8,[[165,34],[166,10]]],[170,8,[[171,29],[172,10]]],[177,8,[[178,34],[179,10]]]]]]]]],[188,2,[[189,4,[[190,6,[[191,8],[201,8,[[202,10],[203,10],[204,10],[208,10,[[209,12,[[210,14],[211,14]]],[213,12,[[214,14],[215,14]]],[220,12,[[221,14],[222,14]]]]],[225,10,[[228,17]]]]]]]]]]],[235,2,[[236,4,[[237,6],[238,6],[239,6,[[240,8,[[242,10],[243,10],[244,10],[245,10]]],[247,8,[[249,10],[250,10],[251,10],[252,10]]],[254,8,[[256,10],[257,10],[258,10],[259,10]]],[261,8,[[263,10],[264,10],[265,10],[266,10]]]]],[269,6]]]]],[273,2,[[274,4,[[275,6],[276,6]]]]]]]]);function t(ee,ae){Pe(new.target),qe(ae,!0,t);const d=Me(X(()=>Ie.params.lang),"lang"),q=[{q:"Can Unbound Objects replace the custom objects in our current CRM?",a:"Yes. Custom objects, custom fields, layouts, record types, and triggers cover the data model and the logic, with security by object and by record type on top."},{q:"Do we have to learn a proprietary language?",a:"No. Triggers fire workflows, and scripts are normal JavaScript. Queries run in UOQL, the Unbound Object Query Language, which is SQL compliant, or in a point-and-click builder."},{q:"Can we build our own application on Unbound?",a:"Yes. Custom objects are the tables, UOQL is the query language, the dynamic layout builder draws the screens across any related objects, and triggers are the logic. You get a highly available, event-driven database without running replication, backups, or a second admin console yourself."},{q:"Who can see which records?",a:"Rights are set per object and per record type: read, write, and update. You write policies in a designer or as raw JSON, and OAuth 2.0 issues tokens for users and APIs."},{q:"Can AI agents read and write our custom objects?",a:"Yes, through MCP tools you build in Workflows. The bot only touches the record types its permission set allows, and every edit it makes is logged and auditable."}];var oe={...Ue()},M=Ne(),A=Ae(M);{let U=X(()=>[xe(q)]);s(()=>Ye(A,{title:"Unbound: Objects",description:"Unbound Objects lets you model your own business with custom objects, fields, layouts, and record types, triggers in plain JavaScript, and queries in UOQL.",path:"/platform/crm/objects",get jsonLd(){return i(U)}}),"component",t,39,0,{componentTag:"Seo"})}var G=o(A,2),v=e(G),W=e(v),m=e(W),g=e(m),R=e(g),te=o(R,2);r(),a(g);var se=o(g,10);s(()=>Fe(se,{}),"component",t,66,8,{componentTag:"TrustLine"}),a(m);var B=o(m,2),re=e(B);s(()=>Q(re,{img:"/shots/PeopleDetail.webp",crop:"95,180,930,340",cropSm:"130,180,600,340",pins:"160,283|694,293|598,441",alt:"A record page drawn from its layout: fields, a linked company, stage, owner, and lead score",caption:"The layout places every field, a related record sits one click away, and a field can drive the next step."}),"component",t,69,8,{componentTag:"Shot"}),a(B),a(W),a(v);var b=o(v,2),I=e(b),ne=e(I);s(()=>n(ne,{id:"record-card"}),"component",t,83,6,{componentTag:"Glyph"}),r(4),a(I),a(b);var y=o(b,2),Y=e(y),x=e(Y),J=o(e(x),2),ie=e(J);s(()=>Q(ie,{img:"/shots/WorkflowCanvas.webp",crop:"75,555,295,195",pins:"156,602|145,678",scale:1.3,alt:"Data steps on the workflow palette: Web Hook, Lookup, Update, and Link People/Company",caption:"A web hook tells an outside system what changed, and an update step writes the answer back to the record."}),"component",t,125,10,{componentTag:"Shot"}),a(J),a(x),a(Y),a(y);var w=o(y,2),D=e(w),F=o(e(D),6),f=e(F),de=e(f);s(()=>n(de,{id:"record-card"}),"component",t,151,10,{componentTag:"Glyph"}),r(3),a(f);var _=o(f,2),ce=e(_);s(()=>n(ce,{id:"form"}),"component",t,158,10,{componentTag:"Glyph"}),r(3),a(_);var k=o(_,2),le=e(k);s(()=>n(le,{id:"wallboard"}),"component",t,165,10,{componentTag:"Glyph"}),r(3),a(k);var j=o(k,2),pe=e(j);s(()=>n(pe,{id:"lock"}),"component",t,171,10,{componentTag:"Glyph"}),r(3),a(j);var N=o(j,2),ue=e(N);s(()=>n(ue,{id:"audit-row"}),"component",t,178,10,{componentTag:"Glyph"}),r(3),a(N),a(F),a(D),a(w);var T=o(w,2),E=e(T),$=e(E),S=e($),he=e(S);s(()=>Q(he,{img:"/shots/WorkflowModulePanel.webp",crop:"1040,85,400,560",pins:"1180,134|1128,392",scale:1.1,alt:"Step settings panel on a published workflow version",caption:"A published version stays read-only until you edit it, with every setting filled 
23in without code."}),"component",t,192,10,{componentTag:"Shot"}),a(S);var H=o(S,2),V=o(e(H),8),ve=o(e(V));a(V),a(H),a($),a(E),a(T);var C=o(T,2),z=e(C),O=o(e(z),4),p=e(O),me=e(p);s(()=>n(me,{id:"person"}),"component",t,241,11,{componentTag:"Glyph"}),r(8),a(p);var u=o(p,2),ge=e(u);s(()=>n(ge,{id:"building"}),"component",t,248,11,{componentTag:"Glyph"}),r(8),a(u);var h=o(u,2),be=e(h);s(()=>n(be,{id:"journey"}),"component",t,255,11,{componentTag:"Glyph"}),r(8),a(h);var L=o(h,2),ye=e(L);s(()=>n(ye,{id:"portal-door"}),"component",t,262,11,{componentTag:"Glyph"}),r(8),a(L),a(O);var we=o(O,2);a(z),a(C);var P=o(C,2),K=e(P),fe=o(e(K),4);s(()=>Je(fe,{get items(){return q},open:0}),"component",t,277,6,{componentTag:"Faq"}),a(K),a(P);var _e=o(P,2);return s(()=>De(_e,{alt:!0,title:"Model one thing your business runs on.",sub:"Open the 30-day trial with sample data loaded, create a custom object, build its layout, and set a trigger that texts you when a record changes."}),"component",t,281,2,{componentTag:"TryBlock"}),a(G),Ge((U,ke,je,Te,Se,Ce,Oe,Le)=>{c(R,"href",U),c(te,"href",ke),c(ve,"href",je),c(p,"href",Te),c(u,"href",Se),c(h,"href",Ce),c(L,"href",Oe),c(we,"href",Le)},[()=>l("/platform",i(d)),()=>l("/platform/crm",i(d)),()=>l("/platform/contact-center/bots",i(d)),()=>l("/platform/crm/people",i(d)),()=>l("/platform/crm/companies",i(d)),()=>l("/platform/crm/opportunities",i(d)),()=>l("/platform/team/portals",i(d)),()=>l("/platform/crm",i(d))]),We(ee,M),Re(oe)}export{t as component};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.