Press Create Version, on Overview or on Versions.Blueprints asks every available adapter for its whole domain, normalises what comes back,
and writes one immutable document to your server. A capture is all-or-nothing per adapter:
if a domain cannot be read completely, that capture fails and names the adapter, rather
than recording a partial world that would later read as mass deletion.A Version records:
every managed object, with its identity, type, transform, bounds and properties;
the map it was taken on;
which adapters were authoritative, and the data format each was writing;
Each row is one Version: its id, when it was captured, the map, the object count, and its
origin.Selecting a Version gives you the actions along the top:
Write it out as a portable package file. See Packages
Clone
A second local copy of the same Version, under a new id
Import
Bring a package file in from the import folder
Clone exists as the honest answer to “I want another copy of this”. It copies the
document under a new local id and changes nothing about where it came from: a clone of an
imported Version is still imported.
Compare lives inside Versions rather than as its own nav entry, because comparing is
something you do to two Versions and has no meaning without them.The result is per object, in three classes:
Added
Present in the later Version, absent from the earlier one.
Changed
Present in both, with a different transform or a different property value. The report
shows the old value and the new one, per field.
Removed
Present in the earlier Version, absent from the later one.
Numbers compare with a small tolerance, so a coordinate that lost a little precision on its
way through JSON is not reported as a change for ever after.
A diff is only meaningful within one map. Comparing Versions from two different maps is
refused rather than offered behind a flag: the objects in them are not the same objects,
and a report that pretended otherwise would be worse than no report. Moving a build to
another map is what Migration is for.
Because identity is stable. A prop you dragged three metres is one changed row, not one
removed plus one added. That is the whole point of the identity contract, and it is
also why an adapter that derives an object’s id from its position destroys a build the
first time somebody moves something. See Identity.Where identity genuinely cannot be established, the diff says so, in a closed vocabulary,
rather than guessing:
A Version imported from another Vetra installation behaves differently in exactly one way.
An imported Version cannot be restored on this server. It can be inspected, compared
and used as a migration source, and it is what a deployment applies. It cannot be restored,
because the object identities inside it belong to the server that captured it, and the same
id means something different here.
That refusal is read from the Version’s own immutable origin marker, not from a sidecar
file, so deleting something cannot turn it off.To apply an imported Version to this server, use Deploy.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Vetra","description":"Documentation for the Vetra suite of Garry's Mod addons. Vetra Blueprints versions, migrates and deploys a server's managed setup, and the Adapter SDK lets any addon take part.","colors":{"primary":"#8fa343","light":"#c5e258","dark":"#8fa343"},"logo":{"light":"https://mintcdn.com/vetra/aE1YWFG_rv2nLo9f/logo/light.svg?fit=max\u0026auto=format\u0026n=aE1YWFG_rv2nLo9f\u0026q=85\u0026s=8badc512ca33228edb6d702138d0bb4a","dark":"https://mintcdn.com/vetra/aE1YWFG_rv2nLo9f/logo/dark.svg?fit=max\u0026auto=format\u0026n=aE1YWFG_rv2nLo9f\u0026q=85\u0026s=72230eb900ca97d5dfdf75675bb036d8","href":"/"},"favicon":"https://mintcdn.com/vetra/aE1YWFG_rv2nLo9f/favicon.svg?fit=max\u0026auto=format\u0026n=aE1YWFG_rv2nLo9f\u0026q=85\u0026s=747c5fa33d0dc6bf8a4ec7755955a8ee","appearance":{"default":"dark"},"navbar":{"links":[{"href":"/sdk/overview","label":"Adapter SDK"}],"primary":{"type":"button","label":"Install Blueprints","href":"/blueprints/installation"}},"footer":{"links":[{"header":"Blueprints","items":[{"label":"Overview","href":"/blueprints/overview"},{"label":"Installation","href":"/blueprints/installation"},{"label":"Supported objects","href":"/blueprints/supported-objects"}]},{"header":"Developers","items":[{"label":"Adapter SDK","href":"/sdk/overview"},{"label":"Quickstart","href":"/sdk/quickstart"},{"label":"API reference","href":"/sdk/api-reference"}]},{"header":"Support","items":[{"label":"Troubleshooting","href":"/support/troubleshooting"},{"label":"Licensing","href":"/support/licensing"},{"label":"Get help","href":"/support/getting-support"}]}]},"search":{"prompt":"Search the Vetra documentation"},"seo":{"metatags":{"og:site_name":"Vetra Documentation","og:type":"website","twitter:card":"summary_large_image"},"indexing":"all"},"fonts":{"heading":{"family":"IBM Plex Sans Condensed","weight":600},"body":{"family":"IBM Plex Sans"}},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":"min-dark"},"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vetra","hasAudioNarration":false,"actualSubdomain":"vetra","customDomains":["docs.vetrasuite.com"],"gitSource":{"type":"github","owner":"lhnfe","repo":"vetra-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6aa2cdb530737d4552c0ae53","collectionId":"501b6eb9-b36b-420c-9434-ea0a0a1e08ea","liveDeploymentHistoryId":"6aa2cdb530737d4552c0ae53","schemaVersion":"v3"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"}},"buildId":"6aa2cdb530737d4552c0ae53","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"Adapter SDK","count":20},{"language":"default","tag":"Blueprints","count":18},{"language":"default","tag":"Start here","count":8},{"language":"default","tag":"Support","count":8},{"language":"default","tag":"World operations","count":6},{"language":"default","tag":"Core workflow","count":5},{"language":"default","tag":"The contracts","count":5},{"language":"default","tag":"Shipping an adapter","count":5},{"language":"default","tag":"Help","count":4},{"language":"default","tag":"What it manages","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"blueprints/versions","slug":"/blueprints/versions","pageMetadata":{"title":"Versions, history and diff","description":"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.","href":"/blueprints/versions"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,Heading,Note,Table,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Versions`}),` is the history of this server’s managed state, and the screen most of the\nproduct’s other work starts from.`]}),`\n`,_jsx(Heading,{level:`2`,id:`capturing`,children:`Capturing`}),`\n`,_jsxs(_components.p,{children:[`Press `,_jsx(_components.strong,{children:`Create Version`}),`, on Overview or on Versions.`]}),`\n`,_jsx(_components.p,{children:`Blueprints asks every available adapter for its whole domain, normalises what comes back,\nand writes one immutable document to your server. A capture is all-or-nothing per adapter:\nif a domain cannot be read completely, that capture fails and names the adapter, rather\nthan recording a partial world that would later read as mass deletion.`}),`\n`,_jsx(_components.p,{children:`A Version records:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`every managed object, with its identity, type, transform, bounds and properties;`}),`\n`,_jsx(_components.li,{children:`the map it was taken on;`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`which adapters were authoritative`}),`, and the data format each was writing;`]}),`\n`,_jsx(_components.li,{children:`when it was taken, and by whom.`}),`\n`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Capturing does not touch the world. It is a read.`})}),`\n`,_jsx(Heading,{level:`2`,id:`the-list`,children:`The list`}),`\n`,_jsx(_components.p,{children:`Each row is one Version: its id, when it was captured, the map, the object count, and its\norigin.`}),`\n`,_jsx(_components.p,{children:`Selecting a Version gives you the actions along the top:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Action`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Compare`})}),_jsx(_components.td,{children:`Diff this Version against another`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Restore`})}),_jsxs(_components.td,{children:[`Return the managed world toward it. See `,_jsx(_components.a,{href:`/blueprints/restore`,children:`Restore`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Migrate`})}),_jsxs(_components.td,{children:[`Use it as a migration source. See `,_jsx(_components.a,{href:`/blueprints/migration`,children:`Migration`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Export`})}),_jsxs(_components.td,{children:[`Write it out as a portable package file. See `,_jsx(_components.a,{href:`/blueprints/packages`,children:`Packages`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Clone`})}),_jsx(_components.td,{children:`A second local copy of the same Version, under a new id`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Import`})}),_jsx(_components.td,{children:`Bring a package file in from the import folder`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Clone`}),` exists as the honest answer to “I want another copy of this”. It copies the\ndocument under a new local id and changes nothing about where it came from: a clone of an\nimported Version is still imported.`]}),`\n`,_jsx(Heading,{level:`2`,id:`comparing-two-versions`,children:`Comparing two Versions`}),`\n`,_jsxs(_components.p,{children:[`Compare lives inside Versions rather than as its own nav entry, because comparing is\nsomething you do `,_jsx(_components.em,{children:`to`}),` two Versions and has no meaning without them.`]}),`\n`,_jsx(_components.p,{children:`The result is per object, in three classes:`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Added`,icon:`plus`,id:`added`,children:_jsx(_components.p,{children:`Present in the later Version, absent from the earlier one.`})}),_jsx(Accordion,{title:`Changed`,icon:`pencil`,id:`changed`,children:_jsx(_components.p,{children:`Present in both, with a different transform or a different property value. The report\nshows the old value and the new one, per field.`})}),_jsx(Accordion,{title:`Removed`,icon:`minus`,id:`removed`,children:_jsx(_components.p,{children:`Present in the earlier Version, absent from the later one.`})})]}),`\n`,_jsx(_components.p,{children:`Numbers compare with a small tolerance, so a coordinate that lost a little precision on its\nway through JSON is not reported as a change for ever after.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`A diff is only meaningful `,_jsx(_components.strong,{children:`within one map`}),`. Comparing Versions from two different maps is\nrefused rather than offered behind a flag: the objects in them are not the same objects,\nand a report that pretended otherwise would be worse than no report. Moving a build to\nanother map is what `,_jsx(_components.a,{href:`/blueprints/migration`,children:`Migration`}),` is for.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`why-the-diff-is-readable`,children:`Why the diff is readable`}),`\n`,_jsxs(_components.p,{children:[`Because identity is stable. A prop you dragged three metres is one `,_jsx(_components.strong,{children:`changed`}),` row, not one\n`,_jsx(_components.strong,{children:`removed`}),` plus one `,_jsx(_components.strong,{children:`added`}),`. That is the whole point of the identity contract, and it is\nalso why an adapter that derives an object’s id from its position destroys a build the\nfirst time somebody moves something. See `,_jsx(_components.a,{href:`/sdk/identity`,children:`Identity`}),`.`]}),`\n`,_jsx(_components.p,{children:`Where identity genuinely cannot be established, the diff says so, in a closed vocabulary,\nrather than guessing:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Reason`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cross_session`})}),_jsx(_components.td,{children:`Recorded in a server session that has since ended`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`adapter_missing`})}),_jsx(_components.td,{children:`The adapter that owned it is not installed here`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`not_present`})}),_jsx(_components.td,{children:`Simply absent from the world`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`imported-versions`,children:`Imported Versions`}),`\n`,_jsx(_components.p,{children:`A Version imported from another Vetra installation behaves differently in exactly one way.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`An imported Version cannot be restored on this server.`}),` It can be inspected, compared\nand used as a migration source, and it is what a deployment applies. It cannot be restored,\nbecause the object identities inside it belong to the server that captured it, and the same\nid means something different here.`]})}),`\n`,_jsx(_components.p,{children:`That refusal is read from the Version’s own immutable origin marker, not from a sidecar\nfile, so deleting something cannot turn it off.`}),`\n`,_jsxs(_components.p,{children:[`To apply an imported Version to this server, use `,_jsx(_components.a,{href:`/blueprints/deploy`,children:`Deploy`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`where-they-live`,children:`Where they live`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes min-dark min-dark`,style:{backgroundColor:`#1f1f1f`,\"--shiki-dark-bg\":`#1f1f1f`,color:`#b392f0`,\"--shiki-dark\":`#b392f0`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`garrysmod/data/vetra/blueprints/snapshots/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`On your own server, as ordinary files. Blueprints does not send them anywhere on its own.\nSee `,_jsx(_components.a,{href:`/support/data`,children:`Where your work is stored`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":"min-dark"},"config":{},"pageMetadata":{"title":"Versions, history and diff","description":"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.","href":"/blueprints/versions"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Capturing","slug":"capturing","depth":2,"children":[]},{"title":"The list","slug":"the-list","depth":2,"children":[]},{"title":"Comparing two Versions","slug":"comparing-two-versions","depth":2,"children":[{"title":"Why the diff is readable","slug":"why-the-diff-is-readable","depth":3,"children":[]}]},{"title":"Imported Versions","slug":"imported-versions","depth":2,"children":[]},{"title":"Where they live","slug":"where-they-live","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"vetra","siteName":"Vetra","title":"Versions, history and diff - Vetra","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-10T13:23:49.921Z","originalFileLocation":"blueprints/versions.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Vetra\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Versions, history and diff - Vetra\">\u003cmeta data-mint-head property=\"og:description\" content=\"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vetra Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.vetrasuite.com/blueprints/versions\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vetra.mintlify.app/_mintlify/api/og/v2?division=Core+workflow\u0026amp;title=Versions%2C+history+and+diff\u0026amp;description=Capture+an+immutable+record+of+the+managed+world%2C+browse+the+history%2C+and+compare+any+two+Versions+object+by+object.\u0026amp;theme=cca15c7ac5e8640f3bfab9da\u0026amp;signature=8f860d7fe2c8418e9b3c8cd647372abfb32a5b03a6f739a7260a6eeb173103f8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Versions, history and diff - Vetra\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vetra.mintlify.app/_mintlify/api/og/v2?division=Core+workflow\u0026amp;title=Versions%2C+history+and+diff\u0026amp;description=Capture+an+immutable+record+of+the+managed+world%2C+browse+the+history%2C+and+compare+any+two+Versions+object+by+object.\u0026amp;theme=cca15c7ac5e8640f3bfab9da\u0026amp;signature=8f860d7fe2c8418e9b3c8cd647372abfb32a5b03a6f739a7260a6eeb173103f8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/vetra/eqM5jWinqfsvrg8a/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Vetra\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8fa343\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.vetrasuite.com/blueprints/versions\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/blueprints/versions.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.vetrasuite.com/#organization\",\"name\":\"Vetra\",\"url\":\"https://docs.vetrasuite.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vetra/aE1YWFG_rv2nLo9f/logo/light.svg?fit=max\u0026auto=format\u0026n=aE1YWFG_rv2nLo9f\u0026q=85\u0026s=8badc512ca33228edb6d702138d0bb4a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.vetrasuite.com#website\",\"name\":\"Vetra\",\"url\":\"https://docs.vetrasuite.com\",\"publisher\":{\"@id\":\"https://docs.vetrasuite.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.vetrasuite.com/blueprints/versions#webpage\",\"url\":\"https://docs.vetrasuite.com/blueprints/versions\",\"name\":\"Versions, history and diff\",\"description\":\"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.\",\"dateModified\":\"2026-09-10T13:23:49.921Z\",\"isPartOf\":{\"@id\":\"https://docs.vetrasuite.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.vetrasuite.com/blueprints/versions#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.vetrasuite.com/blueprints/versions#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Core workflow\",\"item\":\"https://docs.vetrasuite.com/blueprints/concepts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Versions, history and diff\",\"item\":\"https://docs.vetrasuite.com/blueprints/versions\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.vetrasuite.com/blueprints/versions#article\",\"headline\":\"Versions, history and diff\",\"name\":\"Versions, history and diff\",\"description\":\"Capture an immutable record of the managed world, browse the history, and compare any two Versions object by object.\",\"url\":\"https://docs.vetrasuite.com/blueprints/versions\",\"mainEntityOfPage\":{\"@id\":\"https://docs.vetrasuite.com/blueprints/versions#webpage\"},\"dateModified\":\"2026-09-10T13:23:49.921Z\",\"publisher\":{\"@id\":\"https://docs.vetrasuite.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.vetrasuite.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Vetra\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Vetra","nav":{"global":null,"tabs":[{"tab":"Blueprints","icon":"layers","groups":[{"group":"Start here","pages":[{"title":"Vetra Blueprints","sidebarTitle":"Home","href":""},{"title":"Overview","href":"/blueprints/overview"},{"title":"Installation","href":"/blueprints/installation"},{"title":"Opening Blueprints","href":"/blueprints/opening"},{"title":"Quick start","href":"/blueprints/quickstart"}]},{"group":"Core workflow","pages":[{"title":"Core concepts","description":"Versions, objects, identity, adapters, groups and plans: the six ideas every screen in Blueprints is built on.","href":"/blueprints/concepts"},{"title":"Versions, history and diff","href":"/blueprints/versions"},{"title":"Groups, anchors and pivots","description":"A market stall is one thing you built, not forty props. Groups let you treat it that way.","href":"/blueprints/groups"},{"title":"Migration Assistant","href":"/blueprints/migration"},{"title":"Restore and rollback","href":"/blueprints/restore"}]},{"group":"Between servers","pages":[{"title":"Export and import","href":"/blueprints/packages"},{"title":"DEV to PROD","href":"/blueprints/deploy"},{"title":"Remote Deploy","href":"/blueprints/remote-deploy"}]},{"group":"What it manages","pages":[{"title":"Supported objects and integrations","href":"/blueprints/supported-objects"},{"title":"DarkRP job spawns","href":"/blueprints/darkrp"},{"title":"MalboroDEV PermaProps","href":"/blueprints/permaprops"}]},{"group":"Running it","pages":[{"title":"Updating","href":"/blueprints/updating"},{"title":"Uninstalling","href":"/blueprints/uninstalling"}]}]},{"tab":"Adapter SDK","icon":"plug","pages":[{"title":"Adapter SDK","href":"/sdk/overview"}]},{"tab":"Support","icon":"life-buoy","pages":[{"title":"Support","href":"/support/licensing"}]}]},"title":"Versions, history and diff - Vetra","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}