oxen-server is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.
You can deploy your own oxen-server instance on your own infrastructure, or use the hosted version on OxenHub. If you want to kick the tires of Oxen in the privacy of your own infrastructure, we recommend you setup a local server.
oxen-server start -p 3000 -i 0.0.0.0
The hosted solution comes with a UI and the benefits of not having to setup infrastructure yourself. Sign up here to get started.
βοΈ Install
To setup a local Oxen Server instance, first install the oxen-server binary.
oxen-server is supported on Linux, macOS, and Docker. It is not supported on Windows. The oxen CLI and Python client are supported on Windows and can connect to a server hosted on a supported platform.
Mac OS
On Mac-OS you can use Homebrew to install the binary.
brew tap Oxen-AI/oxen-serverbrew install oxen-server
Ubuntu
On Ubuntu you can download the latest .deb file from our GitHub Releases and install it.
oxen-server does not authenticate requests itself. To require authentication, run it behind a reverse proxy or gateway that checks each request before forwarding it. If the gateway checks a bearer token, give each client its token with the config command. It keeps one token per host in ~/.config/oxen/auth_config.toml and sends it as Authorization: Bearer <TOKEN> on every request to that host.
oxen config --auth <HOST> <TOKEN>
oxen-server 0.59.0 removed the -a flag and the add-user command, and a server started with -a refuses to start. See the upgrade steps before upgrading a server that uses them.
ποΈ Sync Directory
The default directory that Oxen stores data is data, relative to the working directory the server was started from, which is convenient for trying things out but not what you want in production. To change it set the SYNC_DIR environment variable to an absolute path.
export SYNC_DIR=/var/oxen/dataoxen-server start
Output:
Running π server on 0.0.0.0:3000Syncing to directory: /var/oxen/data[2022-06-08T10:00:48Z INFO actix_server::builder] Starting 8 workers[2022-06-08T10:00:48Z INFO actix_server::server] Actix runtime found; starting in Actix runtime
If you want to change the default IP ADDRESS and PORT you can do so by passing them in with the -i and -p parameters.
oxen-server start -i 0.0.0.0 -p 4321
π Debug Logs
The oxen server provides debug logs, which are off by default. You can turn these on with the RUST_LOG variable.
export RUST_LOG="debug"
You can also set RUST_LOG to info or warn for more restrictive debug logs. Be aware, turning on debug logs can significantly slow down some metadata-heavy operations like oxen commit
π Create a Repository
Assuming you have already installed the oxen CLI, you can create a remote repository on the server.
Note: The host and scheme are optional and default to hub.oxen.ai and https respectively. If you are running a local server, you can set the host to localhost:3000 and the scheme to http.You can either clone data from this remote repository, or push data to it.
ποΈ File Storage
When you create a remote repository, Oxen will create a directory for it on the server. The directory structure is $SYNC_DIR/<namespace>/<repo_name>/.oxen.
ls /var/oxen/data/my_namespace/repo_name/.oxen
Output:
config.tomlhistory/refs/tree/versions/
All of the metadata and versioned files for a repository are stored in the .oxen directory. This directory mirrors the .oxen directory in your local repository, so that logic can be reused between the client and server.
πΎ Configureable Storage Backend
Oxen allows you to configure the storage backend of self-hosted oxen servers. By default, a repositoryβs version files are stored in the .oxen/versions/files folder, but this can be changed by using the --storage-backend and --storage-backend-path parameters
This is useful if you have a large amount of data and you want to store it on a virtual file system. If you set --storage-backend-path to a location on your VFS, files that you push to the remote will be stored there. Depending on your VFS, this can slow down some upload and download operations.
β¬οΈ Upload Data
To upload data to the server, you can use the oxen CLI to initialize a local repository, add data to it, and push it to the server.
# Create a directory for the new datasetmkdir my-datasetcd my-dataset# Initialize a local repositoryoxen init# Add data to the repositoryecho "prompt,response" > data.csvoxen add data.csv# Commit the changesoxen commit -m "Initial commit"
If you look in your local repository, you will see the .oxen directory.
ls .oxen
Output:
config.tomlhistory/refs/tree/versions/
You can set the remote to the server by running the following command. This will update the config.toml file in your local repository.
Once a remote is set you can push your changes to the server.
oxen push origin main
You can change the remote (origin) and the branch (main) to whichever remote and branch you want to push.
β¬οΈ Clone Data
Clone the empty repository:
oxen clone http://<HOST>/my_namespace/repo_name
API Spec
The server has a REST API that can be used to interact with the server. The API is documented here.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Oxen.ai","description":"Oxen.ai is the platform for building AI on your own data. Use 200+ models through one API, version your datasets at scale, and fine-tune custom models.","colors":{"primary":"#0E87CB","light":"#0E87CB","dark":"#161616"},"logo":{"light":"https://mintcdn.com/oxenai/VndlMSXTb9YuU-Wl/logo/light.svg?fit=max\u0026auto=format\u0026n=VndlMSXTb9YuU-Wl\u0026q=85\u0026s=c1e0ff00ab0a8de0a5dca3f7cd146763","dark":"https://mintcdn.com/oxenai/VndlMSXTb9YuU-Wl/logo/dark.svg?fit=max\u0026auto=format\u0026n=VndlMSXTb9YuU-Wl\u0026q=85\u0026s=5ada75aaf4c15e38fe2743a7ac66c1b9"},"favicon":"https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/favicon.png?fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=4977fd8edf8bbfb3ef5192cdd0156e37","background":{"color":{"dark":"#0A0A0A"}},"navbar":{"links":[{"href":"https://www.oxen.ai/blog","label":"Blog"},{"href":"https://discord.com/invite/s3tBEn7Ptg","label":"Support"}],"primary":{"type":"button","label":"Sign Up","href":"https://oxen.ai/register"}},"footer":{"socials":{"twitter":"https://twitter.com/oxen_ai","github":"https://github.com/Oxen-AI/Oxen","linkedin":"https://www.linkedin.com/company/oxenai"}},"integrations":{"ga4":{"measurementId":"G-H6D2C08EKP"},"posthog":{"apiKey":"phc_Do6VnS78puWwBQuPcJ7TkjixBZwsV4Xxc3ABHVNvjmE"}},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Documentation","icon":"book-open-cover","href":"https://docs.oxen.ai"},{"anchor":"Blog","icon":"newspaper","href":"https://blog.oxen.ai"},{"anchor":"GitHub","icon":"github","href":"https://github.com/Oxen-AI/Oxen"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"oxenai","hasAudioNarration":false,"actualSubdomain":"oxenai","customDomains":["docs.oxen.ai"],"gitSource":{"type":"github","owner":"oxen-ai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af7f5a450cc0037d86f3441","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Repository API","count":87},{"language":"default","tag":"Fine-Tuning API","count":78},{"language":"default","tag":"Documentation","count":46},{"language":"default","tag":"API Reference","count":41},{"language":"default","tag":"Inference API","count":36},{"language":"default","tag":"Developer Tools","count":25},{"language":"default","tag":"Get Started","count":21},{"language":"default","tag":"fine_tunes","count":16},{"language":"default","tag":"π Python","count":15},{"language":"default","tag":"Commits","count":14}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":[{"filePath":"style.css","content":".cta-button{display:inline-block;padding:0.4rem 0.9rem;margin:1.25rem 0;background-color:#8d34ff;color:white!important;font-weight:600;font-size:0.875rem;border-radius:0.375rem;text-decoration:none!important;border-bottom:none!important;box-shadow:none!important;transition:opacity 0.15s ease}.cta-button:hover{opacity:0.85;color:white!important}"}],"page":{"pagePath":"getting-started/oxen-server","slug":"/getting-started/oxen-server","pageMetadata":{"title":"π‘ Oxen Server","description":"`oxen-server` is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.","href":"/getting-started/oxen-server"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"oxen-server\"\n }), \" is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.\"]\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,OptimizedImage}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`You can deploy your own `,_jsx(_components.code,{children:`oxen-server`}),` instance on your own infrastructure, or use the hosted version on `,_jsx(_components.a,{href:`https://oxen.ai`,children:`OxenHub`}),`. If you want to kick the tires of Oxen in the privacy of your own infrastructure, we recommend you setup a local server.`]}),`\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:`oxen-server`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` start`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 3000`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0.0.0`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The hosted solution comes with a `,_jsx(_components.a,{href:`https://oxen.ai`,children:`UI`}),` and the benefits of not having to setup infrastructure yourself. `,_jsx(_components.a,{href:`https://oxen.ai/register`,children:`Sign up here`}),` to get started.`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/images/ImageNet-Oxen-Files.png?fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=d0cb9322421a0f58f46d9c7007777f4a`,alt:`OxenHub`,\"data-og-width\":`2828`,width:`2828`,\"data-og-height\":`1704`,height:`1704`,\"data-path\":`images/ImageNet-Oxen-Files.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/images/ImageNet-Oxen-Files.png?w=280\u0026fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=305b178a3f5c0397b40aedc23f4a2c41 280w, https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/images/ImageNet-Oxen-Files.png?w=560\u0026fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=70f90aa8aafe5422195c3cffcf53e659 560w, https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/images/ImageNet-Oxen-Files.png?w=840\u0026fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=d1ed87ed04a6dac9636c6abe46c17c17 840w, https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/images/ImageNet-Oxen-Files.png?w=1100\u0026fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=ae0a45d764198cbc21badf14bdd4ee0a 1100w, https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/images/ImageNet-Oxen-Files.png?w=1650\u0026fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=7251f2e4b112c2b6444c7710cbfd7dc9 1650w, https://mintcdn.com/oxenai/s_o9ZlhOEkYJf27_/images/ImageNet-Oxen-Files.png?w=2500\u0026fit=max\u0026auto=format\u0026n=s_o9ZlhOEkYJf27_\u0026q=85\u0026s=8db40c975111a3e5d4698120c621e86f 2500w`}),`\n`,_jsx(Heading,{level:`2`,id:`-install`,children:`βοΈ Install`}),`\n`,_jsxs(_components.p,{children:[`To setup a local Oxen Server instance, first install the `,_jsx(_components.code,{children:`oxen-server`}),` binary.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`oxen-server`}),` is supported on `,_jsx(_components.strong,{children:`Linux, macOS, and Docker`}),`. It is `,_jsx(_components.strong,{children:`not supported on Windows`}),`. The `,_jsx(_components.code,{children:`oxen`}),` CLI and Python client `,_jsx(_components.em,{children:`are`}),` supported on Windows and can connect to a server hosted on a supported platform.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`mac-os`,children:`Mac OS`}),`\n`,_jsxs(_components.p,{children:[`On Mac-OS you can use `,_jsx(_components.a,{href:`https://brew.sh/`,children:`Homebrew`}),` to install the binary.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`brew`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tap`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Oxen-AI/oxen-server`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`brew`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` oxen-server`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`ubuntu`,children:`Ubuntu`}),`\n`,_jsxs(_components.p,{children:[`On Ubuntu you can download the latest .deb file from our `,_jsx(_components.a,{href:`https://github.com/Oxen-AI/Oxen/releases`,children:`GitHub Releases`}),` and install it.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`wget`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://github.com/Oxen-AI/Oxen/releases/latest/download/oxen-server-ubuntu-latest.deb`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dpkg`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` oxen-server-ubuntu-latest.deb`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`docker`,children:`Docker`}),`\n`,_jsxs(_components.p,{children:[`To run the server in a docker container, download the latest .tar file from our `,_jsx(_components.a,{href:`https://github.com/Oxen-AI/Oxen/releases`,children:`GitHub Releases`}),` and run the following commands.`]}),`\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:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`wget`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://github.com/Oxen-AI/Oxen/releases/latest/download/oxen-server-docker.tar`})]}),`\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:` load`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` oxen-server-docker.tar`})]}),`\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:` run`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -v`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /path/to/my/data:/var/oxen/data`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 80:3001`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` oxen/oxen-server:latest`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`To install on other platforms, follow the `,_jsx(_components.a,{href:`/getting-started/install`,children:`installation instructions`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`-start-server`,children:`ποΈ Start Server`}),`\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:`oxen-server`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` start`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`oxen-server`}),` does not authenticate requests itself. To require authentication, run it behind a reverse proxy or gateway that checks each request before forwarding it. If the gateway checks a bearer token, give each client its token with the `,_jsx(_components.code,{children:`config`}),` command. It keeps one token per host in `,_jsx(_components.code,{children:`~/.config/oxen/auth_config.toml`}),` and sends it as `,_jsx(_components.code,{children:`Authorization: Bearer \u003cTOKEN>`}),` on every request to that host.`]}),`\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:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` config`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --auth`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`HOS`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`T`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`TOKE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`N`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`oxen-server`}),` 0.59.0 removed the `,_jsx(_components.code,{children:`-a`}),` flag and the `,_jsx(_components.code,{children:`add-user`}),` command, and a server started with `,_jsx(_components.code,{children:`-a`}),` refuses to start. See `,_jsx(_components.a,{href:`https://github.com/Oxen-AI/Oxen/blob/main/docs/migrations.md#stop-starting-the-server-with--a`,children:`the upgrade steps`}),` before upgrading a server that uses them.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`-sync-directory`,children:`ποΈ Sync Directory`}),`\n`,_jsxs(_components.p,{children:[`The default directory that Oxen stores data is `,_jsx(_components.code,{children:`data`}),`, relative to the working directory the server was started from, which is convenient for trying things out but not what you want in production. To change it set the `,_jsx(_components.code,{children:`SYNC_DIR`}),` environment variable to an absolute path.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` SYNC_DIR`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`var`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`oxen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`oxen-server`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` start`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Output:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`5`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Running π server on 0.0.0.0:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Syncing to directory: /var/oxen/data`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[2022-06-08T10:00:48Z INFO actix_server::builder] Starting 8 workers`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[2022-06-08T10:00:48Z INFO actix_server::server] Actix runtime found; starting in Actix runtime`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`If you want to change the default `,_jsx(_components.code,{children:`IP ADDRESS`}),` and `,_jsx(_components.code,{children:`PORT`}),` you can do so by passing them in with the `,_jsx(_components.code,{children:`-i`}),` and `,_jsx(_components.code,{children:`-p`}),` parameters.`]}),`\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:`oxen-server`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` start`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0.0.0`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 4321`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`-debug-logs`,children:`π Debug Logs`}),`\n`,_jsx(_components.p,{children:`The oxen server provides debug logs, which are off by default. You can turn these on with the RUST_LOG variable.`}),`\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:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` RUST_LOG`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"debug\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`You can also set RUST_LOG to `,_jsx(_components.code,{children:`info`}),` or `,_jsx(_components.code,{children:`warn`}),` for more restrictive debug logs. Be aware, turning on debug logs can significantly slow down some metadata-heavy operations like `,_jsx(_components.code,{children:`oxen commit`})]}),`\n`,_jsx(Heading,{level:`2`,id:`-create-a-repository`,children:`π Create a Repository`}),`\n`,_jsxs(_components.p,{children:[`Assuming you have already installed the `,_jsx(_components.code,{children:`oxen`}),` CLI, you can create a remote repository on the server.`]}),`\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:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-remote`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my_namespace/repo_name`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --host`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` localhost:3000`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --scheme`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` http`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Note: The host and scheme are optional and default to `,_jsx(_components.code,{children:`hub.oxen.ai`}),` and `,_jsx(_components.code,{children:`https`}),` respectively. If you are running a local server, you can set the host to `,_jsx(_components.code,{children:`localhost:3000`}),` and the scheme to `,_jsx(_components.code,{children:`http`}),`.`]}),`\n`,_jsx(_components.p,{children:`You can either clone data from this remote repository, or push data to it.`}),`\n`,_jsx(Heading,{level:`2`,id:`-file-storage`,children:`ποΈ File Storage`}),`\n`,_jsxs(_components.p,{children:[`When you create a remote repository, Oxen will create a directory for it on the server. The directory structure is `,_jsx(_components.code,{children:`$SYNC_DIR/\u003cnamespace>/\u003crepo_name>/.oxen`}),`.`]}),`\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:`ls`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /var/oxen/data/my_namespace/repo_name/.oxen`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Output:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`config.toml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`history/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`refs/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`tree/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`versions/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`All of the metadata and versioned files for a repository are stored in the `,_jsx(_components.code,{children:`.oxen`}),` directory. This directory mirrors the `,_jsx(_components.code,{children:`.oxen`}),` directory in your local repository, so that logic can be reused between the client and server.`]}),`\n`,_jsx(Heading,{level:`2`,id:`-configureable-storage-backend`,children:`πΎ Configureable Storage Backend`}),`\n`,_jsxs(_components.p,{children:[`Oxen allows you to configure the storage backend of self-hosted oxen servers. By default, a repositoryβs version files are stored in the `,_jsx(_components.code,{children:`.oxen/versions/files`}),` folder, but this can be changed by using the `,_jsx(_components.code,{children:`--storage-backend`}),` and `,_jsx(_components.code,{children:`--storage-backend-path`}),` parameters`]}),`\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:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-remote`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ox/test_repo`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --host`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` localhost:3000`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --scheme`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` http`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --storage-backend`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` local`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --storage-backend-path`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/mountpoint/ox/test_repo/version/files`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This is useful if you have a large amount of data and you want to store it on a virtual file system. If you set `,_jsx(_components.code,{children:`--storage-backend-path`}),` to a location on your VFS, files that you push to the remote will be stored there. Depending on your VFS, this can slow down some upload and download operations.`]}),`\n`,_jsx(Heading,{level:`2`,id:`-upload-data`,children:`β¬οΈ Upload Data`}),`\n`,_jsxs(_components.p,{children:[`To upload data to the server, you can use the `,_jsx(_components.code,{children:`oxen`}),` CLI to initialize a local repository, add data to it, and push it to the server.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,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:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Create a directory for the new dataset`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mkdir`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-dataset`})]}),`\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:` my-dataset`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Initialize a local repository`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` init`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Add data to the repository`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"prompt,response\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` data.csv`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` add`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` data.csv`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Commit the changes`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` commit`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -m`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Initial commit\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If you look in your local repository, you will see the `,_jsx(_components.code,{children:`.oxen`}),` directory.`]}),`\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:`ls`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .oxen`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Output:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`config.toml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`history/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`refs/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`tree/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`versions/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`You can set the remote to the server by running the following command. This will update the `,_jsx(_components.code,{children:`config.toml`}),` file in your local repository.`]}),`\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:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` config`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --set-remote`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` origin`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` http://localhost:3000/my_namespace/repo_name`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If you look at the `,_jsx(_components.code,{children:`config.toml`}),` file, you will see the remote set.`]}),`\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:`cat`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .oxen/config.toml`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Output:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`toml`,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:`toml`,children:_jsxs(_components.code,{language:`toml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`remote_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"origin\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`remotes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"origin\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http://localhost:3000/my_namespace/repo_name\"`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Once a remote is set you can push your changes to the server.`}),`\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:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` push`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` origin`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` main`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You can change the remote (origin) and the branch (main) to whichever remote and branch you want to push.`}),`\n`,_jsx(Heading,{level:`2`,id:`-clone-data`,children:`β¬οΈ Clone Data`}),`\n`,_jsx(_components.p,{children:`Clone the empty repository:`}),`\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:`oxen`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` http://`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`HOS`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`T`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/my_namespace/repo_name`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`api-spec`,children:`API Spec`}),`\n`,_jsxs(_components.p,{children:[`The server has a REST API that can be used to interact with the server. The API is documented `,_jsx(_components.a,{href:`/http-api`,children:`here`}),`.`]})]})}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":"π‘ Oxen Server","description":"`oxen-server` is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.","href":"/getting-started/oxen-server"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"βοΈ Install","slug":"-install","depth":2,"children":[{"title":"Mac OS","slug":"mac-os","depth":3,"children":[]},{"title":"Ubuntu","slug":"ubuntu","depth":3,"children":[]},{"title":"Docker","slug":"docker","depth":3,"children":[]}]},{"title":"ποΈ Start Server","slug":"-start-server","depth":2,"children":[]},{"title":"ποΈ Sync Directory","slug":"-sync-directory","depth":2,"children":[]},{"title":"π Debug Logs","slug":"-debug-logs","depth":2,"children":[]},{"title":"π Create a Repository","slug":"-create-a-repository","depth":2,"children":[]},{"title":"ποΈ File Storage","slug":"-file-storage","depth":2,"children":[]},{"title":"πΎ Configureable Storage Backend","slug":"-configureable-storage-backend","depth":2,"children":[]},{"title":"β¬οΈ Upload Data","slug":"-upload-data","depth":2,"children":[]},{"title":"β¬οΈ Clone Data","slug":"-clone-data","depth":2,"children":[]},{"title":"API Spec","slug":"api-spec","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"oxenai","siteName":"Oxen.ai","title":"π‘ Oxen Server - Oxen.ai","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-28T21:33:20.156Z","originalFileLocation":"getting-started/oxen-server.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=\"oxen-server is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Oxen.ai\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/oxenai/qjH8p5zfmK1DS0SK/_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/oxenai/qjH8p5zfmK1DS0SK/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/oxenai/qjH8p5zfmK1DS0SK/_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/oxenai/qjH8p5zfmK1DS0SK/_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/oxenai/qjH8p5zfmK1DS0SK/_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/oxenai/qjH8p5zfmK1DS0SK/_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/oxenai/qjH8p5zfmK1DS0SK/_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/oxenai/qjH8p5zfmK1DS0SK/_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/oxenai/qjH8p5zfmK1DS0SK/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"π‘ Oxen Server - Oxen.ai\">\u003cmeta data-mint-head property=\"og:description\" content=\"oxen-server is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Oxen.ai\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.oxen.ai/getting-started/oxen-server\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://oxenai.mintlify.site/_mintlify/api/og/v2?division=Developer+Tools\u0026amp;title=%F0%9F%93%A1+Oxen+Server\u0026amp;description=%60oxen-server%60+is+the+storage+backend+for+Oxen.+It+is+where+the+merkle+tree%2C+commit+history%2C+and+other+metadata+is+stored.\u0026amp;theme=2ca74976db5b09469ea3b450\u0026amp;signature=cb763efa58ef6593a032e908eaf1735794d3bb43bc89e6a79c9ec2037f1c6216\">\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=\"π‘ Oxen Server - Oxen.ai\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"oxen-server is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://oxenai.mintlify.site/_mintlify/api/og/v2?division=Developer+Tools\u0026amp;title=%F0%9F%93%A1+Oxen+Server\u0026amp;description=%60oxen-server%60+is+the+storage+backend+for+Oxen.+It+is+where+the+merkle+tree%2C+commit+history%2C+and+other+metadata+is+stored.\u0026amp;theme=2ca74976db5b09469ea3b450\u0026amp;signature=cb763efa58ef6593a032e908eaf1735794d3bb43bc89e6a79c9ec2037f1c6216\">\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/oxenai/qjH8p5zfmK1DS0SK/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Oxen.ai\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0E87CB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.oxen.ai/getting-started/oxen-server\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/getting-started/oxen-server.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.oxen.ai/#organization\",\"name\":\"Oxen.ai\",\"url\":\"https://docs.oxen.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/oxenai/VndlMSXTb9YuU-Wl/logo/light.svg?fit=max\u0026auto=format\u0026n=VndlMSXTb9YuU-Wl\u0026q=85\u0026s=c1e0ff00ab0a8de0a5dca3f7cd146763\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.oxen.ai#website\",\"name\":\"Oxen.ai\",\"url\":\"https://docs.oxen.ai\",\"publisher\":{\"@id\":\"https://docs.oxen.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.oxen.ai/getting-started/oxen-server#webpage\",\"url\":\"https://docs.oxen.ai/getting-started/oxen-server\",\"name\":\"π‘ Oxen Server\",\"description\":\"oxen-server is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.\",\"dateModified\":\"2026-09-28T21:33:20.156Z\",\"isPartOf\":{\"@id\":\"https://docs.oxen.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.oxen.ai/getting-started/oxen-server#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.oxen.ai/getting-started/oxen-server#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Developer Tools\",\"item\":\"https://docs.oxen.ai/getting-started/install\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"π‘ Oxen Server\",\"item\":\"https://docs.oxen.ai/getting-started/oxen-server\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.oxen.ai/getting-started/oxen-server#article\",\"headline\":\"π‘ Oxen Server\",\"name\":\"π‘ Oxen Server\",\"description\":\"oxen-server is the storage backend for Oxen. It is where the merkle tree, commit history, and other metadata is stored.\",\"url\":\"https://docs.oxen.ai/getting-started/oxen-server\",\"mainEntityOfPage\":{\"@id\":\"https://docs.oxen.ai/getting-started/oxen-server#webpage\"},\"dateModified\":\"2026-09-28T21:33:20.156Z\",\"publisher\":{\"@id\":\"https://docs.oxen.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.oxen.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Oxen.ai\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Oxen.ai\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/getting-started/oxen-server.md","siteName":"Oxen.ai","nav":{"global":{"anchors":[{"anchor":"Documentation","icon":"book-open-cover","href":"https://docs.oxen.ai"},{"anchor":"Blog","icon":"newspaper","href":"https://blog.oxen.ai"},{"anchor":"GitHub","icon":"github","href":"https://github.com/Oxen-AI/Oxen"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"π Oxen.ai","href":"/getting-started/intro"},{"group":"β‘οΈ Models","pages":[{"title":"Using Models on Oxen.ai","sidebarTitle":"π Overview","href":"/getting-started/inference"},{"title":"π¬ Language Models","href":"/examples/inference/chat_completions"},{"title":"ποΈ Vision Language Models","href":"/examples/inference/vision_language_models"},{"title":"πΌοΈ Image Generation","href":"/examples/inference/image_generation"},{"title":"π¨ Image Editing","href":"/examples/inference/image_editing"},{"title":"π₯ Video Generation","href":"/examples/inference/video_generation"}]},{"group":"π’οΈ Data","pages":[{"title":"Repositories on Oxen.ai","sidebarTitle":"π Overview","href":"/getting-started/data"},{"title":"πΎ Version Control","href":"/examples/data/versioning"},{"title":"π Datasets","href":"/examples/data/datasets"},{"title":"π¦ Workspaces","href":"/examples/data/workspaces"},{"title":"π₯ Performance","href":"/examples/data/performance"},{"title":"βοΈ Dataset Diffs","href":"/concepts/diffs"},{"title":"π·οΈ File Metadata","href":"/concepts/file_metadata"}]},{"group":"π οΈ Fine-Tuning","pages":[{"title":"Fine-Tuning Models on Oxen.ai","sidebarTitle":"π Overview","href":"/getting-started/fine-tuning"},{"title":"π¬ Text Generation","href":"/examples/fine-tuning/text_generation"},{"title":"π€ Chat Completions","href":"/examples/fine-tuning/chat_completions"},{"title":"ποΈ Vision Language Models","href":"/examples/fine-tuning/image_understanding"},{"title":"πΌοΈ Image Generation","href":"/examples/fine-tuning/image_generation"},{"title":"π¨βπ¨ Image Editing","href":"/examples/fine-tuning/image_editing"},{"title":"π₯ Video Generation","href":"/examples/fine-tuning/video_generation"}]}]},{"group":"Developer Tools","pages":[{"title":"βοΈ Installation","href":"/getting-started/install"},{"group":"π» Command Line Interface","pages":[{"title":"βοΈ Setup \u0026 Authentication","href":"/getting-started/command-line/setup"},{"title":"π Start a Repository","href":"/getting-started/command-line/start_repository"},{"title":"π Track Changes","href":"/getting-started/command-line/track_changes"},{"title":"πΏ Branches \u0026 Merging","href":"/getting-started/command-line/branches"},{"title":"π Sync with a Remote","href":"/getting-started/command-line/sync_remote"},{"title":"ποΈ Workspaces","href":"/getting-started/command-line/workspaces"},{"title":"π§Ή Maintenance","href":"/getting-started/command-line/maintenance"},{"title":"π§ Debugging \u0026 Performance","href":"/getting-started/command-line/debugging"}]},{"group":"π Python","pages":[{"title":"Introduction","href":"/python-api/index"},{"title":null,"href":"/python-api/clone"},{"title":null,"href":"/python-api/data_frame"},{"title":null,"href":"/python-api/datasets"},{"title":null,"href":"/python-api/df_utils"},{"title":null,"href":"/python-api/diff/diff"},{"title":null,"href":"/python-api/diff/line_diff"},{"title":null,"href":"/python-api/diff/tabular_diff"},{"title":null,"href":"/python-api/diff/text_diff"},{"title":null,"href":"/python-api/init"},{"title":null,"href":"/python-api/oxen_fs"},{"title":null,"href":"/python-api/remote_repo"},{"title":null,"href":"/python-api/repo"},{"title":"Repositories","href":"/python-api/repositories"},{"title":null,"description":null,"href":"/python-api/workspace"}]},{"title":"π‘ Oxen Server","href":"/getting-started/oxen-server"}]}]},{"tab":"Inference API","pages":[{"title":"Inference API","href":"/inference-api/overview"}]},{"tab":"Repository API","pages":[{"title":"Repository API","href":"/http-api"}]},{"tab":"Fine-Tuning API","pages":[{"title":"Fine-Tuning API","href":"/fine-tuning-api/overview"}]}]},"basePath":"","title":"π‘ Oxen Server - Oxen.ai","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-BbK2OBGL.js","lightbox-handle-r17bVUz3.js"]}