1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="debd8895-8d85-4eb0-8a85-c1ea89702ff6",e._sentryDebugIdIdentifier="sentry-dbid-debd8895-8d85-4eb0-8a85-c1ea89702ff6")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3783],{10907:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("file-code",[["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z",key:"1mlx9k"}]])},13408:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]])},15205:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("square-terminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]])},17358:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("move-up",[["path",{d:"M8 6L12 2L16 6",key:"1yvkyx"}],["path",{d:"M12 2V22",key:"r89rzk"}]])}
1,24943:(e,t,n)=>{"use strict";n.d(t,{RP:()=>a});var s=n(21462);let r=s.createContext({});function a(e){let t=s.useContext(r);return s.useMemo(()=>"function"==typeof e?e(t):{...t,...e},[t,e])}},28270:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]])},39343:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});var s=n(21462);let r=s.forwardRef(function(e,t){let{title:n,titleId:r,...a}=e;return s.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:t,"aria-labelledby":r},a),n?s.createElement("title",{id:r},n):null,s.createElement("path",{fillRule:"evenodd",d:"M12.53 16.28a.75.75 0 0 1-1.06 0l-7.5-7.5a.75.75 0 0 1 1.06-1.06L12 14.69l6.97-6.97a.75.75 0 1 1 1.06 1.06l-7.5 7.5Z",clipRule:"evenodd"}))})},44498:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("link-2",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]])},54650:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("git-compare-arrows",[["circle",{cx:"5",cy:"6",r:"3",key:"1qnov2"}],["path",{d:"M12 6h5a2 2 0 0 1 2 2v7",key:"1yj91y"}],["path",{d:"m15 9-3-3 3-3",key:"1lwv8l"}],["circle",{cx:"19",cy:"18",r:"3",key:"1qljk2"}],["path",{d:"M12 18H7a2 2 0 0 1-2-2V9",key:"16sdep"}],["path",{d:"m9 15 3 3-3 3",key:"1m3kbl"}]])},58868:(e,t,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/blog/changelog-014",function(){return n(89771)}])},76018:(e,t,n)=>{"use strict";n.d(t,{Wx:()=>l});var s=n(21462),r=Object.defineProperty,a=new Map,i=new WeakMap,o=0,c=void 0;function l({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:d,triggerOnce:h,skip:u,initialInView:p,fallbackInView:g,onChange:x}={}){var m;let[f,y]=s.useState(null),k=s.useRef(x),[b,j]=s.useState({inView:!!p,entry:void 0});k.current=x,s.useEffect(()=>{let s;if(!u&&f)return s=function(e,t,n={},s=c){if(void 0===window.IntersectionObserver&&void 0!==s){let r=e.getBoundingClientRect();return t(s,{isIntersecting:s,target:e,intersectionRatio:"number"==typeof n.threshold?n.threshold:0,time:0,boundingClientRect:r,intersectionRect:r,rootBounds:r}),()=>{}}let{id:r,observer:l,elements:d}=function(e){let t=Object.keys(e).sort().filter(t=>void 0!==e[t]).map(t=>{var n;return`${t}_${"root"===t?!(n=e.root)?"0":(i.has(n)||(o+=1,i.set(n,o.toString())),i.get(n)):e[t]}`}).toString(),n=a.get(t);if(!n){let s,r=new Map,i=new IntersectionObserver(t=>{t.forEach(t=>{var n;let a=t.isIntersecting&&s.some(e=>t.intersectionRatio>=e);e.trackVisibility&&void 0===t.isVisible&&(t.isVisible=a),null==(n=r.get(t.target))||n.forEach(e=>{e(a,t)})})},e);s=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:i,elements:r},a.set(t,n)}return n}(n),h=d.get(e)||[];return d.has(e)||d.set(e,h),h.push(t),l.observe(e),function(){h.splice(h.indexOf(t),1),0===h.length&&(d.delete(e),l.unobserve(e)),0===d.size&&(l.disconnect(),a.delete(r))}}(f,(e,t)=>{j({inView:e,entry:t}),k.current&&k.current(e,t),t.isIntersecting&&h&&s&&(s(),s=void 0)},{root:d,rootMargin:r,threshold:e,trackVisibility:n,delay:t},g),()=>{s&&s()}},[Array.isArray(e)?e.toString():e,f,d,r,h,u,n,g,t]);let w=null==(m=b.entry)?void 0:m.target,v=s.useRef(void 0);f||!w||h||u||v.current===w||(v.current=w,j({inView:!!p,entry:void 0}));let A=[y,b.inView,b.entry];return A.ref=A[0],A.inView=A[1],A.entry=A[2],A}s.Component},81557:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});let s=(0,n(94195).A)("terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]])},89771:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>d});var s=n(23798),r=n(24943),a=n(39760),i=n(99089),o=n(53037);let c=e=>(0,s.jsx)(i.T,Object.assign({name:"changelog-014"},e));function l(e){let t=Object.assign({h2:"h2",a:"a",span:"span",p:"p",strong:"strong",ul:"ul",li:"li",h3:"h3",code:"code"},(0,r.RP)(),e.components);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.Y2,{intro:"We've shipped a bunch of fixes and new features in the last few weeks. Read on for the highlights and check out the changelog for a full list.",cta:"Get started"}),"\n",(0,s.jsxs)(t.h2,{id:"devboxes",children:["Devboxes",(0,s.jsx)(t.a,{href:"#devboxes",className:"autolink","aria-hidden":"true",tabIndex:"-1",children:(0,s.jsx)(t.span,{className:"subheading-anchor"})})]}),"\n",(0,s.jsx)(t.p,{children:"Coding agents are great until they take over your computer for 20 minutes. Devboxes give agents their own isolated cloud VM to work in, so you can keep going."}),"\n",(0,s.jsx)(t.p,{children:"Pick a repository, pick a size, and in seconds you have an environment with your code
1checked out and ready to go. The agent runs there. You keep working."}),"\n",(0,s.jsx)("div",{className:"max-w-[640px] mx-auto",children:(0,s.jsx)("iframe",{src:"https://player.mux.com/REEgidpXRy3mBudo1jhiBk75lyZYb500HKs8qNqepeC00?metadata-video-title=CreateADevbox",style:{width:"100%",border:"none",aspectRatio:"1167/971"},allow:"accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;",allowFullScreen:!0})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Isolated by default."})," Devboxes are designed with isolation as a feature, not a constraint. Agents cannot escape the Devbox or access anything outside it. You can safely run an agent without the interruption of approving every command."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Run multiple workstreams in parallel."})," Agent refactoring in one Devbox, a test suite running in another, a proof of concept in a third. Jump between them whenever you're ready."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Connect however you want."})," Browser-based VS Code, SSH, or CLI port forwarding, whatever fits your flow."]}),"\n",(0,s.jsx)(t.p,{children:"Devboxes run on the same infrastru
1cture as your CI, with full access to Namespace's build caching."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"/blog/introducing-devboxes",children:"Learn more â"})}),"\n",(0,s.jsxs)(t.h2,{id:"trust-relationship-management",children:["Trust Relationship Management",(0,s.jsx)(t.a,{href:"#trust-relationship-management",className:"autolink","aria-hidden":"true",tabIndex:"-1",children:(0,s.jsx)(t.span,{className:"subheading-anchor"})})]}),"\n",(0,s.jsx)(t.p,{children:"You can now securely access your Namespace resources from anywhere using OIDC-based trust relationships. This makes it easier to authenticate external workloads like CI pipelines or cloud services without managing long-lived credentials."}),"\n",(0,s.jsxs)(t.p,{children:["To get started, check out the new CLI commands for managing trust relationships, or head to the new ",(0,s.jsx)(t.strong,{children:"Trust Relationships"})," tab under ",(0,s.jsx)(t.strong,{children:"Workspace â Federation"})," in the Namespace cloud console."]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/docs/reference/cli/auth-trust-relationships",children:"CLI reference: Trust Relationships"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://cloud.namespace.so/workspace/settings/trust-relationships",children:"Cloud console: Trust Relationships"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"extended-cache-support",children:["Extended Cache Support",(0,s.jsx)(t.a,{href:"#extended-cache-support",className:"autolink","aria-hidden":"true",tabIndex:"-1",children:(0,s.jsx)(t.span,{className:"subheading-anchor"})})]}),"\n",(0,s.jsx)(t.p,{children:"We've expanded our caching integrations to cover more toolchains, making it easier to speed up builds whether you're running in CI or working locally."}),"\n",(0,s.jsxs)(t.h3,{id:"sccache",children:["sccache",(0,s.jsx)(t.a,{href:"#sccache",className:"autolink","aria-hidden":"true",tabIndex:"-1",children:(0,s.jsx)(t.span,{className:"subheading-anchor"})})]}),"\n",(0,s.jsxs)(t.p,{children:["Two ",(0,s.jsx)(t.a,{href:"/docs/integrations/sccache",children:"new commands"})," make it simple to set up ",(0,s.jsx)(t.a,{href:"https://github.com/mozilla/sccache",children:"sccache"})," with Namespace:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"nsc cache sccache create-token"}),": generate a scoped token for sccache access"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"nsc cache sccache setup"}),": configure sccache to use Namespace as its remote cache backend"]}),"\n"]}),"\n",(0,s.jsxs)(t.h3,{id:"gradle",children:["Gradle",(0,s.jsx)(t.a,{href:"#gradle",className:"autolink","aria-hidden":"true",tabIndex:"-1",children:(0,s.jsx)(t.span,{className:"subheading-anchor"})})]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"/docs/integrations/gradle",children:"Gradle caching"})," has gotten a round of usability improvements, with simplified token management for both CI workflows and local development."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"In a workflow"}),", use short-term credentials bound to the runner:"]}),"\n",(0,s.jsx)(a.F,{command:"nsc gradle cache setup --init-gradle /path/to/init.gradle\ngradle --init-script=/path/to/init.gradle build"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"From a local workstation"}),", generate a user-bound token with a configurable expiry:"]}),"\n",(0,s.jsx)(a.F,{command:"nsc gradle cache create-token --expires_in 7d\nnsc gradle cache setup --token token.json --user"}),"\n",(0,s.jsx)(t.p,{children:"This sets up your Gradle cache config in the Gradle user home using a token tied to your current user. If the user is removed from the workspace or their permissions change, the token is automatically invalidated and it can be manually revoked at any time."}),"\n",(0,s.jsxs)(t.h2,{id:"self-service-sso-configuration",children:["Self-Service SSO Configuration",(0,s.jsx)(t.a,{href:"#self-service-sso-configuration",className:"autolink","aria-hidden":"true",tabIndex:"-1",children:(0,s.jsx)(t.span,{className:"subheading-anchor"})})]}
1),"\n",(0,s.jsx)(t.p,{children:"Workspace admins on an Enterprise plan can now configure SAML SSO directly from the dashboard. Set up your identity provider, manage SSO-enforced domains, and enable directory auto-join without reaching out to support."}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/docs/workspaces/access",children:"Workspace access documentation"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://cloud.namespace.so/workspace/settings",children:"Cloud console: Workspace settings"})}),"\n"]}),"\n",(0,s.jsxs)(t.h2,{id:"summary",children:["Summary",(0,s.jsx)(t.a,{href:"#summary",className:"autolink","aria-hidden":"true",tabIndex:"-1",children:(0,s.jsx)(t.span,{className:"subheading-anchor"})})]}),"\n",(0,s.jsxs)(t.p,{children:["That's a wrap on the highlights from the last few weeks. Devboxes let agents do their thing without taking over your machine, trust relationships make it easier to connect external workloads without the hassle of long-lived credentials, expanded cache support means faster builds across more toolchains, and SSO management is now fully self-service. Check out the ",(0,s.jsx)(t.a,{href:"/changelog",children:"changelog"})," for the full list of changes."]})]})}let d=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.jsx)(c,Object.assign({},e,{children:(0,s.jsx)(l,e)}))}}},e=>{e.O(0,[2091,2662,1945,8715,8690,7451,5793,3831,9297,3037,3412,9926,9089,636,6593,8792],()=>e(e.s=58868)),_N_E=e.O()}]);
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.