How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.
RecordEngine updates come in two types: code updates (most updates) and image rebuilds (less frequent, required when system dependencies change). Both are safe operations, but a backup first is always recommended.
If you’ve made local modifications to docker-compose.yml or other files, xr update may encounter a merge conflict. Resolve it with:
cd /opt/xrgit fetch origingit reset --hard origin/mainxr update
git reset --hard discards all local uncommitted changes. If you’ve made local customisations you want to keep, commit them to a branch first, or copy the files you care about before running the reset.
When a RecordEngine update changes system dependencies — for example, adding a new system package to the Dockerfile — a simple code pull is not enough. You need to rebuild the Docker image.Release notes will always say explicitly when an image rebuild is required.
cd /opt/xrgit pullcd clouddocker compose builddocker compose up -d
Rebuilding the image takes 5–15 minutes depending on your server’s internet connection and CPU. Containers are automatically restarted when the build completes.
If an update causes problems, roll back to the previous version:
cd /opt/xrgit log --oneline -10 # find the previous commit hashgit checkout PREVIOUS-HASHcd cloud && docker compose up -d --no-build
If the issue involves a database schema change, restore from your pre-update backup instead — database schema changes are not automatically reversible with a git rollback.
{"docsConfig":{"theme":"linden","$schema":"https://mintlify.com/docs.json","name":"RecordEngine Documentation","colors":{"primary":"#D4A843","light":"#F0C060","dark":"#5C1A1B"},"logo":{"light":"https://mintlify.s3.us-west-1.amazonaws.com/recordengineai/logo/re-logo-light.svg","dark":"https://mintcdn.com/recordengineai/8E7oKEOR0HcUDPqO/logo/re-logo-dark.svg?fit=max\u0026auto=format\u0026n=8E7oKEOR0HcUDPqO\u0026q=85\u0026s=ad13fdda1a0647830687e7f9e1e6fbd5"},"favicon":"/favicon.svg","styling":{"latex":false},"background":{"color":{"light":"#fefcf9","dark":"#100e0e"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"recordengineai","hasAudioNarration":false,"actualSubdomain":"recordengineai","customDomains":["docs.recordengine.ai"],"gitSource":{"type":"github","owner":"jeandouchet","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae949a76b76ef7254fe657c:success","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"Guides","count":36},{"language":"default","tag":"User Guide","count":24},{"language":"default","tag":"Integrations","count":20},{"language":"default","tag":"API Reference","count":8},{"language":"default","tag":"Getting Started","count":5},{"language":"default","tag":"Troubleshooting","count":4},{"language":"default","tag":"Deployment","count":2},{"language":"default","tag":"FAQ","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"deployment/updating","slug":"/deployment/updating","pageMetadata":{"title":"Updating RecordEngine","sidebarTitle":"Updating","description":"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.","href":"/deployment/updating","hidden":false},"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: \"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.\"\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`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`RecordEngine updates come in two types: `,_jsx(_components.strong,{children:`code updates`}),` (most updates) and `,_jsx(_components.strong,{children:`image rebuilds`}),` (less frequent, required when system dependencies change). Both are safe operations, but a backup first is always recommended.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`before-updating`,children:`Before Updating`}),`\n`,_jsx(_components.p,{children:`Always create a backup before applying any update:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`xr`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backup`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Move the resulting ZIP file off the server (external drive, NAS, or secure cloud storage) before proceeding.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`code-updates-most-common`,children:`Code Updates (Most Common)`}),`\n`,_jsx(_components.p,{children:`Most RecordEngine updates are code-only — Python files, the Streamlit UI, the API. These apply immediately without rebuilding Docker images.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`xr`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` update`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`This command:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Pulls the latest code from the git repository`}),`\n`,_jsxs(_components.li,{children:[`Restarts the `,_jsx(_components.code,{children:`xr-ui`}),`, `,_jsx(_components.code,{children:`xr-watcher`}),`, and `,_jsx(_components.code,{children:`xr-api`}),` containers`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The entire operation takes under a minute. No data loss, no downtime beyond the 10–15 second container restart.`}),`\n`,_jsx(Heading,{level:`3`,id:`if-you-see-git-merge-conflicts`,children:`If you see git merge conflicts`}),`\n`,_jsxs(_components.p,{children:[`If you’ve made local modifications to `,_jsx(_components.code,{children:`docker-compose.yml`}),` or other files, `,_jsx(_components.code,{children:`xr update`}),` may encounter a merge conflict. Resolve it with:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /opt/xr`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` fetch`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` origin`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reset`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --hard`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` origin/main`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`xr`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` update`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`git reset --hard`}),` discards all local uncommitted changes. If you’ve made local customisations you want to keep, commit them to a branch first, or copy the files you care about before running the reset.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`image-rebuilds-less-frequent`,children:`Image Rebuilds (Less Frequent)`}),`\n`,_jsx(_components.p,{children:`When a RecordEngine update changes system dependencies — for example, adding a new system package to the Dockerfile — a simple code pull is not enough. You need to rebuild the Docker image.`}),`\n`,_jsx(_components.p,{children:`Release notes will always say explicitly when an image rebuild is required.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /opt/xr`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cloud`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` build`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Rebuilding the image takes 5–15 minutes depending on your server’s internet connection and CPU. Containers are automatically restarted when the build completes.`}),`\n`,_jsx(Heading,{level:`3`,id:`verify-after-rebuild`,children:`Verify after rebuild`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`xr`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` test`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`All 80 tests should pass. If any tests fail after an update, check the release notes for migration steps, or see `,_jsx(_components.a,{href:`/troubleshooting/common-issues`,children:`Troubleshooting`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`environment-variable-changes`,children:`Environment Variable Changes`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`xr update`}),` and `,_jsx(_components.code,{children:`docker restart`}),` do `,_jsx(_components.strong,{children:`not`}),` apply changes to environment variables in `,_jsx(_components.code,{children:`docker-compose.yml`}),`. If an update requires setting a new env var:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /opt/xr/cloud`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nano`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .env`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # or edit docker-compose.yml directly`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --no-build`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`docker compose up -d --no-build`}),` recreates containers with updated env vars without rebuilding images.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`checking-your-current-version`,children:`Checking Your Current Version`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` xr-ui`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cat`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /app/version.txt`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Or check the UI — the version number is displayed in the bottom-left corner of the sidebar.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`rollback`,children:`Rollback`}),`\n`,_jsx(_components.p,{children:`If an update causes problems, roll back to the previous version:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /opt/xr`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` log`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --oneline`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -10`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # find the previous commit hash`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` checkout`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` PREVIOUS-HASH`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cloud`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --no-build`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`If the issue involves a database schema change, restore from your pre-update backup instead — database schema changes are not automatically reversible with a git rollback.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`update-frequency`,children:`Update Frequency`}),`\n`,_jsx(_components.p,{children:`RecordEngine releases follow semantic versioning (v2.5.5, v2.6.0, etc.):`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Patch releases`}),` (x.x.N) — bug fixes and minor improvements. Code update only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Minor releases`}),` (x.N.0) — new features. Code update; occasionally requires image rebuild.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Major releases`}),` (N.0.0) — significant changes. Image rebuild required; may include migration steps.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Release notes are published at `,_jsx(_components.a,{href:`/changelog`,children:`docs.recordengine.ai/changelog`}),` and sent to registered customers by email.`]})]})}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":{"config":{},"pageMetadata":{"title":"Updating RecordEngine","sidebarTitle":"Updating","description":"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.","href":"/deployment/updating","hidden":false}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before Updating","slug":"before-updating","depth":2,"children":[]},{"title":"Code Updates (Most Common)","slug":"code-updates-most-common","depth":2,"children":[{"title":"If you see git merge conflicts","slug":"if-you-see-git-merge-conflicts","depth":3,"children":[]}]},{"title":"Image Rebuilds (Less Frequent)","slug":"image-rebuilds-less-frequent","depth":2,"children":[{"title":"Verify after rebuild","slug":"verify-after-rebuild","depth":3,"children":[]}]},{"title":"Environment Variable Changes","slug":"environment-variable-changes","depth":2,"children":[]},{"title":"Checking Your Current Version","slug":"checking-your-current-version","depth":2,"children":[]},{"title":"Rollback","slug":"rollback","depth":2,"children":[]},{"title":"Update Frequency","slug":"update-frequency","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"recordengineai","siteName":"RecordEngine Documentation","title":"Updating RecordEngine - RecordEngine Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-03-09T19:56:07.945Z","originalFileLocation":"deployment/updating.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=\"system\"}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=\"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.\">\u003cmeta data-mint-head name=\"application-name\" content=\"RecordEngine Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/recordengineai/kAkvpuM7CzA6yYNw/_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/recordengineai/kAkvpuM7CzA6yYNw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/recordengineai/kAkvpuM7CzA6yYNw/_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/recordengineai/kAkvpuM7CzA6yYNw/_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/recordengineai/kAkvpuM7CzA6yYNw/_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/recordengineai/kAkvpuM7CzA6yYNw/_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/recordengineai/kAkvpuM7CzA6yYNw/_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/recordengineai/kAkvpuM7CzA6yYNw/_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/recordengineai/kAkvpuM7CzA6yYNw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Updating RecordEngine - RecordEngine Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"RecordEngine Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.recordengine.ai/deployment/updating\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://recordengineai.mintlify.site/_mintlify/api/og/v2?division=Deployment\u0026amp;title=Updating+RecordEngine\u0026amp;description=How+to+safely+update+RecordEngine+to+a+new+version+%E2%80%94+code+updates+and+Docker+image+rebuilds.\u0026amp;theme=005405b22a32376f15b1748f\u0026amp;signature=e9fea265cbd30c5dae4488855667f37198a6301bbd1251e65d38a4881c535f6e\">\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=\"Updating RecordEngine - RecordEngine Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://recordengineai.mintlify.site/_mintlify/api/og/v2?division=Deployment\u0026amp;title=Updating+RecordEngine\u0026amp;description=How+to+safely+update+RecordEngine+to+a+new+version+%E2%80%94+code+updates+and+Docker+image+rebuilds.\u0026amp;theme=005405b22a32376f15b1748f\u0026amp;signature=e9fea265cbd30c5dae4488855667f37198a6301bbd1251e65d38a4881c535f6e\">\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/recordengineai/kAkvpuM7CzA6yYNw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"RecordEngine Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#D4A843\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.recordengine.ai/deployment/updating\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/deployment/updating.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.recordengine.ai/#organization\",\"name\":\"RecordEngine Documentation\",\"url\":\"https://docs.recordengine.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintlify.s3.us-west-1.amazonaws.com/recordengineai/logo/re-logo-light.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.recordengine.ai#website\",\"name\":\"RecordEngine Documentation\",\"url\":\"https://docs.recordengine.ai\",\"publisher\":{\"@id\":\"https://docs.recordengine.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.recordengine.ai/deployment/updating#webpage\",\"url\":\"https://docs.recordengine.ai/deployment/updating\",\"name\":\"Updating RecordEngine\",\"description\":\"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.\",\"dateModified\":\"2026-03-09T19:56:07.945Z\",\"isPartOf\":{\"@id\":\"https://docs.recordengine.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.recordengine.ai/deployment/updating#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.recordengine.ai/deployment/updating#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deployment\",\"item\":\"https://docs.recordengine.ai/deployment/docker-linux\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Updating RecordEngine\",\"item\":\"https://docs.recordengine.ai/deployment/updating\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.recordengine.ai/deployment/updating#article\",\"headline\":\"Updating RecordEngine\",\"name\":\"Updating RecordEngine\",\"description\":\"How to safely update RecordEngine to a new version — code updates and Docker image rebuilds.\",\"url\":\"https://docs.recordengine.ai/deployment/updating\",\"mainEntityOfPage\":{\"@id\":\"https://docs.recordengine.ai/deployment/updating#webpage\"},\"dateModified\":\"2026-03-09T19:56:07.945Z\",\"publisher\":{\"@id\":\"https://docs.recordengine.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.recordengine.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"RecordEngine Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"RecordEngine Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/deployment/updating.md","siteName":"RecordEngine Documentation","nav":{"global":null,"tabs":[{"tab":"Guides","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","sidebarTitle":"Introduction","href":"/getting-started/introduction"},{"title":"System Requirements","sidebarTitle":"System Requirements","href":"/getting-started/system-requirements"},{"title":"Installation","sidebarTitle":"Installation","href":"/getting-started/installation"},{"title":"Quick Start Tutorial","sidebarTitle":"Quick Start","href":"/getting-started/quick-start"},{"title":"Your First Document","sidebarTitle":"Your First Document","href":"/getting-started/your-first-document"}]},{"group":"User Guide","pages":[{"title":"Dashboard \u0026 Analytics","sidebarTitle":"Dashboard","href":"/user-guide/dashboard"},{"title":"Contacts \u0026 Folders","sidebarTitle":"Contacts \u0026 Folders","href":"/user-guide/contacts-and-folders"},{"title":"Uploading Documents","sidebarTitle":"Uploading Documents","href":"/user-guide/uploading-documents"},{"title":"Email Intake","sidebarTitle":"Email Intake","href":"/user-guide/email-intake"},{"title":"Document Workflow","sidebarTitle":"Document Workflow","href":"/user-guide/document-workflow"},{"title":"AI Extraction","sidebarTitle":"AI Extraction","href":"/user-guide/ai-extraction"},{"title":"AI Confidence Scoring","sidebarTitle":"Confidence Scoring","href":"/user-guide/confidence-scoring"},{"title":"Extraction Profiles","sidebarTitle":"Extraction Profiles","href":"/user-guide/extraction-profiles"},{"title":"Rules Engine","sidebarTitle":"Rules Engine","href":"/user-guide/rules-engine"},{"title":"Document Versioning","sidebarTitle":"Document Versioning","href":"/user-guide/document-versioning"},{"title":"Batch Operations","sidebarTitle":"Batch Operations","href":"/user-guide/batch-operations"},{"title":"Advanced Search","sidebarTitle":"Advanced Search","href":"/user-guide/advanced-search"},{"title":"AI Chat \u0026 Document Q\u0026A","sidebarTitle":"AI Chat","href":"/user-guide/ai-chat"},{"title":"Audio Transcription","sidebarTitle":"Audio Transcription","href":"/user-guide/audio-transcription"},{"title":"Exporting Data","sidebarTitle":"Exporting Data","href":"/user-guide/exporting-data"},{"title":"Audit Log","sidebarTitle":"Audit Log","href":"/user-guide/audit-log"},{"title":"Themes \u0026 Customization","sidebarTitle":"Themes \u0026 Customization","href":"/user-guide/themes-and-customization"},{"title":"Case Management","href":"/user-guide/docs_case_management"},{"title":"AI Providers","href":"/user-guide/docs_ai_providers"},{"title":"API-Mode Deployment","href":"/user-guide/docs_api_mode_deployment"},{"title":"AI Model Comparison","href":"/user-guide/docs_ai_model_comparison"},{"title":"Webhooks","href":"/user-guide/webhooks"},{"title":"Rules Engine","href":"/user-guide/docs_rules_engine"},{"title":"Settings \u0026 Configuration","sidebarTitle":"Settings","href":"/user-guide/settings"}]},{"group":"Deployment","pages":[{"title":"Deploying on Linux with Docker","sidebarTitle":"Docker / Linux","description":"Complete deployment guide for RecordEngine on a Linux server — GPU setup, Docker Compose, SSL, and first-run configuration.","href":"/deployment/docker-linux"},{"title":"Updating RecordEngine","sidebarTitle":"Updating","href":"/deployment/updating"}]},{"group":"Troubleshooting","pages":[{"title":"General Troubleshooting","sidebarTitle":"General","description":"Diagnose and fix the most common RecordEngine issues — containers, AI processing, and the UI.","href":"/troubleshooting/general"},{"title":"Integration Troubleshooting","sidebarTitle":"Integration Issues","href":"/troubleshooting/integration-issues"},{"title":"AI Processing Issues","sidebarTitle":"AI Processing","href":"/troubleshooting/ai-processing"},{"title":"Performance \u0026 Capacity","sidebarTitle":"Performance","href":"/troubleshooting/performance"}]},{"group":"FAQ","pages":[{"title":"Frequently Asked Questions","sidebarTitle":"FAQ","href":"/faq"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"}]}]},"basePath":"","title":"Updating RecordEngine - RecordEngine Documentation","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}