CINXE.COM
vector database Archives - ObjectBox
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <link rel="pingback" href="https://objectbox.io/wordpress/xmlrpc.php" /> <script type="text/javascript"> document.documentElement.className = 'js'; </script> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <!-- This site is optimized with the Yoast SEO plugin v23.7 - https://yoast.com/wordpress/plugins/seo/ --> <title>vector database Archives - ObjectBox</title> <meta name="description" content="ObjectBox" /> <link rel="canonical" href="https://objectbox.io/category/vector-database/" /> <link rel="next" href="https://objectbox.io/category/vector-database/page/2/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="vector database Archives - ObjectBox" /> <meta property="og:description" content="ObjectBox" /> <meta property="og:url" content="https://objectbox.io/category/vector-database/" /> <meta property="og:site_name" content="ObjectBox" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@objectbox_io" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://objectbox.io/category/vector-database/","url":"https://objectbox.io/category/vector-database/","name":"vector database Archives - ObjectBox","isPartOf":{"@id":"https://objectbox.io/#website"},"primaryImageOfPage":{"@id":"https://objectbox.io/category/vector-database/#primaryimage"},"image":{"@id":"https://objectbox.io/category/vector-database/#primaryimage"},"thumbnailUrl":"https://objectbox.io/wordpress/wp-content/uploads/2024/11/Cpp-objectBoxVectorSearch_4_0Release.jpg","description":"ObjectBox","breadcrumb":{"@id":"https://objectbox.io/category/vector-database/#breadcrumb"},"inLanguage":"en-US"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://objectbox.io/category/vector-database/#primaryimage","url":"https://objectbox.io/wordpress/wp-content/uploads/2024/11/Cpp-objectBoxVectorSearch_4_0Release.jpg","contentUrl":"https://objectbox.io/wordpress/wp-content/uploads/2024/11/Cpp-objectBoxVectorSearch_4_0Release.jpg","width":2000,"height":1158,"caption":"C++ database - embedded with vector search and data sync, free, open source"},{"@type":"BreadcrumbList","@id":"https://objectbox.io/category/vector-database/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"ObjectBox","item":"https://objectbox.io/"},{"@type":"ListItem","position":2,"name":"vector database"}]},{"@type":"WebSite","@id":"https://objectbox.io/#website","url":"https://objectbox.io/","name":"ObjectBox","description":"Fast on-Device database with vector search for Mobike, IoT & other embedded device","publisher":{"@id":"https://objectbox.io/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://objectbox.io/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://objectbox.io/#organization","name":"ObjectBox","url":"https://objectbox.io/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://objectbox.io/#/schema/logo/image/","url":"https://objectbox.io/wordpress/wp-content/uploads/2021/06/objectbox-logo.png","contentUrl":"https://objectbox.io/wordpress/wp-content/uploads/2021/06/objectbox-logo.png","width":559,"height":186,"caption":"ObjectBox"},"image":{"@id":"https://objectbox.io/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/objectboxTeam/","https://x.com/objectbox_io","https://www.instagram.com/objectbox_io/","https://www.linkedin.com/company/objectbox","https://www.youtube.com/channel/UCLs3F3Lhh8pjC66WZIopJ6Q"]}]}</script> <!-- / Yoast SEO plugin. --> <link rel='dns-prefetch' href='//js.hs-scripts.com' /> <link rel="alternate" type="application/rss+xml" title="ObjectBox » Feed" href="https://objectbox.io/feed/" /> <link rel="alternate" type="application/rss+xml" title="ObjectBox » Comments Feed" href="https://objectbox.io/comments/feed/" /> <link rel="alternate" type="application/rss+xml" title="ObjectBox » vector database Category Feed" href="https://objectbox.io/category/vector-database/feed/" /> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/objectbox.io\/wordpress\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.5.5"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <meta content="ObjectBox Divi v.1.0.1" name="generator"/><link rel='stylesheet' id='validate-engine-css-css' href='https://objectbox.io/wordpress/wp-content/plugins/wysija-newsletters/css/validationEngine.jquery.css?ver=2.22' type='text/css' media='all' /> <link rel='stylesheet' id='crayon-theme-objectbox-dark-css' href='https://objectbox.io/wordpress/wp-content/uploads/urvanov-syntax-highlighter/themes/objectbox-dark/objectbox-dark.css?ver=2.8.34' type='text/css' media='all' /> <link rel='stylesheet' id='crayon-font-monospace-css' href='https://objectbox.io/wordpress/wp-content/plugins/urvanov-syntax-highlighter/fonts/monospace.css?ver=2.8.34' type='text/css' media='all' /> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://objectbox.io/wordpress/wp-includes/css/dist/block-library/style.min.css?ver=6.5.5' type='text/css' media='all' /> <style id='wp-block-library-theme-inline-css' type='text/css'> .wp-block-audio figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio figcaption{color:#ffffffa6}.wp-block-audio{margin:0 0 1em}.wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em}.wp-block-embed figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed figcaption{color:#ffffffa6}.wp-block-embed{margin:0 0 1em}.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}.wp-block-image figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-image figcaption{color:#ffffffa6}.wp-block-image{margin:0 0 1em}.wp-block-pullquote{border-bottom:4px solid;border-top:4px solid;color:currentColor;margin-bottom:1.75em}.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{color:currentColor;font-size:.8125em;font-style:normal;text-transform:uppercase}.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote.has-text-align-right{border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote.has-text-align-center{border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote.is-style-plain{border:none}.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}:where(.wp-block-group.has-background){padding:1.25em 2.375em}.wp-block-separator.has-css-opacity{opacity:.4}.wp-block-separator{border:none;border-bottom:2px solid;margin-left:auto;margin-right:auto}.wp-block-separator.has-alpha-channel-opacity{opacity:1}.wp-block-separator:not(.is-style-wide):not(.is-style-dots){width:100px}.wp-block-separator.has-background:not(.is-style-dots){border-bottom:none;height:1px}.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){height:2px}.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table figcaption{color:#ffffffa6}.wp-block-video figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video figcaption{color:#ffffffa6}.wp-block-video{margin:0 0 1em}.wp-block-template-part.has-background{margin-bottom:0;margin-top:0;padding:1.25em 2.375em} </style> <style id='global-styles-inline-css' type='text/css'> body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--inter: "Inter", sans-serif;--wp--preset--font-family--cardo: Cardo;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}body { margin: 0;--wp--style--global--content-size: 823px;--wp--style--global--wide-size: 1080px; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}a:where(:not(.wp-element-button)){text-decoration: underline;}.wp-element-button, .wp-block-button__link{background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-cardo-font-family{font-family: var(--wp--preset--font-family--cardo) !important;} .wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} .wp-block-pullquote{font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='cookie-notice-front-css' href='https://objectbox.io/wordpress/wp-content/plugins/cookie-notice/css/front.min.css?ver=2.4.18' type='text/css' media='all' /> <link rel='stylesheet' id='dvmd-tm-public-module-style-css' href='https://objectbox.io/wordpress/wp-content/plugins/divi-modules-table-maker/extensions/styles/public-module-style.css?ver=3.1.2' type='text/css' media='all' /> <link rel='stylesheet' id='woocommerce-layout-css' href='https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=9.3.3' type='text/css' media='all' /> <link rel='stylesheet' id='woocommerce-smallscreen-css' href='https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/css/woocommerce-smallscreen.css?ver=9.3.3' type='text/css' media='only screen and (max-width: 768px)' /> <link rel='stylesheet' id='woocommerce-general-css' href='https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=9.3.3' type='text/css' media='all' /> <style id='woocommerce-inline-inline-css' type='text/css'> .woocommerce form .form-row .required { visibility: visible; } </style> <link rel='stylesheet' id='divi-torque-lite-modules-style-css' href='https://objectbox.io/wordpress/wp-content/plugins/addons-for-divi/assets/css/modules-style.css?ver=4.0.5' type='text/css' media='all' /> <link rel='stylesheet' id='divi-torque-lite-magnific-popup-css' href='https://objectbox.io/wordpress/wp-content/plugins/addons-for-divi/assets/libs/magnific-popup/magnific-popup.min.css?ver=4.0.5' type='text/css' media='all' /> <link rel='stylesheet' id='divi-torque-lite-frontend-css' href='https://objectbox.io/wordpress/wp-content/plugins/addons-for-divi/assets/css/frontend.css?ver=4.0.5' type='text/css' media='all' /> <link rel='stylesheet' id='divi-modules-table-maker-styles-css' href='https://objectbox.io/wordpress/wp-content/plugins/divi-modules-table-maker/extensions/divi-4/styles/style.min.css?ver=3.1.2' type='text/css' media='all' /> <link rel='stylesheet' id='divi-style-parent-css' href='https://objectbox.io/wordpress/wp-content/themes/Divi/style-static.min.css?ver=4.22.0' type='text/css' media='all' /> <link rel='stylesheet' id='divi-style-css' href='https://objectbox.io/wordpress/wp-content/themes/obx-divi-child/style.css?ver=4.22.0' type='text/css' media='all' /> <style id='divi-style-inline-css' type='text/css'> picture#logo { display: inherit; } picture#logo source, picture#logo img { width: auto; max-height: 45%; vertical-align: middle; } @media (min-width: 981px) { .et_vertical_nav #main-header picture#logo source, .et_vertical_nav #main-header picture#logo img { margin-bottom: 28px; } } </style> <link rel='stylesheet' id='select2-css' href='https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/css/select2.css?ver=9.3.3' type='text/css' media='all' /> <script type="text/javascript" id="cookie-notice-front-js-before"> /* <![CDATA[ */ var cnArgs = {"ajaxUrl":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php","nonce":"bd61c772f3","hideEffect":"none","position":"top","onScroll":true,"onScrollOffset":500,"onClick":true,"cookieName":"cookie_notice_accepted","cookieTime":31536000,"cookieTimeRejected":2592000,"globalCookie":false,"redirection":false,"cache":true,"revokeCookies":false,"revokeCookiesOpt":"automatic"}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/cookie-notice/js/front.min.js?ver=2.4.18" id="cookie-notice-front-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.9.3.3" id="jquery-blockui-js" defer="defer" data-wp-strategy="defer"></script> <script type="text/javascript" id="wc-add-to-cart-js-extra"> /* <![CDATA[ */ var wc_add_to_cart_params = {"ajax_url":"\/wordpress\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https:\/\/objectbox.io\/?page_id=37328","is_cart":"","cart_redirect_after_add":"no"}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=9.3.3" id="wc-add-to-cart-js" defer="defer" data-wp-strategy="defer"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.9.3.3" id="js-cookie-js" defer="defer" data-wp-strategy="defer"></script> <script type="text/javascript" id="woocommerce-js-extra"> /* <![CDATA[ */ var woocommerce_params = {"ajax_url":"\/wordpress\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%"}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=9.3.3" id="woocommerce-js" defer="defer" data-wp-strategy="defer"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/js/selectWoo/selectWoo.full.min.js?ver=1.0.9-wc.9.3.3" id="selectWoo-js" defer="defer" data-wp-strategy="defer"></script> <link rel="https://api.w.org/" href="https://objectbox.io/wp-json/" /><link rel="alternate" type="application/json" href="https://objectbox.io/wp-json/wp/v2/categories/291" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://objectbox.io/wordpress/xmlrpc.php?rsd" /> <meta name="generator" content="WordPress 6.5.5" /> <meta name="generator" content="WooCommerce 9.3.3" /> <style>.dbcs-clipboard-button { position: absolute; right: 1em; margin-top: 0.7em; font-family: 'ETmodules' !important; font-size: 16pt; opacity: 0.4; cursor: pointer; } .dbcs-clipboard-button:before { content: '\69'; } .dbcs-clipboard-button:hover { opacity: 1; } .dbcs-clipboard-button.dbcs-copied-to-clipboard { color: green; opacity: 1; } .dbcs-clipboard-button.dbcs-copied-to-clipboard:before { content: '\4e'; } .dbcs-clipboard-enabled .hljs-table td.hljs-line { padding-right: 55px; } .dbcs-clipboard-enabled .dbcs-clipboard-button { opacity: 1; background: rgba(240, 240, 240, 0.9) !important; padding: 7px; right: 0.35em; margin-top: 0.35em; border-radius: 4px } .dbcs-clipboard-enabled .dbcs-clipboard-button:before { opacity: 0.8; } .dbcs-clipboard-enabled .dbcs-clipboard-button:hover:before { opacity: 1; }</style><style> .et_pb_dmb_code_snippet pre code:before, #et_builder_outer_content .et_pb_dmb_code_snippet pre code:before{ font-family: monospace; } .et_pb_dmb_code_snippet pre code table.hljs-table td.hljs-line-number, #et_builder_outer_content .et_pb_dmb_code_snippet pre code table.hljs-table td.hljs-line-number { user-select: none; text-align: right; white-space: nowrap; vertical-align: top; } .et_pb_dmb_code_snippet pre code:not(.show_linenums) table.hljs-table td.hljs-line-number, #et_builder_outer_content .et_pb_dmb_code_snippet pre code:not(.show_linenums) table.hljs-table td.hljs-line-number, .et_pb_dmb_code_snippet pre code:not(.show_linenums) table.hljs-table col.hljs-line-numbers, #et_builder_outer_content .et_pb_dmb_code_snippet pre code:not(.show_linenums) table.hljs-table col.hljs-line-numbers { display: none; } </style> <style> .et_pb_dmb_code_snippet code.dbcs-wrap-lines .hljs-line * { white-space: pre-wrap; overflow-wrap: anywhere; } </style> <style> .et_pb_dmb_code_snippet { visibility: hidden; } </style> <!-- DO NOT COPY THIS SNIPPET! Start of Page Analytics Tracking for HubSpot WordPress plugin v11.1.66--> <script class="hsq-set-content-id" data-content-id="listing-page"> var _hsq = _hsq || []; _hsq.push(["setContentType", "listing-page"]); </script> <!-- DO NOT COPY THIS SNIPPET! End of Page Analytics Tracking for HubSpot WordPress plugin --> <script type="text/javascript"> (function(url){ if(/(?:Chrome\/26\.0\.1410\.63 Safari\/537\.31|WordfenceTestMonBot)/.test(navigator.userAgent)){ return; } var addEvent = function(evt, handler) { if (window.addEventListener) { document.addEventListener(evt, handler, false); } else if (window.attachEvent) { document.attachEvent('on' + evt, handler); } }; var removeEvent = function(evt, handler) { if (window.removeEventListener) { document.removeEventListener(evt, handler, false); } else if (window.detachEvent) { document.detachEvent('on' + evt, handler); } }; var evts = 'contextmenu dblclick drag dragend dragenter dragleave dragover dragstart drop keydown keypress keyup mousedown mousemove mouseout mouseover mouseup mousewheel scroll'.split(' '); var logHuman = function() { if (window.wfLogHumanRan) { return; } window.wfLogHumanRan = true; var wfscr = document.createElement('script'); wfscr.type = 'text/javascript'; wfscr.async = true; wfscr.src = url + '&r=' + Math.random(); (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(wfscr); for (var i = 0; i < evts.length; i++) { removeEvent(evts[i], logHuman); } }; for (var i = 0; i < evts.length; i++) { addEvent(evts[i], logHuman); } })('//objectbox.io/?wordfence_lh=1&hid=0E1BE9BAF1C42CF4257A4C3F99228C5E'); </script><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /><style type="text/css" id="tve_global_variables">:root{--tcb-color-0:rgb(125, 220, 125);--tcb-color-0-h:120;--tcb-color-0-s:57%;--tcb-color-0-l:67%;--tcb-color-0-a:1;--tcb-gradient-0:linear-gradient(54deg, rgb(230, 25, 85) 0%, rgb(245, 150, 45) 64%, rgb(249, 229, 5) 100%, var(--tcb-color-0) 100%);--tcb-background-author-image:url(https://secure.gravatar.com/avatar/f5b9dacdc7f63c622a4d6ac2833705b8?s=256&d=mm&r=g);--tcb-background-user-image:url();--tcb-background-featured-image-thumbnail:url(https://objectbox.io/wordpress/wp-content/uploads/2024/11/Cpp-objectBoxVectorSearch_4_0Release.jpg);}</style> <noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript> <style type="text/css" id="custom-background-css"> body.custom-background { background-color: #f7f7f7; } </style> <script id='nitro-telemetry-meta' nitro-exclude>window.NPTelemetryMetadata={missReason: (!window.NITROPACK_STATE ? 'request type not allowed' : 'hit'),pageType: 'category',isEligibleForOptimization: false,}</script><script id='nitro-generic' nitro-exclude>(()=>{window.NitroPack=window.NitroPack||{coreVersion:"na",isCounted:!1};let e=document.createElement("script");if(e.src="https://nitroscripts.com/JNiKLBzGPsfbQJqUQoZqIbUrxBklWopT",e.async=!0,e.id="nitro-script",document.head.appendChild(e),!window.NitroPack.isCounted){window.NitroPack.isCounted=!0;let t=()=>{navigator.sendBeacon("https://to.getnitropack.com/p",JSON.stringify({siteId:"JNiKLBzGPsfbQJqUQoZqIbUrxBklWopT",url:window.location.href,isOptimized:!!window.IS_NITROPACK,coreVersion:"na",missReason:window.NPTelemetryMetadata?.missReason||"",pageType:window.NPTelemetryMetadata?.pageType||"",isEligibleForOptimization:!!window.NPTelemetryMetadata?.isEligibleForOptimization}))};(()=>{let e=()=>new Promise(e=>{"complete"===document.readyState?e():window.addEventListener("load",e)}),i=()=>new Promise(e=>{document.prerendering?document.addEventListener("prerenderingchange",e,{once:!0}):e()}),a=async()=>{await i(),await e(),t()};a()})(),window.addEventListener("pageshow",e=>{if(e.persisted){let i=document.prerendering||self.performance?.getEntriesByType?.("navigation")[0]?.activationStart>0;"visible"!==document.visibilityState||i||t()}})}})();</script><!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-68353717-3"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-68353717-3'); gtag('config', 'G-PNBER16ZJB'); </script> <!-- GitHub Buttons. --> <!-- <script async defer src="https://buttons.github.io/buttons.js"></script> --><style id='wp-fonts-local' type='text/css'> @font-face{font-family:Inter;font-style:normal;font-weight:300 900;font-display:fallback;src:url('https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/fonts/Inter-VariableFont_slnt,wght.woff2') format('woff2');font-stretch:normal;} @font-face{font-family:Cardo;font-style:normal;font-weight:400;font-display:fallback;src:url('https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/fonts/cardo_normal_400.woff2') format('woff2');} </style> <style type="text/css" id="thrive-default-styles"></style><link rel="icon" href="https://objectbox.io/wordpress/wp-content/uploads/2022/11/cropped-OB-square-transparent-logo-teal-48x48-1-32x32.png" sizes="32x32" /> <link rel="icon" href="https://objectbox.io/wordpress/wp-content/uploads/2022/11/cropped-OB-square-transparent-logo-teal-48x48-1-192x192.png" sizes="192x192" /> <link rel="apple-touch-icon" href="https://objectbox.io/wordpress/wp-content/uploads/2022/11/cropped-OB-square-transparent-logo-teal-48x48-1-180x180.png" /> <meta name="msapplication-TileImage" content="https://objectbox.io/wordpress/wp-content/uploads/2022/11/cropped-OB-square-transparent-logo-teal-48x48-1-270x270.png" /> <link rel="stylesheet" id="et-divi-customizer-global-cached-inline-styles" href="https://objectbox.io/wordpress/wp-content/et-cache/global/et-divi-customizer-global.min.css?ver=1730962523" /></head> <body class="archive category category-vector-database category-291 custom-background theme-Divi et-tb-has-template et-tb-has-header cookies-not-set woocommerce-no-js et_button_no_icon et_pb_button_helper_class et_pb_footer_columns3 et_cover_background windows et_pb_gutters3 et_right_sidebar et_divi_theme et-db"> <div id="page-container"> <div id="et-boc" class="et-boc"> <header class="et-l et-l--header"> <div class="et_builder_inner_content et_pb_gutters3"><div class="et_pb_with_border et_pb_section et_pb_section_0_tb_header et_pb_sticky_module et_pb_with_background et_section_regular et_pb_section--with-menu" > <div class="et_pb_row et_pb_row_0_tb_header et_pb_row--with-menu"> <div class="et_pb_column et_pb_column_3_4 et_pb_column_0_tb_header et_pb_css_mix_blend_mode_passthrough et_pb_column--with-menu"> <div class="et_pb_module et_pb_code et_pb_code_0_tb_header"> <div class="et_pb_code_inner"><style> .dfh-2 .et_mobile_menu li:not(:last-child) a, .dfh-2 .nav li li:not(:last-child), .dfh-2 .et-menu-nav li.mega-menu>ul>li>a:first-child, .dfh-2 .et-menu-nav li.mega-menu ul li ul li:not(:last-child) a { border-bottom: 1px solid rgb(255,255,255,0.2) !important; } @media screen and (min-width: 981px) { .dfh-2 .sub-menu:before { color: #ffffff; } } </style></div> </div><div class="et_pb_module et_pb_code et_pb_code_1_tb_header"> <div class="et_pb_code_inner"><script> (function($) { function dfh_collapse_menu() { var ParentMenuItem = $('.dfh-2 .et_mobile_menu .menu-item-has-children > a'); ParentMenuItem.off('click').click(function() { $(this).attr('href', '#/'); $(this).parent().children().children().toggleClass('dfh-show-menu-items'); $(this).toggleClass('dfh-menu-switched-icon'); }); } $(window).load(function() { setTimeout(function() { dfh_collapse_menu(); }, 700); }); })(jQuery); </script> <style> .dfh-2 .et_mobile_menu .menu-item-has-children > a:after { content: '\50'; display: block !important; font-family: 'ETmodules'; font-size: 16px; font-weight: normal; position: absolute; right: 10px; top: 13px; } .dfh-2 .et_mobile_menu .menu-item-has-children > .dfh-menu-switched-icon:after { content: '\4f'; } .dfh-2 .et_mobile_menu .menu-item-has-children > a { position: relative; } .dfh-2 .et_mobile_menu .menu-item-has-children .sub-menu li { display: none; } .dfh-2 .et_mobile_menu .menu-item-has-children .sub-menu .dfh-show-menu-items { display: block; } .dfh-2 .nav li li { padding: 0 !important; } .dfh-2 .et_pb_menu .et_mobile_menu, .dfh-2 .et_mobile_menu { padding: 0 !important; border-width: 2px; border-radius: 5px; } .dfh-2 .et_pb_menu .et_mobile_menu a, .dfh-2 .et_mobile_menu a { padding: 12px 20px !important; } .dfh-2.et_pb_menu .et-menu-nav li.mega-menu ul.sub-menu { border-width: 2px !important; border-radius: 5px !important; padding: 10px 20px !important; width: 100% !important; } .dfh-2 .nav li.mega-menu li { border-bottom: none !important; } .et-db #et-boc .et-l .dfh-2 .et-menu-nav li.mega-menu li>a { width: 140px !important; } .dfh-2.et_pb_menu .et-menu-nav li.mega-menu ul.sub-menu a { padding: 12px 0 !important; } @media screen and (min-width: 981px) { .dfh-2 .et-menu > .menu-item-has-children > .sub-menu:before { font-family: ETmodules; content: '\42'; position: absolute; right: 20px; top: -17px; font-size: 30px; } .dfh-2 .et-menu > .menu-item-has-children.mega-menu > .sub-menu:before { content: ''; } .dfh-2 .et-menu .sub-menu .menu-item-has-children>a:first-child:after { content: "\35" !important; } .et-db #et-boc .et-l .dfh-2.et_pb_menu .et-menu-nav li ul.sub-menu li ul.sub-menu { left: 200px !important; top: 0; } .et-db #et-boc .et-l .dfh-2.et_pb_menu .et-menu-nav li.mega-menu ul.sub-menu li ul.sub-menu { left: 0 !important; padding: 0 !important; } } @media screen and (max-width: 980px) { .dfh-2 .et_pb_menu__wrap { margin-top: -8px; } } </style></div> </div><div class="et_pb_with_border et_pb_module et_pb_menu et_pb_menu_0_tb_header dfh-2 et_pb_bg_layout_light et_pb_text_align_left et_dropdown_animation_fade et_pb_menu--with-logo et_pb_menu--style-left_aligned"> <div class="et_pb_menu_inner_container clearfix"> <div class="et_pb_menu__logo-wrap"> <div class="et_pb_menu__logo"> <a href="https://objectbox.io/" ><img decoding="async" width="500" height="120" src="https://objectbox.io/wordpress/wp-content/uploads/2024/09/logo-white-500pxf.png" alt="" class="wp-image-259569" data-et-multi-view="{"schema":{"attrs":{"desktop":{"src":"https:\/\/objectbox.io\/wordpress\/wp-content\/uploads\/2024\/09\/logo-white-500pxf.png","alt":"","class":"wp-image-259569"},"tablet":{"src":"https:\/\/objectbox.io\/wordpress\/wp-content\/uploads\/2021\/01\/logo-white-500px-300x72.png"}}},"slug":"et_pb_menu","hover_selector":".et_pb_menu_0_tb_header .et_pb_menu__logo-wrap .et_pb_menu__logo img"}" /></a> </div> </div> <div class="et_pb_menu__wrap"> <div class="et_pb_menu__menu"> <nav class="et-menu-nav"><ul id="menu-main-menu" class="et-menu nav"><li class="first-level et_pb_menu_page_id-35279 menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-35279"><a>Product</a> <ul class="sub-menu"> <li class="et_pb_menu_page_id-257334 menu-item menu-item-type-post_type menu-item-object-page menu-item-257919"><a href="https://objectbox.io/vector-database-for-ondevice-ai/">The vector database for on-device AI</a></li> <li class="second-level et_pb_menu_page_id-33019 menu-item menu-item-type-post_type menu-item-object-page menu-item-33433"><a href="https://objectbox.io/sync/">Data Sync</a></li> <li class="second-level et_pb_menu_page_id-223067 menu-item menu-item-type-post_type menu-item-object-page menu-item-223155"><a title="Embedded Database for Embedded Devices" href="https://objectbox.io/embedded-database/">Embedded Database</a></li> <li class="second-level et_pb_menu_page_id-35148 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-35277"><a href="https://objectbox.io/mobile-database/">Mobile Database</a> <ul class="sub-menu"> <li class="et_pb_menu_page_id-222066 menu-item menu-item-type-post_type menu-item-object-page menu-item-222378"><a href="https://objectbox.io/swift-database-for-ios/">Swift Database for iOS</a></li> <li class="et_pb_menu_page_id-223156 menu-item menu-item-type-post_type menu-item-object-page menu-item-223274"><a title="Android Database" href="https://objectbox.io/android-database/">Android Database</a></li> <li class="et_pb_menu_page_id-223479 menu-item menu-item-type-post_type menu-item-object-page menu-item-223868"><a href="https://objectbox.io/flutter-database/">Flutter Database</a></li> </ul> </li> <li class="et_pb_menu_page_id-258495 menu-item menu-item-type-post_type menu-item-object-page menu-item-258707"><a href="https://objectbox.io/time-series-database/">Time Series DB</a></li> <li class="second-level et_pb_menu_page_id-34014 menu-item menu-item-type-post_type menu-item-object-page menu-item-34399"><a href="https://objectbox.io/iot-edge-computing-database-decentralized-data-flows/">IoT DB for the edge</a></li> <li class="second-level et_pb_menu_page_id-35961 menu-item menu-item-type-post_type menu-item-object-page menu-item-41668"><a href="https://objectbox.io/edgex/">ObjectBox EdgeX</a></li> </ul> </li> <li class="first-level et_pb_menu_page_id-39185 menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-39185"><a>Solutions</a> <ul class="sub-menu"> <li class="second-level et_pb_menu_page_id-260370 menu-item menu-item-type-post_type menu-item-object-page menu-item-260694"><a href="https://objectbox.io/connected-car-data-storage-and-sync/">Connected Cars</a></li> <li class="second-level et_pb_menu_page_id-38910 menu-item menu-item-type-post_type menu-item-object-page menu-item-39178"><a href="https://objectbox.io/iiot-edge-computing/">Industrial IoT</a></li> <li class="second-level et_pb_menu_page_id-49453 menu-item menu-item-type-post_type menu-item-object-page menu-item-49867"><a href="https://objectbox.io/energy-edge-computing/">Energy Industry</a></li> <li class="second-level et_pb_menu_page_id-38644 menu-item menu-item-type-post_type menu-item-object-page menu-item-39005"><a href="https://objectbox.io/smart-mobility/">Smart Mobility</a></li> <li class="second-level et_pb_menu_page_id-46718 menu-item menu-item-type-post_type menu-item-object-page menu-item-48012"><a href="https://objectbox.io/retail-edge-computing/">Retail Services</a></li> <li class="second-level et_pb_menu_page_id-50045 menu-item menu-item-type-post_type menu-item-object-page menu-item-50291"><a href="https://objectbox.io/games/">Games</a></li> <li class="second-level et_pb_menu_page_id-34759 menu-item menu-item-type-post_type menu-item-object-page menu-item-35893"><a href="https://objectbox.io/iot-edge-computing-database-decentralized-data-flows/iot-use-cases-edge-computing/">IoT Use Cases</a></li> </ul> </li> <li class="first-level et_pb_menu_page_id-28602 menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-28602"><a>Developers</a> <ul class="sub-menu"> <li class="second-level et_pb_menu_page_id-35049 menu-item menu-item-type-post_type menu-item-object-page menu-item-35212"><a href="https://objectbox.io/offline-first-mobile-database/">Overview</a></li> <li class="second-level et_pb_menu_page_id-53043 menu-item menu-item-type-custom menu-item-object-custom menu-item-53043"><a href="https://sync.objectbox.io/">Sync Docs</a></li> <li class="second-level et_pb_menu_page_id-35273 menu-item menu-item-type-custom menu-item-object-custom menu-item-35273"><a href="https://docs.objectbox.io/">Java Docs</a></li> <li class="second-level et_pb_menu_page_id-35275 menu-item menu-item-type-custom menu-item-object-custom menu-item-35275"><a href="https://cpp.objectbox.io/">C / C++ Docs</a></li> <li class="second-level et_pb_menu_page_id-35364 menu-item menu-item-type-custom menu-item-object-custom menu-item-35364"><a href="https://golang.objectbox.io/">Go Docs</a></li> <li class="second-level et_pb_menu_page_id-35281 menu-item menu-item-type-custom menu-item-object-custom menu-item-35281"><a href="https://docs.objectbox.io/kotlin-support">Kotlin Docs</a></li> <li class="second-level et_pb_menu_page_id-35274 menu-item menu-item-type-custom menu-item-object-custom menu-item-35274"><a href="https://swift.objectbox.io/">Swift Docs</a></li> <li class="second-level et_pb_menu_page_id-50071 menu-item menu-item-type-custom menu-item-object-custom menu-item-50071"><a href="https://github.com/objectbox/objectbox-dart">Flutter / Dart</a></li> <li class="second-level et_pb_menu_page_id-50463 menu-item menu-item-type-post_type menu-item-object-page menu-item-50484"><a href="https://objectbox.io/offline-docs-pdf-download/">Offline Docs / PDF Download</a></li> <li class="second-level et_pb_menu_page_id-30804 menu-item menu-item-type-post_type menu-item-object-page menu-item-30829"><a href="https://objectbox.io/faq/">FAQ</a></li> </ul> </li> <li class="first-level et_pb_menu_page_id-33340 menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-33736"><a href="https://objectbox.io/about-us/">Company</a> <ul class="sub-menu"> <li class="second-level et_pb_menu_page_id-33340 menu-item menu-item-type-post_type menu-item-object-page menu-item-33737"><a href="https://objectbox.io/about-us/">About Us</a></li> <li class="second-level et_pb_menu_page_id-32135 menu-item menu-item-type-post_type menu-item-object-page menu-item-32157"><a href="https://objectbox.io/jobs/">Jobs</a></li> <li class="second-level et_pb_menu_page_id-35211 menu-item menu-item-type-post_type menu-item-object-page menu-item-35268"><a href="https://objectbox.io/events/">Events</a></li> <li class="second-level et_pb_menu_page_id-35703 menu-item menu-item-type-post_type menu-item-object-page menu-item-35730"><a href="https://objectbox.io/iot-mobile-insights-learnings-research-studies/">Insights</a></li> <li class="et_pb_menu_page_id-50886 menu-item menu-item-type-post_type menu-item-object-page menu-item-223175"><a href="https://objectbox.io/software-we-love/">Software we 🤍</a></li> <li class="et_pb_menu_page_id-257704 menu-item menu-item-type-post_type menu-item-object-page menu-item-257890"><a href="https://objectbox.io/contact-us/">Contact us</a></li> </ul> </li> <li class="first-level et_pb_menu_page_id-31231 menu-item menu-item-type-post_type menu-item-object-page menu-item-31319"><a href="https://objectbox.io/blog/">Blog</a></li> <li class="et_pb_menu_page_id-259820 menu-item menu-item-type-post_type menu-item-object-page menu-item-260029"><a href="https://objectbox.io/mongodb/"><font color="#17A6A6">MongoDB Connector</font></a></li> </ul></nav> </div> <div class="et_mobile_nav_menu"> <div class="mobile_nav closed"> <span class="mobile_menu_bar"></span> </div> </div> </div> </div> </div> </div><div class="et_pb_column et_pb_column_1_4 et_pb_column_1_tb_header et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_button_module_wrapper et_pb_button_0_tb_header_wrapper et_pb_button_alignment_center et_pb_module "> <a class="et_pb_button et_pb_button_0_tb_header et_pb_bg_layout_dark" href="https://github.com/objectbox/" target="_blank" data-icon="">45.8k</a> </div><div class="et_pb_button_module_wrapper et_pb_button_1_tb_header_wrapper et_pb_button_alignment_center et_pb_module "> <a class="et_pb_button et_pb_button_1_tb_header et_pb_bg_layout_dark" href="https://objectbox.io/offline-first-mobile-database/">Get started</a> </div> </div> </div> </div> </div> </header> <div id="et-main-area"> <div id="main-content"> <div class="container"> <div id="content-area" class="clearfix"> <div id="left-area"> <article id="post-260654" class="et_pb_post post-260654 post type-post status-publish format-standard has-post-thumbnail hentry category-edge-ai category-edge-database category-release category-vector-database tag-edge-database tag-release tag-vector-database"> <a class="entry-featured-image-url" href="https://objectbox.io/the-embedded-database-for-cpp-and-c/"> <img src="https://objectbox.io/wordpress/wp-content/uploads/2024/11/Cpp-objectBoxVectorSearch_4_0Release-1080x675.jpg" alt="The Embedded Database for C++ and C" class="" width="1080" height="675" /> </a> <h2 class="entry-title"><a href="https://objectbox.io/the-embedded-database-for-cpp-and-c/">The Embedded Database for C++ and C</a></h2> <p class="post-meta"> by <span class="author vcard"><a href="https://objectbox.io/author/vivien/" title="Posts by Vivien" rel="author">Vivien</a></span> | <span class="published">Nov 11, 2024</span> | <a href="https://objectbox.io/category/edge-ai/" rel="category tag">Edge AI</a>, <a href="https://objectbox.io/category/edge-database/" rel="category tag">Edge Database</a>, <a href="https://objectbox.io/category/release/" rel="category tag">Release</a>, <a href="https://objectbox.io/category/vector-database/" rel="category tag">vector database</a></p><p>After 6 years and 21 incremental “zero dot” releases, we are excited to announce the first major release of <a href="https://github.com/objectbox/objectbox-c">ObjectBox</a>, the high-performance <a href="https://objectbox.io/how-to-choose-embedded-database/">embedded database</a> for C++ and C. As a faster <a href="https://greenrobot.org/news/mobile-databases-sqlite-alternatives-and-nosql-for-android-and-ios/">alternative to SQLite</a>, ObjectBox delivers more than just speed – it’s object-oriented, highly efficient, and offers advanced features like <a href="https://objectbox.io/sync/">data synchronization</a> and <a href="https://docs.objectbox.io/on-device-vector-search">vector search</a>. It is the perfect choice for on-device databases, especially in resource-constrained environments or in cases with real-time requirements.</p><h2 class="wp-block-heading">What is ObjectBox?</h2><p><a href="https://objectbox.io">ObjectBox</a> is a free <strong>embedded database <strong>designed for</strong> object persistence</strong>. With “object” referring to instances of C++ structs or classes, it is built for objects from scratch with zero overhead — no SQL or ORM layer is involved, resulting in outstanding object performance.</p><p>The ObjectBox C++ database offers advanced features, such as relations and ACID transactions, to ensure data consistency at all times. Store your data privately on-device across a wide range of hardware, from low-profile ARM platforms and mobile devices to high-speed servers. It’s a great fit for edge devices, iOS or Android apps, and server backends. Plus, ObjectBox is <strong>multi-platform</strong> (any POSIX will do, e.g. iOS, Android, Linux, Windows, or QNX) and <strong>multi-language</strong>: e.g., on mobile, you can work with Kotlin, Java or Swift objects. This cross-platform compatibility is no coincidence, as ObjectBox Sync will seamlessly synchronize data across devices and platforms.</p><h2 class="wp-block-heading">Why should C and C++ Developers care?</h2><p>ObjectBox <strong>deeply integrates with C and C++</strong>. Persisting C or C++ structs is as simple as a single line of code, with no need to interact with unfamiliar database APIs that disrupt the natural flow of C++. There’s also no data transformation (e.g. SQL, rows & columns) required, and interacting with the database feels seamless and intuitive.</p><p>As a C or C++ developer, you likely value <strong>performance</strong>. ObjectBox delivers exceptional speed (at least we haven’t tested against a faster DB yet). Having several 100,000s CRUD operations per second on commodity hardware is no sweat. Our unique advantage is that, if you want to, you can read raw objects from “mmapped” memory (directly from disk!). This offers true “zero copy” data access without any throttling layers between you and the data.</p><p>Finally, <strong>CMake support</strong> makes integration straightforward, starting with <code>FetchContent</code> support so you can easily get the library. But there’s more: we offer code generation for entity structs, which takes only a single CMake command.</p><h2 class="wp-block-heading">“ObjectBox++”: A quick Walk-Through</h2><p>Once ObjectBox is <a href="https://cpp.objectbox.io/installation">set up for CMake</a>, the first step is to define the <strong>data model</strong> using FlatBuffers schema files. FlatBuffers is a building block within ObjectBox and is also widely used in the industry. For those familiar with Protocol Buffers, FlatBuffers are its parser-less (i.e., faster) cousin. Here’s an example of a “Task” entity defined in a file named “task.fbs”:</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49f4b6171079965" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4b6171079965-1">1</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4b6171079965-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4b6171079965-3">3</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4b6171079965-4">4</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4b6171079965-1"><span class="crayon-e">table</span><span class="crayon-h"> </span><span class="crayon-e">Task</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4b6171079965-2"><span class="crayon-h"> </span><span class="crayon-v">id</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">ulong</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4b6171079965-3"><span class="crayon-h"> </span><span class="crayon-v">text</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-t">string</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4b6171079965-4"><span class="crayon-sy">}</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0007 seconds] --> <p></p><p>And with that file, you can <strong>generate code</strong> using the following CMake command:</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49f4c2476627815" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c2476627815-1">1</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c2476627815-1"><span class="crayon-e">add_obx_schema</span><span class="crayon-sy">(</span><span class="crayon-e">TARGET</span><span class="crayon-h"> </span><span class="crayon-sy">$</span><span class="crayon-sy">{</span><span class="crayon-v">PROJECT_NAME</span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-e">SCHEMA_FILES </span><span class="crayon-v">tasks</span><span class="crayon-sy">.</span><span class="crayon-e">fbs </span><span class="crayon-v">INSOURCE</span><span class="crayon-sy">)</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p></p><p>Among other things, code generation creates a C++ struct for Task data, which is used to interact with the ObjectBox API. The struct is a straightforward C++ representation of the data model:</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49f4c4286815813" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c4286815813-1">1</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c4286815813-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c4286815813-3">3</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c4286815813-4">4</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c4286815813-1"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">Task</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c4286815813-2"><span class="crayon-h"> </span><span class="crayon-e">obx_id </span><span class="crayon-v">id</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">// uint64_t</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c4286815813-3"><span class="crayon-h"> </span><span class="crayon-v">std</span><span class="crayon-o">::</span><span class="crayon-t">string</span><span class="crayon-h"> </span><span class="crayon-v">text</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c4286815813-4"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p></p><p>The code generation also provides some internal “glue code” including the method <code>create_obx_model()</code> that defines the data model internally. With this, you can <strong>open the store and insert a task object</strong> in just three lines of code:</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49f4c5331928913" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c5331928913-1">1</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c5331928913-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c5331928913-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c5331928913-1"><span class="crayon-v">obx</span><span class="crayon-o">::</span><span class="crayon-e">Store </span><span class="crayon-e">store</span><span class="crayon-sy">(</span><span class="crayon-e">create_obx_model</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">// Create the database</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c5331928913-2"><span class="crayon-v">obx</span><span class="crayon-o">::</span><span class="crayon-v">Box</span><span class="crayon-o"><</span><span class="crayon-v">Task</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-e">box</span><span class="crayon-sy">(</span><span class="crayon-v">store</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">// Main API for a type</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c5331928913-3"><span class="crayon-e">obx_id </span><span class="crayon-v">id</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">box</span><span class="crayon-sy">.</span><span class="crayon-e">put</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span><span class="crayon-sy">.</span><span class="crayon-v">text</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">"Buy milk"</span><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">// Object is persisted</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0007 seconds] --> <p></p><p>And that’s all it takes to get a database running in C++. This snippet essentially covers the basics of the <a href="https://cpp.objectbox.io/getting-started">getting started guide</a> and <a href="https://github.com/objectbox/objectbox-c/tree/main/examples/cpp-autogen">this example project</a> on GitHub.</p><h2 class="wp-block-heading">Vector Embeddings for C++ AI Applications</h2><p>Even if you don’t have an immediate use case, ObjectBox is fully equipped for vectors and AI applications. As a “vector database,” ObjectBox is ready for use in high-dimensional vector similarity searches, employing the HNSW algorithm for highly scalable performance beyond millions of vectors.</p><p>Vectors can represent semantics within a context (e.g. objects in a picture) or even documents and paragraphs to “capture” their meaning. This is typically used for RAG (Retrieval-Augmented Generation) applications that interact with LLMs. Basically, RAG allows AI to work with specific data, e.g. documents of a department or company and thus individualizes the created content.</p><p>To quickly illustrate vector search, imagine a database of cities including their location as a 2-dimensional vector. To enable nearest neighbor search, all you need to do is to define a HNSW index on the location property, which enables the <code>nearestNeighbors</code> query condition used like this:</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49f4c7432167727" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c7432167727-1">1</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c7432167727-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49f4c7432167727-3">3</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c7432167727-1"><span class="crayon-t">float</span><span class="crayon-h"> </span><span class="crayon-e">madrid</span><span class="crayon-sy">[</span><span class="crayon-sy">]</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-cn">40.416775F</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-cn">3.703790F</span><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c7432167727-2"><span class="crayon-v">obx</span><span class="crayon-o">::</span><span class="crayon-e">Query </span><span class="crayon-v">query</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">cityBox</span><span class="crayon-sy">.</span><span class="crayon-e">query</span><span class="crayon-sy">(</span><span class="crayon-v">City_</span><span class="crayon-o">::</span><span class="crayon-v">location</span><span class="crayon-sy">.</span><span class="crayon-e">nearestNeighbors</span><span class="crayon-sy">(</span><span class="crayon-v">madrid</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">build</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49f4c7432167727-3"><span class="crayon-v">std</span><span class="crayon-o">::</span><span class="crayon-v">vector</span><span class="crayon-o"><</span><span class="crayon-v">City</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-v">cities</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">query</span><span class="crayon-sy">.</span><span class="crayon-e">findWithScores</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0001 seconds] --> <p>For more details, refer to the <a href="https://docs.objectbox.io/on-device-vector-search">vector search doc pages</a> or the full <a href="https://github.com/objectbox/objectbox-c/tree/main/examples/vectorsearch-cities">city vector search example</a> on GitHub.</p><h2 class="wp-block-heading">store.close(); // Some closing words</h2><p>This release marks an important milestone for ObjectBox, delivering significant improvements in speed, usability, and features. We’re excited to see how these enhancements will help you create even better, feature-rich applications.</p><p>There’s so much to explore! Please follow the links to dive deeper into topics like <a href="https://cpp.objectbox.io/queries">queries</a>, <a href="https://cpp.objectbox.io/relations">relations</a>, <a href="https://cpp.objectbox.io/transactions">transactions</a>, and, of course, <a href="https://objectbox.io/sync/">ObjectBox Sync</a>.</p><p>As always, we’re here to listen to your feedback and are committed to continually evolving ObjectBox to meet your needs. Don’t hesitate to reach out to us at any time.</p><p>P.S. Are you looking for a new job? We have a vacant <a href="https://objectbox.io/c-developer-with-a-heart-for-performance-efficiency-distributed-systems-and-tough-coding-challenges/">C++ position</a> to build the future of ObjectBox with us. We are looking forward to receiving your application! 🙂</p> </article> <article id="post-260182" class="et_pb_post post-260182 post type-post status-publish format-standard has-post-thumbnail hentry category-ai category-edge-ai category-edge-computing category-edge-database category-mobile-database category-vector-database tag-ai tag-edge-ai tag-edge-computing tag-edge-database tag-vector-database"> <a class="entry-featured-image-url" href="https://objectbox.io/the-rise-of-small-language-models-2/"> <img src="https://objectbox.io/wordpress/wp-content/uploads/2024/10/capture20241014170626359.png" alt="The rise of small language models" class="" width="1080" height="675" /> </a> <h2 class="entry-title"><a href="https://objectbox.io/the-rise-of-small-language-models-2/">The rise of small language models</a></h2> <p class="post-meta"> by <span class="author vcard"><a href="https://objectbox.io/author/anastasia/" title="Posts by Anastasia" rel="author">Anastasia</a></span> | <span class="published">Oct 2, 2024</span> | <a href="https://objectbox.io/category/ai/" rel="category tag">AI</a>, <a href="https://objectbox.io/category/edge-ai/" rel="category tag">Edge AI</a>, <a href="https://objectbox.io/category/edge-computing/" rel="category tag">Edge Computing</a>, <a href="https://objectbox.io/category/edge-database/" rel="category tag">Edge Database</a>, <a href="https://objectbox.io/category/mobile-database/" rel="category tag">Mobile Database</a>, <a href="https://objectbox.io/category/vector-database/" rel="category tag">vector database</a></p><div class="et_pb_section et_pb_section_0 et_section_regular" > <div class="et_pb_row et_pb_row_0"> <div class="et_pb_column et_pb_column_4_4 et_pb_column_0 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_0 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><p><!-- divi:paragraph -->As <strong>artificial intelligence (AI)</strong> continues to evolve, companies, researchers, and developers are increasingly recognizing that bigger isn’t always better. Therefore, the era of ever-expanding model sizes is giving way to more efficient, compact models, so-called <strong>Small Language Models (SLMs).</strong> SLMs offer several key advantages that address both the growing complexity of AI and the practical challenges of deploying large-scale models. In this article, we’ll explore why the race for larger models is slowing down and how SLMs are emerging as the sustainable solution for the future of AI. </p> <p><!-- divi:heading --></p> <h2 class="wp-block-heading">From Bigger to Better: The End of the Large Model Race</h2> <p>Up until 2023, the focus was on expanding models to unprecedented scales. But the era of creating ever-larger models appears to be coming to an end. Many newer models like Grok or Llama 3 are smaller in size yet maintain or even improve performance compared to models from just a year ago. The drive now is to reduce model size, optimize resources, and maintain power. </p> <h3>The Plateau of Large Language Models (LLMs)</h3> <p><!-- divi:image {"id":260082,"sizeSlug":"full","linkDestination":"none"} --></p> <figure class="wp-block-image size-full"><img decoding="async" src="https://objectbox.io/wordpress/wp-content/uploads/2024/09/2024_09_26_SLMs.svg" alt="" class="wp-image-260082" /></figure> <p class="wp-block-heading" style="text-align: center;"> <p><!-- divi:heading {"level":3} --></p> <h3 class="wp-block-heading">Why Bigger No Longer Equals Better</h3> <p>As models become larger, developers are realizing that the performance improvements aren’t always worth the additional computational cost. Breakthroughs in <a href="https://www.ibm.com/topics/knowledge-distillation">knowledge distillation</a> and <a href="https://www.arxiv.org/abs/2408.13296">fine-tuning</a> enable smaller models to compete with and even outperform their larger predecessors in specific tasks. For example, medium-sized models like Llama with 70B parameters and Gemma-2 with 27B parameters are among the top 30 models in the <a href="https://lmarena.ai/?leaderboard">chatbot arena</a>, outperforming even much larger models like GPT-3.5 with 175B parameters.</p> <p><!-- divi:heading {"level":3} --></p> <h3 class="wp-block-heading">The Shift Towards Small Language Models (SLMs)</h3> <p>In parallel with the optimization of LLMs, the rise of SLMs presents a new trend (see Figure). These models require fewer computational resources, offer faster inference times, and have the potential to run directly on devices. In combination with an <a href="https://objectbox.io/the-first-on-device-vector-database-objectbox-4-0/"><strong>on-device database</strong></a>, this enables powerful local GenAI and <a href="https://www.linkedin.com/posts/shubham-panchal-82ba92160_android-programming-machinelearning-activity-7242447781158699009-N7A7?utm_source=share&utm_medium=member_desktop">on-device RAG apps</a> on all kinds of embedded devices, like on mobile phones, Raspberry Pis, commodity laptops, IoT, and robotics.</p> <p><!-- divi:heading --></p> <h2 class="wp-block-heading">Advantages of SLMs</h2> <p>Despite the growing complexity of AI systems, SLMs offer several key advantages that make them essential in today’s AI landscape: </p> <p><!-- /divi:paragraph --></p></div> </div> </div> </div><div class="et_pb_row et_pb_row_1 two-col-tab"> <div class="et_pb_column et_pb_column_1_4 et_pb_column_1 et_pb_css_mix_blend_mode_passthrough"> <div class="et_pb_module et_pb_image et_pb_image_0"> <span class="et_pb_image_wrap "><picture decoding="async" title="speed-icon" class="wp-image-53062"> <source type="image/webp" srcset="https://objectbox.io/wordpress/wp-content/uploads/2021/01/speed-icon.png.webp"/> <img decoding="async" width="112" height="101" src="https://objectbox.io/wordpress/wp-content/uploads/2021/01/speed-icon.png" alt="speed-icon"/> </picture> </span> </div> </div><div class="et_pb_column et_pb_column_3_4 et_pb_column_2 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_1 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><p><strong>Efficiency and Speed</strong><br />SLMs are significantly more efficient, needing less computational power to operate. This makes them perfect for resource-constrained environments like <a href="https://objectbox.io/what-is-edge-computing/">edge computing</a>, mobile phones, and IoT systems. This enables quicker response times and more real-time applications. For example, studies show that small models like DistilBERT can retain <a href="https://arxiv.org/abs/1910.01108">over 95% of the performance of larger models in some tasks while being 60% smaller and faster to execute.</a></p></div> </div> </div> </div><div class="et_pb_row et_pb_row_2 two-col-tab"> <div class="et_pb_column et_pb_column_1_4 et_pb_column_3 et_pb_css_mix_blend_mode_passthrough"> <div class="et_pb_module et_pb_image et_pb_image_1"> <span class="et_pb_image_wrap "><img decoding="async" width="150" height="150" src="https://objectbox.io/wordpress/wp-content/uploads/2024/10/phone-tablet-150x150-1.png" alt="" title="phone-tablet-150x150" class="wp-image-260119" /></span> </div> </div><div class="et_pb_column et_pb_column_3_4 et_pb_column_4 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_2 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><p><strong>Accessibility</strong><br />As SLMs are less resource-hungry (less hardware requirements, less CPU, memory, power needs), they are more accessible for companies and developers with smaller budgets. Because the model and data can be used locally, on-device / on-premise, there is no need for cloud infatstructure and they are also usable for use cases with high privacy requirements. All in all, SLMs democratize AI development and empower smaller teams and individual developers to deploy advanced models on more affordable hardware.</p></div> </div> </div> </div><div class="et_pb_row et_pb_row_3 two-col-tab"> <div class="et_pb_column et_pb_column_1_4 et_pb_column_5 et_pb_css_mix_blend_mode_passthrough"> <div class="et_pb_module et_pb_image et_pb_image_2"> <span class="et_pb_image_wrap "><img decoding="async" width="150" height="150" src="https://objectbox.io/wordpress/wp-content/uploads/2024/10/resourcefulness-teal-150x150.png.webp" alt="" title="resourcefulness-teal-150x150.png" class="wp-image-260120" /></span> </div> </div><div class="et_pb_column et_pb_column_3_4 et_pb_column_6 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_3 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><p><strong>Cost Reduction and Sustainability</strong><br />Training and deploying large models require <a href="https://www.forbes.com/sites/craigsmith/2023/09/08/what-large-models-cost-you--there-is-no-free-ai-lunch/">immense computational and financial resources</a>, and comes with high operational costs. SLMs drastically reduce the cost of training, deployment, and operation as well as the carbon footprint, making AI more financially and environmentally sustainable.</p></div> </div> </div> </div><div class="et_pb_row et_pb_row_4 two-col-tab"> <div class="et_pb_column et_pb_column_1_4 et_pb_column_7 et_pb_css_mix_blend_mode_passthrough"> <div class="et_pb_module et_pb_image et_pb_image_3"> <span class="et_pb_image_wrap "><img decoding="async" width="150" height="150" src="https://objectbox.io/wordpress/wp-content/uploads/2024/10/Gear.png" alt="Gear" title="Gear" class="wp-image-260121" /></span> </div> </div><div class="et_pb_column et_pb_column_3_4 et_pb_column_8 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_4 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><p><strong>Specialization and Fine-tuning<br /></strong>SLMs can be fine-tuned more efficiently for specific applications. They excel in domain-specific tasks because their smaller size allows for faster and more efficient retraining. It makes them ideal for sectors like healthcare, legal document analysis, or customer service automation. For instance, <a href="https://research.google/blog/distilling-step-by-step-outperforming-larger-language-models-with-less-training-data-and-smaller-model-sizes/">using the ‘distilling step-by-step’ mechanism, a 770M parameter T5 model outperformed a 540B parameter PaLM model using 80% of the benchmark dataset, showcasing the power of specialized training techniques with a much smaller model size</a></p></div> </div> </div> </div><div class="et_pb_row et_pb_row_5 two-col-tab"> <div class="et_pb_column et_pb_column_1_4 et_pb_column_9 et_pb_css_mix_blend_mode_passthrough"> <div class="et_pb_module et_pb_image et_pb_image_4"> <span class="et_pb_image_wrap "><img decoding="async" width="150" height="150" src="https://objectbox.io/wordpress/wp-content/uploads/2024/10/AI-Icon-1-150x150-1.png" alt="Gear" title="AI-Icon-1-150x150" class="wp-image-260122" /></span> </div> </div><div class="et_pb_column et_pb_column_3_4 et_pb_column_10 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_5 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><p><strong>On-Device AI for Privacy and Security<br /></strong>SLMs are becoming compact enough for deployment on edge devices like smartphones, IoT sensors, and wearable tech. This reduces the need for sensitive data to be sent to external servers, ensuring that user data stays local. With the rise of <a href="https://objectbox.io/the-first-on-device-vector-database-objectbox-4-0/"><strong>on-device vector databases</strong></a>, SLMs can now handle use-case-specific, personal, and private data directly on the device. This allows more advanced AI apps, like those using <a href="https://objectbox.io/retrieval-augmented-generation-rag-with-vector-databases-expanding-ai-capabilities/">RAG</a>, to interact with personal documents and perform tasks without sending data to the cloud. With a local, on-device vector database users get personalized, secure AI experiences while keeping their data private.</p></div> </div> </div> </div><div class="et_pb_row et_pb_row_6"> <div class="et_pb_column et_pb_column_4_4 et_pb_column_11 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_6 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><!-- divi:paragraph --> <p> <span style="color: #1b1815; font-size: 22px;">The Future: Fit-for-Purpose Models: From Tiny to Small to Large Language models</span></p> <p> <span style="font-size: 14px;">The future of AI will likely see the rise of models that are neither massive nor minimal but fit-for-purpose. This “right-sizing” reflects a broader shift toward models that balance scale with practicality. SLMs are becoming the go-to choice for environments where specialization is key and resources are limited. Medium-sized models (20-70 billion parameters) are becoming the standard choice for balancing computational efficiency and performance on general AI tasks. At the same time, SLMs are proving their worth in areas that require low latency and high privacy.</span></p> <p>Innovations in model compression, parameter-efficient fine-tuning, and new architecture designs are enabling these smaller models to match or even outperform their predecessors. The focus on optimization rather than expansion will continue to be the driving force behind AI development in the coming years.</p> <p> </p> <!-- divi:paragraph --> <p> <span style="color: #1b1815; font-size: 22px;">Conclusion: Scaling Smart is the New Paradigm</span></p> <p> </p> <!-- divi:paragraph --> <p>As the field of AI moves beyond the era of “bigger is better,” SLMs and medium-sized models are becoming more important than ever. These models represent the future of scalable and efficient AI. They serve as the workhorses of an industry that is looking to balance performance with sustainability and efficiency. The focus on smaller, more optimized models demonstrates that innovation in AI isn’t just about scaling up; it’s about scaling smart.</p> <!-- /divi:paragraph --></div> </div> </div> </div> </div> </article> <article id="post-259634" class="et_pb_post post-259634 post type-post status-publish format-standard has-post-thumbnail hentry category-ai category-edge-ai category-edge-computing category-mobile-database category-vector-database tag-ai tag-edge-ai"> <a class="entry-featured-image-url" href="https://objectbox.io/local-ai-what-it-is-and-why-we-need-it/"> <img src="https://objectbox.io/wordpress/wp-content/uploads/2024/09/LocalAI_EdgeAI_on-deviceAI-1080x675.jpg" alt="Local AI – what it is and why we need it" class="" width="1080" height="675" /> </a> <h2 class="entry-title"><a href="https://objectbox.io/local-ai-what-it-is-and-why-we-need-it/">Local AI – what it is and why we need it</a></h2> <p class="post-meta"> by <span class="author vcard"><a href="https://objectbox.io/author/anastasia/" title="Posts by Anastasia" rel="author">Anastasia</a></span> | <span class="published">Sep 11, 2024</span> | <a href="https://objectbox.io/category/ai/" rel="category tag">AI</a>, <a href="https://objectbox.io/category/edge-ai/" rel="category tag">Edge AI</a>, <a href="https://objectbox.io/category/edge-computing/" rel="category tag">Edge Computing</a>, <a href="https://objectbox.io/category/mobile-database/" rel="category tag">Mobile Database</a>, <a href="https://objectbox.io/category/vector-database/" rel="category tag">vector database</a></p><p><strong>Artificial Intelligence (AI)</strong> has become an integral part of our daily lives in recent years. However, it has been tied to running in huge, centralized cloud data centers. This year, <strong>“local AI”</strong>, also known as <strong>“on-device AI”</strong> or <strong>“Edge AI”</strong>, is gaining momentum. Local <a href="https://objectbox.io/vector-database/">vector databases</a>, <a href="https://news.microsoft.com/source/features/ai/the-phi-3-small-language-models-with-big-potential/">efficient language models</a> (so-called <strong>Small Language Models, SLMs</strong>), and <a href="https://developers.google.com/learn/pathways/on-device-ml-4">AI algorithms</a> are becoming smaller, more efficient, and less compute-heavy. As a result, they can now run on a wide variety of devices, locally.</p><figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://objectbox.io/wordpress/wp-content/uploads/2024/09/LLM_SLM_evolution.svg" alt="" class="wp-image-259635" style="width:1045px;height:auto"/><figcaption class="wp-element-caption">Figure 1. Evolution of language model’s size with time. Large language models (LLMs) are marked as celadon circles, and small language models (SLMs) as blue ones.</figcaption></figure><h2 class="wp-block-heading">What is Local AI (on-device AI, Edge AI)?</h2><p><strong>Local AI </strong>refers to running AI applications directly on a device, locally, instead of relying on (distant) cloud servers. Such an on-deivce AI works in real-time on commodity hardware (e.g. old PCs), consumer devices (e.g. smartphones, wearables), and other types of embedded devices (e.g. robots and <a href="https://objectbox.io/retail-edge-computing/">point-of-sale (POS)</a> systems used in shops and restaurants). An interest in local Artificial Intelligence is growing (see Figure 2).</p><figure class="wp-block-image"><img decoding="async" src="https://lh7-qw.googleusercontent.com/docsz/AD_4nXeze-7YvLvyw6fhMEgiSslp_7VCF5oqvWq8HHRrYpxipUCnNX_XcU4JVg18J2cnA3qRmpEFk325usXaKGrVjXJvs3qBxeWcGpid0l8xz_Ee2RINoPS5nNasxXL2L3zMQGLCzLM7IpcI9gWyg2z3N7FO8gs?key=1RLM3AWa7WNMXiw1JAsxHA" alt=""/><figcaption class="wp-element-caption">Figure 2. Interest over time according to Google Trends.</figcaption></figure><h2 class="wp-block-heading">Why use Local AI: Benefits</h2><p>Local AI addresses many of the concerns and challenges of current cloud-based AI applications. The main reasons for the advancement of local AI are: </p><ul><li><strong>Privacy / Data Security</strong> – Data stays on the device and under one’s control</li> <li><strong>Accessibility</strong> – AI works independently from an internet connection</li> <li><strong>Sustainability</strong> – AI consumes significantly less energy compared to cloud setups</li></ul><p>On top, local AI reduces:</p><ul><li><strong>latency</strong>, enabling real-time apps</li> <li><strong>data transmission and cloud costs</strong>, enabling commodity business cases</li></ul><p>In short: By leveraging the power of <a href="https://objectbox.io/what-is-edge-computing/">Edge Computing</a> and on-device processing, local AI can unlock new possibilities for a wide range of applications, from <a href="https://www.apple.com/apple-intelligence/">consumer applications</a> to<a href="https://objectbox.io/iiot-edge-computing/"> industrial automation</a> to <a href="https://objectbox.io/iot-edge-computing-and-digitalization-in-healthcare/">healthcare</a>.</p><h3 class="wp-block-heading">Privacy: Keeping Data Secure</h3><p>In a world where data privacy concerns are increasing, local AI offers a solution. Since data is processed directly on the device, sensitive information remains local, minimizing the risk of breaches or misuse of personal data. No need for data sharing, and data ownership is clear. This is the key to using AI responsibly in industries like healthcare, where sensitive data needs to be processed and used without being sent to external servers. For example, medical data analysis or diagnostic tools can run locally on a doctor’s device and be synchronized to other on-premise, local devices (like e.g. PCs, on-premise servers, specific medical equipment) as needed. This ensures that patient data never leaves the clinic, and data processing is compliant with strict privacy regulations like <a href="https://www.edps.europa.eu/data-protection/our-work/subjects/health_en">GDPR</a> or <a href="https://www.hhs.gov/hipaa/index.html">HIPAA</a>.</p><h3 class="wp-block-heading">Accessibility: AI for Anyone, Anytime</h3><p>One of the most significant advantages of local AI is its ability to function without an internet connection. This opens up a world of opportunities for users in remote locations or those with unreliable connectivity. Imagine having access to language translation, image recognition, or predictive text tools on your phone without needing to connect to the internet. Or a point-of-sale (POS) system in a retail store that operates seamlessly, even when there’s no internet. These AI-powered systems can still analyze customer buying habits, manage inventory, or suggest product recommendations offline, ensuring businesses don’t lose operational efficiency due to connectivity issues. Local AI makes this a reality. In combination with little hardware requirements, it makes AI accessible for anyone, anytime. Therefore, local AI is an integral ingredient in making AI more inclusive and to <a href="https://arxiv.org/abs/2303.12642">democratize AI</a>.</p><h3 class="wp-block-heading">Sustainability: Energy Efficiency</h3><p>Cloud-based AI requires massive server farms that consume enormous amounts of energy. Despite strong efficiency improvements, in 2022, <a href="https://www.iea.org/energy-system/buildings/data-centres-and-data-transmission-networks">data centers globally consumed between 240 and 340 terawatt-hours (TWh) of electricity</a>. To put this in perspective, data centers now use more electricity than entire countries like Argentina or Egypt. This growing energy demand places considerable pressure on global energy resources and contributes to around 1% of energy-related CO2 emissions. <a href="https://www.goldmansachs.com/insights/articles/AI-poised-to-drive-160-increase-in-power-demand">The rise of AI has amplified these trends</a>. AI workloads alone could drive a 160% increase in data center energy demand by 2030, with some estimates suggesting that AI could consume 500% more energy in the UK than it does today. By that time, data centers may account for up to 8% of total energy consumption in the United States. In contrast, local AI presents a more sustainable alternative, e.g. by leveraging Small Language Models, which require less power to train and run. Since computations happen directly on the device, local AI significantly reduces the need for constant data transmission and large-scale server infrastructure. This not only lowers energy use but also helps decrease the overall carbon footprint. Additionally, integrating a <a href="https://objectbox.io/vector-database-for-ondevice-ai/">local vector database</a> can further enhance efficiency by minimizing reliance on power-hungry data centers, contributing to more energy-efficient and environmentally friendly technology solutions.</p><h2 class="wp-block-heading">When to use local AI: Use case examples</h2><p>Local AI enables an infinite number of new use cases. Thanks to advancements in AI models and vector databases, AI apps can be run cost-effectively on less capable hardware, e.g. commodity PCs, without the need for an internet connection and data sharing. This opens up the opportunity for offline AI, real-time AI, and private AI applications on a wide variety of devices. From smartphones and smartwatches to industrial equipment and even cars, local AI is becoming accessible to a broad range of users. </p><ul><li><strong>Consumer Use Cases (B2C):</strong> Everyday apps like photo editors, voice assistants, and fitness trackers can integrate AI to offer faster and more personalized services (local <a href="https://objectbox.io/retrieval-augmented-generation-rag-with-vector-databases-expanding-ai-capabilities/">RAG</a>), or integrate generative AI capabilities. </li> <li><strong>Business Use Cases (B2B): </strong>Retailers, manufacturers, and service providers can use local AI for data analysis, process automation, and real-time decision-making, even in offline environments. This improves efficiency and user experience without needing constant cloud connectivity.</li></ul><h2 class="wp-block-heading">Conclusion</h2><p>Local AI is a powerful alternative to cloud-based solutions, making AI more accessible, private, and sustainable. With Small Language Models and<a href="https://objectbox.io/vector-database-for-ondevice-ai/"> on-device vector databases like ObjectBox,</a> it is now possible to bring AI onto everyday devices. From the individual user who is looking for convenient, always-available tools to large businesses seeking to improve operations and create new services without relying on the cloud – local AI is transforming how we interact with technology everywhere.</p> </article> <article id="post-259074" class="et_pb_post post-259074 post type-post status-publish format-standard has-post-thumbnail hentry category-ai category-edge-ai category-edge-database category-mobile-database category-objectbox category-swift category-vector-database tag-ios tag-mobile-database tag-release tag-vector-database"> <a class="entry-featured-image-url" href="https://objectbox.io/swift-ios-on-device-vector-database-aka-semantic-index/"> <img src="https://objectbox.io/wordpress/wp-content/uploads/2024/07/FirstIoSVectorDatabase-Swift2.jpg" alt="First on-device Vector Database (aka Semantic Index) for iOS" class="" width="1080" height="675" /> </a> <h2 class="entry-title"><a href="https://objectbox.io/swift-ios-on-device-vector-database-aka-semantic-index/">First on-device Vector Database (aka Semantic Index) for iOS</a></h2> <p class="post-meta"> by <span class="author vcard"><a href="https://objectbox.io/author/greenrobot-team/" title="Posts by Uwe" rel="author">Uwe</a></span> | <span class="published">Jul 24, 2024</span> | <a href="https://objectbox.io/category/ai/" rel="category tag">AI</a>, <a href="https://objectbox.io/category/edge-ai/" rel="category tag">Edge AI</a>, <a href="https://objectbox.io/category/edge-database/" rel="category tag">Edge Database</a>, <a href="https://objectbox.io/category/mobile-database/" rel="category tag">Mobile Database</a>, <a href="https://objectbox.io/category/mobile-database/objectbox/" rel="category tag">ObjectBox</a>, <a href="https://objectbox.io/category/mobile-database/swift/" rel="category tag">Swift</a>, <a href="https://objectbox.io/category/vector-database/" rel="category tag">vector database</a></p><div class="et_pb_section et_pb_section_1 et_section_regular" > <div class="et_pb_row et_pb_row_7"> <div class="et_pb_column et_pb_column_4_4 et_pb_column_12 et_pb_css_mix_blend_mode_passthrough et-last-child"> <div class="et_pb_module et_pb_text et_pb_text_7 et_pb_text_align_left et_pb_bg_layout_light"> <div class="et_pb_text_inner"><p>Easily empower your iOS and macOS apps with fast, private, and sustainable AI features. All you need is a Small Language Model (SLM; aka “small LLM”) and ObjectBox – our <a href="https://objectbox.io/">on-device vector database</a> built for <strong>Swift</strong> apps. This gives you a local semantic index for fast on-device AI features like RAG or GenAI that run without an internet connection and keep data private.</p><p>The recently demonstrated “Apple Intelligence” features are precisely that: a combination of on-device AI models and a vector database (semantic index). Now, <a href="https://swift.objectbox.io/"><strong>ObjectBox Swift</strong></a> enables you to add the same kind of AI features easily and quickly to your iOS apps right now.</p><p><br>Not developing with Swift? We also have a <a href="https://pub.dev/packages/objectbox">Flutter / Dart binding</a> (works on iOS, Android, desktop), a <a href="https://github.com/objectbox/objectbox-java">Java / Kotlin binding</a> (works on Android and JVM), or <a href="https://github.com/objectbox/objectbox-c">one in C++</a> for embedded devices.</p><h2 class="wp-block-heading"><strong>Enabling Advanced AI Anywhere, Anytime</strong></h2><p>Typical AI apps use data (e.g. user-specific data, or company-specific data) and multiple queries to enhance and personalize the quality of the model’s response and perform complex tasks. And now, for the very first time, with the release of ObjectBox 4.0, this will be possible locally on restricted devices.</p><figure class="wp-block-image aligncenter size-full"><img decoding="async" width="980" height="450" src="https://objectbox.io/wordpress/wp-content/uploads/2024/07/localAiTechStack.png" alt="" class="wp-image-259105"/><figcaption class="wp-element-caption">Local AI Tech Stack Example for on-device RAG</figcaption></figure><h2 class="wp-block-heading">Swift <strong>on-device Vector Database and search for iOS and MacOS</strong></h2><p>With the ObjectBox Swift 4.0 release, it is possible to create a scalable vector index on floating point vector properties. It’s a very special index that uses an algorithm called HNSW. It’s scalable because it can find relevant data within millions of entries in a matter of milliseconds.<br>Let’s pick up the cities example from our <a href="https://docs.objectbox.io/ann-vector-search">vector search documentation</a>. Here, we use cities with a location vector and want to find the closest cities (a proximity search). The Swift class for the City entity shows how to define an HNSW index on the location:</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49fdfd379615410" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-1">1</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-3">3</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-5">5</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-7">7</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-9">9</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fdfd379615410-11">11</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-1"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-2"><span class="crayon-c">// objectbox: entity</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-3"><span class="crayon-t">class</span><span class="crayon-h"> </span><span class="crayon-e">City</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-4"><span class="crayon-h"> </span><span class="crayon-t">var</span><span class="crayon-h"> </span><span class="crayon-v">id</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">Id</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-5"><span class="crayon-h"> </span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-6"><span class="crayon-h"> </span><span class="crayon-t">var</span><span class="crayon-h"> </span><span class="crayon-v">name</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-t">String</span><span class="crayon-sy">?</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-7"><span class="crayon-h"> </span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-8"><span class="crayon-h"> </span><span class="crayon-c">// objectbox:hnswIndex: dimensions=2</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-9"><span class="crayon-h"> </span><span class="crayon-t">var</span><span class="crayon-h"> </span><span class="crayon-v">location</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-t">Float</span><span class="crayon-sy">]</span><span class="crayon-sy">?</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-10"><span class="crayon-sy">}</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fdfd379615410-11"> </div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0003 seconds] --> <p>Inserting City objects with a float vector and HNSW index works as usual, the indexing happens behind the scenes:</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49fe17835334986" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-1">1</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-3">3</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-5">5</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-7">7</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe17835334986-8">8</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-1"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-2"><span class="crayon-e">let </span><span class="crayon-v">box</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">Box</span><span class="crayon-o"><</span><span class="crayon-v">City</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">store</span><span class="crayon-sy">.</span><span class="crayon-e">box</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-3"><span class="crayon-st">try</span><span class="crayon-h"> </span><span class="crayon-v">box</span><span class="crayon-sy">.</span><span class="crayon-e">put</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-4"><span class="crayon-h"> </span><span class="crayon-e">City</span><span class="crayon-sy">(</span><span class="crayon-s">"Barcelona"</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-cn">41.385063</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">2.173404</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-5"><span class="crayon-h"> </span><span class="crayon-e">City</span><span class="crayon-sy">(</span><span class="crayon-s">"Nairobi"</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-o">-</span><span class="crayon-cn">1.292066</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">36.821945</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-6"><span class="crayon-h"> </span><span class="crayon-e">City</span><span class="crayon-sy">(</span><span class="crayon-s">"Salzburg"</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-cn">47.809490</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">13.055010</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-7"><span class="crayon-sy">]</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe17835334986-8"> </div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0004 seconds] --> <p>To then find cities closest to a location, we do a nearest neighbor search using the new query condition and “find with scores” methods. The nearest neighbor condition accepts a query vector, e.g. the coordinates of Madrid, and a count to limit the number of results of the nearest neighbor search, here we want at max 2 cities. The find with score methods are like a regular find, but in addition return a score. This score is the distance of each result to the query vector. In our case, it is the distance of each city to Madrid.</p><!-- Urvanov Syntax Highlighter v2.8.34 --> <div id="urvanov-syntax-highlighter-674306d49fe19958897562" class="urvanov-syntax-highlighter-syntax crayon-theme-objectbox-dark urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-always" style=" font-size: 15px !important; line-height: 18px !important;"> <div class="urvanov-syntax-highlighter-plain-wrap"></div> <div class="urvanov-syntax-highlighter-main" style=""> <table class="crayon-table"> <tr class="urvanov-syntax-highlighter-row"> <td class="crayon-nums " data-settings="hide"> <div class="urvanov-syntax-highlighter-nums-content" style="font-size: 15px !important; line-height: 18px !important;"><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-1">1</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-2">2</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-3">3</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-4">4</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-5">5</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-6">6</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-7">7</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-8">8</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-9">9</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-10">10</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-11">11</div><div class="crayon-num" data-line="urvanov-syntax-highlighter-674306d49fe19958897562-12">12</div></div> </td> <td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style="font-size: 15px !important; line-height: 18px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-1"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-2"><span class="crayon-e">let </span><span class="crayon-v">madrid</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-cn">40.416775</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-cn">3.703790</span><span class="crayon-sy">]</span><span class="crayon-h"> </span><span class="crayon-c">// query vector</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-3"><span class="crayon-c">// Prepare a Query object to search for the 2 closest neighbors:</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-4"><span class="crayon-e">let </span><span class="crayon-v">query</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-st">try</span><span class="crayon-h"> </span><span class="crayon-i">box</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-5"><span class="crayon-h"> </span><span class="crayon-sy">.</span><span class="crayon-i">query</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">City</span><span class="crayon-sy">.</span><span class="crayon-v">location</span><span class="crayon-sy">.</span><span class="crayon-e">nearestNeighbors</span><span class="crayon-sy">(</span><span class="crayon-v">queryVector</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">madrid</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">maxCount</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">2</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-6"><span class="crayon-h"> </span><span class="crayon-sy">.</span><span class="crayon-e">build</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-7"> </div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-8"><span class="crayon-e">let </span><span class="crayon-v">results</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-st">try</span><span class="crayon-h"> </span><span class="crayon-v">query</span><span class="crayon-sy">.</span><span class="crayon-e">findWithScores</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-9"><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-e">result</span><span class="crayon-h"> </span><span class="crayon-st">in</span><span class="crayon-h"> </span><span class="crayon-e">results</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-10"><span class="crayon-h"> </span><span class="crayon-e">print</span><span class="crayon-sy">(</span><span class="crayon-s">"City: <span class="crayon-sy">\</span><span class="crayon-sy">(</span><span class="crayon-v">result</span><span class="crayon-sy">.</span><span class="crayon-t">object</span><span class="crayon-sy">.</span><span class="crayon-v ">name</span><span class="crayon-sy">)</span>, distance: <span class="crayon-sy">\</span><span class="crayon-sy">(</span><span class="crayon-v">result</span><span class="crayon-sy">.</span><span class="crayon-v ">score</span><span class="crayon-sy">)</span>"</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-11"><span class="crayon-sy">}</span></div><div class="crayon-line" id="urvanov-syntax-highlighter-674306d49fe19958897562-12"> </div></div></td> </tr> </table> </div> </div> <!-- [Format Time: 0.0040 seconds] --> <p>The ObjectBox on-device vector database empowers AI models to seamlessly interact with user-specific data — like texts and images — directly on the device, without relying on an internet connection. With ObjectBox, data never needs to leave the device, ensuring data privacy. </p><p>Thus, it’s the perfect solution for developers looking to create smarter apps that are efficient and reliable in any environment. It enhances everything from personalized banking apps to robust automotive systems.</p><h2 class="wp-block-heading"><strong>ObjectBox: Optimized for Resource Efficiency</strong></h2><p>At ObjectBox, we specialize on efficiency that comes from optimized code. Our hearts beat for creating highly efficient and capable software that outperforms alternatives on small and big hardware. ObjectBox maximizes speed while minimizing resource use, extending battery life, and reducing CO<sub>2</sub> emissions.</p><p>With this expertise, we took a unique approach to vector search. The result is not only a vector database that runs efficiently on constrained devices but also one that outperforms server-side vector databases (<a href="https://objectbox.io/python-on-device-vector-and-object-database-for-local-ai/">see first benchmark results</a>; on-device benchmarks coming soon). We believe this is a significant achievement, especially considering that ObjectBox still upholds full ACID properties (guaranteeing data integrity).</p><figure class="wp-block-image aligncenter size-full"><img decoding="async" width="1488" height="920" src="https://objectbox.io/wordpress/wp-content/uploads/2024/07/vectorDatabases_local_server_edgeAI.png" alt="" class="wp-image-259106"/><figcaption class="wp-element-caption">Cloud/server vector databases vs. On-device/Edge vector databases</figcaption></figure><p>Also, keep in mind that ObjectBox is a fully capable database. It allows you to store complex data objects along with vectors. Thus, you have the full feature set of a database at hand. It empowers hybrid search, traceability, and powerful queries.</p><h2 class="wp-block-heading"><strong>Use Cases / App ideas</strong></h2><p>ObjectBox can be used for a million different things, from empowering generative AI features in mobile apps to predictive maintenance on ECUs in cars to AI-enhanced games. For iOS apps, we expect to see the following on-device AI use cases very soon:</p><ul><li>Across all categories we’ll see <strong>Chat-with-files</strong> apps:<ul><li><strong>Travel</strong>: Imagine chatting to your favorite <strong>travel </strong>guide offline, anytime, anywhere. No need to carry bulky paper books, or scroll through a long PDF on your mobile.</li> <li><strong>Research</strong>: Picture yourself chatting with all the research papers in your field. Easily compare studies and findings, and quickly locate original quotes.</li></ul></li> <li>Lifestyle:<ul><li><strong>Health:</strong> Apps offering personalized recommendations based on scientific research, your preferences, habits, and individual health data. This includes data tracked from your device, lab results, and doctoral diagnosis. </li></ul></li> <li>Productivity: <strong>Personal assistants</strong> for all areas of life.<ul><li><strong>Family Management:</strong> Interact with assistants tailored to specific roles. Imagine a parent’s assistant that monitors school channels, chat groups, emails, and calendars. Its goal is to automatically add events like school plays, remind you about forgotten gym bags, and even suggest birthday gifts for your child’s friends.</li> <li><strong>Professional Assistants:</strong> Imagine being a busy sales rep on the go, juggling appointments and travel. A powerful on-device sales assistant can do more than just automation. It can <strong>prepare contextual and personalized follow-ups instantly</strong>. For example, by summarizing talking points, attaching relevant company documents, and even suggesting who to CC in your emails.</li></ul></li> <li>Educational:<ul><li>Educational apps featuring “chat-with-your-files” functionality for learning materials and research papers. But going beyond that, they generate quizzes and practice questions to help people solidify knowledge.</li></ul></li></ul><h2 class="wp-block-heading"><strong>Run the local AI Stack with a Language Model</strong> (SLM, LLM)</h2><p>Recent Small Language Models (SMLs) already demonstrate impressive capabilities while being small enough to run on e.g. mobile phones. To run the model on-device of an iPhone or a macOS computer, you need a model runtime. On Apple Silicone the best choice in terms of performance typically <a href="https://github.com/ml-explore/mlx">MLX</a> – a framework brought to you by Apple machine learning research. It supports the hardware very efficiently by supporting CPU/GPU and unified memory.</p><p>To summarize, you need these three components to run on-device AI with an semantic index:</p><ul><li>ObjectBox: vector database for the semantic index</li> <li>Models: choose an embedding model and a language model to matching your requirements</li> <li>MLX as the model runtime</li></ul><p>Start building next generation on-device AI apps today! Head over to our <a href="https://docs.objectbox.io/on-device-vector-search">vector search documentation</a> and <a href="https://swift.objectbox.io/">Swift documentation</a> for details.</p></div> </div> </div> </div> </div> </article> <article id="post-258760" class="et_pb_post post-258760 post type-post status-publish format-standard has-post-thumbnail hentry category-ai category-edge-database category-mobile-database category-vector-database tag-rag"> <a class="entry-featured-image-url" href="https://objectbox.io/retrieval-augmented-generation-rag-with-vector-databases-expanding-ai-capabilities/"> <img src="https://objectbox.io/wordpress/wp-content/uploads/2024/06/RAG_thumbnail-1080x675.png" alt="Retrieval Augmented Generation (RAG) with vector databases: Expanding AI Capabilities" class="" width="1080" height="675" /> </a> <h2 class="entry-title"><a href="https://objectbox.io/retrieval-augmented-generation-rag-with-vector-databases-expanding-ai-capabilities/">Retrieval Augmented Generation (RAG) with vector databases: Expanding AI Capabilities</a></h2> <p class="post-meta"> by <span class="author vcard"><a href="https://objectbox.io/author/anastasia/" title="Posts by Anastasia" rel="author">Anastasia</a></span> | <span class="published">Jun 18, 2024</span> | <a href="https://objectbox.io/category/ai/" rel="category tag">AI</a>, <a href="https://objectbox.io/category/edge-database/" rel="category tag">Edge Database</a>, <a href="https://objectbox.io/category/mobile-database/" rel="category tag">Mobile Database</a>, <a href="https://objectbox.io/category/vector-database/" rel="category tag">vector database</a></p><h2 class="wp-block-heading">What is RAG?</h2><p><strong>Retrieval Augmented Generation (RAG)</strong> is a technique to enhance the intelligence of <strong>large language models (LLMs)</strong> with additional knowledge, such as reliable facts from specific sources, private or personal information not available to others, or just fresh news to improve their answers. Typically, the additional knowledge is provided to the model from a <strong>vector database</strong>. For example, you can add internal data from your company, the latest news or the data from your personal devices to get responses that use your context. It can truly help you like an expert instead of giving generalized answers. This technique also reduces hallucinations. </p><h2 class="wp-block-heading">Why RAG?</h2><p>Let’s take a look at the key benefits that RAG in general offers:</p><ul><li><strong>Customization and Adaptation:</strong> RAG helps LLMs to tailor responses to specific domains or use cases by using vector databases to store and retrieve domain-specific information. It turns general intelligence into expert intelligence.</li> <li><strong>Contextual Relevance: </strong>By incorporating information retrieved from a large corpus of text,<strong> </strong>RAG models can generate contextually relevant responses. It improves the quality of generated responses compared to traditional generation models.</li> <li><strong>Accuracy and diversity:</strong> Incorporation of external information also helps to generate more informative and accurate responses and keep LLM up-to-date. This also helps to avoid repetitive or generic responses and allows for more diverse and interesting conversations.</li> <li><strong>Cost-effective implementation: </strong>RAG requires <a href="https://www.k2view.com/blog/retrieval-augmented-generation-vs-fine-tuning/#Data-Products-for-RAG-and-Fine-Tuning">less task-specific training data compared to fine-tuning the foundation models.</a> When we compare retrieval augmented generation vs fine-tuning, RAG’s ability to use external knowledge stands out. While fine-tuning requires lots of labeled data, RAG can rely on external sources. This can be particularly beneficial in scenarios where annotated training data is limited or expensive to obtain, thus, providing a cost-effective implementation. </li> <li><strong>Transparency:</strong> RAG models provide transparency in their responses by explicitly indicating the source of retrieved information. This allows users to understand how the model arrived at its response and helps<strong> enhance trust </strong>in the generated output.</li></ul><p>Therefore, RAG is suitable for applications where access to a vast amount of specialized data is necessary. For example, a customer support bot that pulls details from FAQs and generates coherent, conversational responses. Another example is an email drafting tool that fetches information about recent meetings and generates a personalized summary.</p><h2 class="wp-block-heading">How retrieval augmented generation works</h2><p>Let’s discuss the mechanics of how RAG operates with databases, covering its main stages from dataset creation to response generation (see figure).</p><figure class="wp-block-image alignleft size-full is-resized"><img decoding="async" width="845" height="915" src="https://objectbox.io/wordpress/wp-content/uploads/2024/06/image.png" alt="This image has an empty alt attribute; its file name is RAG.png" class="wp-image-258781" style="width:521px;height:auto"/><figcaption class="wp-element-caption"><strong>Retrieval augmented generation diagram</strong></figcaption></figure><div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-1 wp-block-group-is-layout-flex"><p><br></p></div><p></p><ul><li><strong>DB creation: Creation of external dataset</strong></li></ul><p>Before the real use, the vector database should be created. The new data, that lies outside the training dataset of LLM, should be identified and added to the dataset (e.g. up-to-date information or specific information). This dataset is then transferred into <a href="https://objectbox.io/vector-databases-for-edge-ai/">vector embeddings</a> via an AI model (embedding language models) and is stored in the vector database. </p><ul><li><strong>DB in use: Retrieval of relevant information</strong><br>Once a query comes in, it is also transferred into a vector / embedding. It is used then to retrieve the most relevant result from the database. To achieve this, RAG uses semantic search techniques also known as <a href="https://objectbox.io/vector-search-making-sense-of-search-queries/">vector search</a> to understand the user’s query and/or context, retrieving <strong>contextually relevant information</strong> from a large dataset. Vector search<a href="https://objectbox.io/evolution-of-search-traditional-vs-vector-search/"> goes beyond keyword matching and focuses on semantic relationships</a>, improving the quality of the retrieved information and the overall performance of the RAG system in generating contextually relevant responses. </li> <li><strong>DB in use: Augmentation</strong><br>At this stage, the user’s query is augmented by adding the relevant data retrieved in the previous stage. Often, only the top responses from vector search are considered as relevant data. Many databases have additional filtering techniques in place here.</li> <li><strong>Generation</strong><strong><br></strong>The augmented query is sent to the LLM to generate an accurate answer.</li></ul><h2 class="wp-block-heading">The Role of Long Context Windows</h2><p>The rise of the new LLMs with long (<a href="https://arxiv.org/abs/2402.13753">1+million tokens</a>) context windows, like Gemini 1.5, raised the discussion on whether <a href="https://medium.com/enterprise-rag/why-gemini-1-5-and-other-large-context-models-are-bullish-for-rag-ce3218930bb4">long context windows will replace RAG</a>. A long context window enables users to directly incorporate huge amounts of data into a query. Thus, it increases context to the LLM to improve its efficiency. </p><p>Long context length and RAG have pros and cons, and neither will kill the other. Rather than being mutually exclusive, large context windows and RAG can be complemented. Large context windows can enhance RAG applications by <a href="https://medium.com/enterprise-rag/why-gemini-1-5-and-other-large-context-models-are-bullish-for-rag-ce3218930bb4">expanding the margin of precision and accommodating vast amounts of data.</a> However, the capability of the model to take a long context does not mean that it can efficiently leverage all the information.<a href="https://arxiv.org/abs/2307.03172"> If the relevant information is located in the middle of the context window, LLM’s ability to recall it is worse than the one located in the beginning</a>. In order to use RAG with the long context window, the <a href="https://medium.com/@rossashman/the-art-of-rag-part-3-reranking-with-cross-encoders-688a16b64669">reranking</a> (e.g. Cross-Encoder) should be used. The reranking model first calculates a matching score between a given query and vectors in the database (e.g. representing documents). And then it rearranges vector search results so that the most <a href="https://medium.com/@ashpaklmulani/improve-retrieval-augmented-generation-rag-with-re-ranking-31799c670f8e">relevant ones are prioritized</a>.</p><h2 class="wp-block-heading">Future Directions of RAG</h2><p>While RAG offers numerous benefits, there are still opportunities for improvement. Researchers are exploring ways to enhance RAG by combining it with other techniques. These include fine-tuning (<a href="https://arxiv.org/abs/2403.10131">RAFT</a>) or the long context window (in combination with reranking). Another direction of research is expanding RAG capabilities by advancing data handling (including multimodal data), evaluation methodologies, and scalability. Finally, RAG is also affected by the new advances in optimizing LLMs to run locally on restricted devices (mobile, IoT), along with the emergence of the<a href="https://objectbox.io/on-device-vector-database-for-dart-flutter/"> first on-device vector database</a>. Now, RAG can be performed directly on your mobile device, prioritizing privacy, low latency, and offline capabilities.</p> </article> <article id="post-258172" class="et_pb_post post-258172 post type-post status-publish format-standard has-post-thumbnail hentry category-edge-computing category-edge-database category-mobile-database category-vector-database tag-ai tag-semantic-search tag-vector-database tag-vector-search-2"> <a class="entry-featured-image-url" href="https://objectbox.io/vector-search-making-sense-of-search-queries/"> <img src="https://objectbox.io/wordpress/wp-content/uploads/2024/05/vector_search_thumbnail4-1080x675.png" alt="Vector search: making sense of search queries" class="" width="1080" height="675" /> </a> <h2 class="entry-title"><a href="https://objectbox.io/vector-search-making-sense-of-search-queries/">Vector search: making sense of search queries</a></h2> <p class="post-meta"> by <span class="author vcard"><a href="https://objectbox.io/author/anastasia/" title="Posts by Anastasia" rel="author">Anastasia</a></span> | <span class="published">May 29, 2024</span> | <a href="https://objectbox.io/category/edge-computing/" rel="category tag">Edge Computing</a>, <a href="https://objectbox.io/category/edge-database/" rel="category tag">Edge Database</a>, <a href="https://objectbox.io/category/mobile-database/" rel="category tag">Mobile Database</a>, <a href="https://objectbox.io/category/vector-database/" rel="category tag">vector database</a></p><p>Today, finding the most valuable information to your search is more complicated than finding a needle in a haystack. Traditional search engines match keywords and favor SEO-optimized content, but what if there was a way for search engines to<strong> truly understand the meaning behind our queries</strong>? Enter <strong>vector search</strong> – a powerful technology that is transforming how we navigate information, not just for users, but also for applications performing background searches. In this article, we will discuss what vector search is and how it works.</p><h2 class="wp-block-heading"><strong>What is a vector search and why should you care?</strong></h2><figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="636" src="https://objectbox.io/wordpress/wp-content/uploads/2024/05/search_cake-1024x636.png" alt="" class="wp-image-258174" style="width:581px;height:auto"/><figcaption class="wp-element-caption">Example Results with a traditional search for “Simple Fruit Cake”.</figcaption></figure><p><strong>Vector search</strong>, which is also known as <strong>semantic search</strong>, is a technology that improves search accuracy by understanding the meaning (semantics) of the data and relations between its parts. <a href="https://objectbox.io/evolution-of-search-traditional-vs-vector-search/">Unlike traditional search, vector search</a> efficiently handles synonyms, typos, ambiguous language, and broad or fuzzy queries. This is because it focuses on meaning, not just keywords.</p><p class="has-text-align-left">Imagine that you are searching for a dessert to cook during the weekend. In a traditional search engine, the “simple fruit cake” query will reveal only websites that include these keywords. However, a <a href="https://research.google/blog/announcing-scann-efficient-vector-similarity-search/">vector search engine</a> is able to provide results like “apple pie in 20 minutes” or “easy summer desserts”, which capture the essence of the query and align with your desire for a straightforward dessert option, providing more valuable results to you. </p><p>At its core, vector search uses <strong>Large Language models</strong> (LLMs), like GPT, to transform data into mathematical<strong> vectors</strong>, also known as <a href="https://objectbox.io/vector-databases-for-edge-ai/"><strong>vector embeddings</strong></a>. </p><h2 class="wp-block-heading">What is a vector embedding?</h2><figure class="wp-block-image alignright size-large is-resized"><img decoding="async" width="1024" height="1001" src="https://objectbox.io/wordpress/wp-content/uploads/2024/05/vector_space_cake2-1024x1001.png" alt="" class="wp-image-258175" style="width:362px;height:auto"/><figcaption class="wp-element-caption"><strong>2D Vector Space Representation.</strong> “Easy apple pie” is close to “simple fruit cake” as they are both simple and have fruit as an ingredient. “Easy chocolate mousse” shares simplicity but does not contain fruit. “Fancy plum cake” has fruit but is not simple to make. And “extravagant chocolate mousse” does not share either simplicity or fruit as an ingredient. Thus, it is the farthest from “simple fruit cake”.<br></figcaption></figure><p>A <strong>vector</strong> or <strong>vector embedding</strong> is a numerical representation of any kind of unstructured data (e.g. texts, images, videos, audio). It captures its meaning while being easy and efficient to compute with. Think of it like this: imagine you have a collection of cake recipes. You can convert each recipe into a vector embedding, which is like a unique numerical code that represents the recipe’s characteristics (ingredients, cooking methods, flavors, etc.).</p><p>Once all the recipes are encoded into embeddings, we can perform a similarity search. This means we can compare the vectors to see how similar the recipes are. For example, the vector for an easy apple pie recipe would be close to the vector for a simple fruit cake recipe because they share similar characteristics (e.g. simplicity, fruitiness). On the other hand, the vector for an extravagant chocolate mousse cake would be farther away because it involves different ingredients and methods.</p><h2 class="wp-block-heading"><strong>How to compare vectors?</strong></h2><p><strong>Vector similarity</strong> is a measure of how similar two vectors are (see<a href="https://www.linkedin.com/posts/objectbox_vector-comparison-nearest-neighbor-search-activity-7160626136572411906-oprN?utm_source=share&utm_medium=member_desktop"> ep. 4 of ObjectBox Bites</a>). There are three ways to compare vectors: Jaccard Similarity, Cosine Similarity, and L2 Distance (also known as Euclidean distance). Jaccard Similarity calculates the ratio of elements that are common to both vectors divided by the total number of elements in both vectors. Cosine Similarity calculates the cosine of the angle between two vectors. The last method is the L2 distance. It calculates the straight-line distance between two points in space represented by the vectors. This is the most frequently used method in AI applications. It is important to note that the choice of vector comparison method does not affect the mechanics of similarity search.</p><figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://objectbox.io/wordpress/wp-content/uploads/2024/05/similarity_metrics_2-1024x576.png" alt="" class="wp-image-258177"/></figure><h2 class="wp-block-heading"><strong>What is a vector database and how is it related to vector search?</strong></h2><p>A <a href="https://objectbox.io/vector-database/"><strong>vector database</strong></a> is a specialized database designed to store, manage, and search vectors efficiently. This efficiency is crucial for handling large datasets and performing fast vector similarity searches. Also, with a vector database, the knowledge of AI models can be improved, adapted, and updated. Therefore, today, most AI apps use a vector database.</p><p>Imagine having an AI that knows your habits, your preferences, your health data, maybe even what’s in your fridge, and can use this knowledge to suggest recipes that fit your lifestyle and individual preferences. A standard AI model doesn’t have that data and wouldn’t learn that way, but with a vector database it can. Now, when you search for a “fruit cake recipe”, using this data, it can suggest a “simple fruit cake” without sugar if you usually prefer quick, easy, and healthy recipes, or a “fancy plum cake” if you enjoy more challenging baking projects and don’t like apples. Or, a vegan option, if you have neither milk nor eggs left in the fridge.</p><p>This technique is called <strong>Retrieval-Augmented Generation (RAG)</strong>. It enhances the capabilities of <strong>L</strong>LMs<strong> </strong>with additional data (e.g. personal data, company data, fresh data) stored in a vector database.</p><p>When you query a vector database, it uses the query’s vector representation to find the <strong>nearest neighbors</strong> in the database.</p><h2 class="wp-block-heading"><strong>Nearest Neighbor Search</strong></h2><p>How do we <a href="https://www.linkedin.com/posts/objectbox_vector-comparison-nearest-neighbor-search-activity-7160626136572411906-oprN?utm_source=share&utm_medium=member_desktop">find the <strong>nearest neighbor</strong></a> to our query vector? The most straightforward approach is a brute-force search. It calculates the distance between our query vector and all other vectors in the database, one by one. Any metrics discussed in “How to compare vectors” can be used. However, this brute-force approach has a time complexity of <em>O(N*d)</em>, where <em>N</em> is the number of vectors and <em>d</em> is the dimensionality. This becomes <strong>computationally expensive for large datasets</strong>.</p><p>Since exact nearest neighbor search can be slow for massive datasets, we often turn to <strong>approximate nearest neighbor (ANN)</strong> algorithms. These algorithms prioritize efficiency by finding neighbors that are very close (but not necessarily the absolute closest) to the query vector, significantly reducing search time. </p><p>Continuing with the cooking assistant app example, imagine you’re searching for a “fruit cake recipe”. Assume that in our database, the real closest recipe is “simple apple pie”. With a massive database, an exact nearest neighbor search might take a long time to find the perfect match. However, an ANN algorithm can quickly find a recipe that is very similar to what you’re looking for, such as a “simple fruit cake” or a “basic apple pie”, even if it might not be the exact closest match. This efficiency ensures you get relevant and useful recipe suggestions promptly, enhancing your overall experience without a noticeable compromise in quality.</p><h2 class="wp-block-heading"><strong>Approximate Nearest Neighbour Search</strong></h2><p>Now, let’s delve into the world of <strong>Approximate Nearest Neighbor (ANN)</strong> algorithms. The way you search for nearest neighbors depends on how the data is stored in the vector database. One of the earliest ANN algorithms, established in 1975, is called <a href="https://doi.org/10.1145/361002.361007">k-d trees</a>. These trees work by recursively splitting the data space using hyperplanes, making the search process more efficient (<a href="https://www.linkedin.com/posts/objectbox_the-power-of-vector-database-ann-algorithms-activity-7162794008782487552-dHAc?utm_source=share&utm_medium=member_desktop">see ep. 5 of ObjectBox Bites</a>). However, k-d trees, like many exact nearest neighbor algorithms, suffer from the <strong>dimensionality curse</strong>. This means that as the number of dimensions (features) in your data increases, the distance between points becomes less meaningful, making searching very slow in high-dimensional spaces like those used in vector databases. </p><p>For instance, consider simple fruit recipes. With a few features, such as cooking time and number of ingredients, finding similar recipes would be relatively straightforward. However, if we also include many other features like sweetness level, calorie count, fruit type, all specific ingredients, preparation complexity, and user ratings, the number of dimensions increases significantly. In such high-dimensional spaces, the traditional k-d tree method becomes inefficient because the distances between points (recipes) become less distinct and meaningful.</p><p>To overcome this challenge, ANN algorithms leverage two main approaches: <a href="https://openproceedings.org/2023/conf/edbt/paper-21.pdf">indexing methods and sketching methods</a>. Indexing methods work by creating a hierarchical data structure that allows for faster exploration of the search space. Imagine a well-organized library with categorized sections instead of just randomly placed books. Sketching methods, on the other hand, don’t search the entire dataset directly. Instead, they create compressed versions (sketches) of the data that are faster to compare with the query vector. This reduces the search time significantly. Often, these two approaches are combined for optimal performance.</p><p><br>A popular example of an ANN search implementation for high-dimensional data is the <a href="https://ieeexplore.ieee.org/document/8594636"><strong>Hierarchical Navigable Small World (HNSW)</strong></a> algorithm (e.g. implemented in Azure AI). HNSW relies on graph-based indexing to efficiently navigate the data space and find nearest neighbors. For more details watch <a href="https://www.linkedin.com/posts/objectbox_ai-search-with-hnsw-probability-skip-list-activity-7164966801263521792-JzhI?utm_source=share&utm_medium=member_desktop"><strong>episodes 6</strong></a><strong>, </strong><a href="https://www.linkedin.com/posts/objectbox_ai-search-with-hnsw-navigable-small-world-activity-7167503503916056576-8uhd?utm_source=share&utm_medium=member_desktop"><strong>7</strong></a><strong>,</strong> and <a href="https://www.linkedin.com/posts/objectbox_ai-search-with-hnsw-33-hierarchical-navigable-activity-7188160100849573889-sQE1?utm_source=share&utm_medium=member_desktop"><strong>8 of</strong> <strong>ObjectBox Bites</strong></a> miniseries, where we describe the fundamentals of HNSW.</p><h2 class="wp-block-heading"><strong>Take-away notes</strong></h2><p>To sum up, vector search offers a significant leap forward in how we search for information. By understanding the meaning and relationships behind data, it delivers more relevant and accurate results, even for unstructured data and complex queries. This technology has the potential to revolutionize various fields, from enhancing search engines to empowering AI applications. As vector search continues to evolve, we can expect even more exciting possibilities for navigating the ever-growing ocean of information and unlocking its full potential. This includes <a href="https://objectbox.io/on-device-vector-databases-and-edge-ai/"><strong>operating with data directly on the devices</strong></a> it was created on, reducing cloud costs, eliminating the reliance on an internet connection, and opening up using your private data without it ever being shared (100% private). If you’re interested in other AI and vector database-related topics, check out the <a href="https://www.youtube.com/playlist?list=PLEF1met_2-ngpTs5sDzQnnSZbu-VJHThc">ObjectBox mini-series</a>. Stay tuned for more articles in the future.</p> </article> <div class="pagination clearfix"> <div class="alignleft"><a href="https://objectbox.io/category/vector-database/page/2/" >« Older Entries</a></div> <div class="alignright"></div> </div> </div> </div> </div> </div> <script nitro-exclude> var heartbeatData = new FormData(); heartbeatData.append('nitroHeartbeat', '1'); fetch(location.href, {method: 'POST', body: heartbeatData, credentials: 'omit'}); </script> <script nitro-exclude> document.cookie = 'nitroCachedPage=' + (!window.NITROPACK_STATE ? '0' : '1') + '; path=/; SameSite=Lax'; </script> <span class="et_pb_scroll_top et-pb-icon"></span> <footer id="main-footer"> <div id="footer-bottom"> <div class="container clearfix"> <div id="footer-info">Ⓒ Copyright 2024 ObjectBox Limited. All rights reserved. | <a href="https://objectbox.io/wordpress/wp-content/uploads/2024/10/2024_10_23_Object-Box-Privacy-Notice.docx.pdf" target="_blank" rel="nofollow">Privacy notice</a> | <a href="https://objectbox.io/wordpress/wp-content/uploads/2024/10/ObjectBox-Terms-Of-UseAC2024.pdf" target="_blank" rel="nofollow">Terms of use & Imprint</a></div> </div> </div> </footer> </div> </div> </div> <script type='text/javascript'>( $ => { /** * Displays toast message from storage, it is used when the user is redirected after login */ if ( window.sessionStorage ) { $( window ).on( 'tcb_after_dom_ready', () => { const message = sessionStorage.getItem( 'tcb_toast_message' ); if ( message ) { tcbToast( sessionStorage.getItem( 'tcb_toast_message' ), false ); sessionStorage.removeItem( 'tcb_toast_message' ); } } ); } /** * Displays toast message * * @param {string} message - message to display * @param {Boolean} error - whether the message is an error or not * @param {Function} callback - callback function to be called after the message is closed */ function tcbToast( message, error, callback ) { /* Also allow "message" objects */ if ( typeof message !== 'string' ) { message = message.message || message.error || message.success; } if ( ! error ) { error = false; } TCB_Front.notificationElement.toggle( message, error ? 'error' : 'success', callback ); } } )( typeof ThriveGlobal === 'undefined' ? jQuery : ThriveGlobal.$j ); </script><style type="text/css" id="tve_notification_styles"></style> <div class="tvd-toast tve-fe-message" style="display: none"> <div class="tve-toast-message tve-success-message"> <div class="tve-toast-icon-container"> <span class="tve_tick thrv-svg-icon"></span> </div> <div class="tve-toast-message-container"></div> </div> </div> <script type='text/javascript'> (function () { var c = document.body.className; c = c.replace(/woocommerce-no-js/, 'woocommerce-js'); document.body.className = c; })(); </script> <!-- Start of HubSpot Embed Code --> <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/3772993.js"></script> <!-- End of HubSpot Embed Code --><link rel='stylesheet' id='wc-blocks-style-css' href='https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.css?ver=wc-9.3.3' type='text/css' media='all' /> <link rel='stylesheet' id='urvanov_syntax_highlighter-css' href='https://objectbox.io/wordpress/wp-content/plugins/urvanov-syntax-highlighter/css/min/urvanov_syntax_highlighter.min.css?ver=2.8.34' type='text/css' media='all' /> <style id='core-block-supports-inline-css' type='text/css'> .wp-container-core-group-is-layout-1.wp-container-core-group-is-layout-1{flex-wrap:nowrap;} </style> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/divi-modules-table-maker/extensions/scripts/public-module-script-min.js?ver=3.1.2" id="dvmd-tm-public-module-script-js"></script> <script type="text/javascript" id="leadin-script-loader-js-js-extra"> /* <![CDATA[ */ var leadin_wordpress = {"userRole":"visitor","pageType":"archive","leadinPluginVersion":"11.1.66"}; /* ]]> */ </script> <script type="text/javascript" src="https://js.hs-scripts.com/3772993.js?integration=WordPress&ver=11.1.66" id="leadin-script-loader-js-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/addons-for-divi/assets/libs/magnific-popup/magnific-popup.js?ver=4.0.5" id="divi-torque-lite-magnific-popup-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/addons-for-divi/assets/libs/slick/slick.min.js?ver=4.0.5" id="divi-torque-lite-slick-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/addons-for-divi/assets/libs/counter-up/counter-up.min.js?ver=4.0.5" id="divi-torque-lite-counter-up-js"></script> <script type="text/javascript" id="divi-torque-lite-frontend-js-extra"> /* <![CDATA[ */ var diviTorqueLiteFrontend = {"ajaxurl":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/addons-for-divi/assets/js/frontend.js?ver=4.0.5" id="divi-torque-lite-frontend-js"></script> <script type="text/javascript" id="divi-custom-script-js-extra"> /* <![CDATA[ */ var DIVI = {"item_count":"%d Item","items_count":"%d Items"}; var et_builder_utils_params = {"condition":{"diviTheme":true,"extraTheme":false},"scrollLocations":["app","top"],"builderScrollLocations":{"desktop":"app","tablet":"app","phone":"app"},"onloadScrollLocation":"app","builderType":"fe"}; var et_frontend_scripts = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"}; var et_pb_custom = {"ajaxurl":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php","images_uri":"https:\/\/objectbox.io\/wordpress\/wp-content\/themes\/Divi\/images","builder_images_uri":"https:\/\/objectbox.io\/wordpress\/wp-content\/themes\/Divi\/includes\/builder\/images","et_frontend_nonce":"5de0a110a2","subscription_failed":"Please, check the fields below to make sure you entered the correct information.","et_ab_log_nonce":"4645a079c6","fill_message":"Please, fill in the following fields:","contact_error_message":"Please, fix the following errors:","invalid":"Invalid email","captcha":"Captcha","prev":"Prev","previous":"Previous","next":"Next","wrong_captcha":"You entered the wrong number in captcha.","wrong_checkbox":"Checkbox","ignore_waypoints":"no","is_divi_theme_used":"1","widget_search_selector":".widget_search","ab_tests":[],"is_ab_testing_active":"","page_id":"260654","unique_test_id":"","ab_bounce_rate":"5","is_cache_plugin_active":"no","is_shortcode_tracking":"","tinymce_uri":"https:\/\/objectbox.io\/wordpress\/wp-content\/themes\/Divi\/includes\/builder\/frontend-builder\/assets\/vendors","accent_color":"#17a6a6","waypoints_options":[]}; var et_pb_box_shadow_elements = []; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/js/scripts.min.js?ver=4.22.0" id="divi-custom-script-js"></script> <script type="text/javascript" id="tve-dash-frontend-js-extra"> /* <![CDATA[ */ var tve_dash_front = {"ajaxurl":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php","force_ajax_send":"1","is_crawler":"","recaptcha":[],"turnstile":[],"post_id":"260654"}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/thrive-leads/thrive-dashboard/js/dist/frontend.min.js?ver=10.3" id="tve-dash-frontend-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/jquery.fitvids.js?ver=4.22.0" id="fitvids-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-includes/js/comment-reply.min.js?ver=6.5.5" id="comment-reply-js" async="async" data-wp-strategy="async"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/jquery.mobile.js?ver=4.22.0" id="jquery-mobile-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/magnific-popup.js?ver=4.22.0" id="magnific-popup-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/easypiechart.js?ver=4.22.0" id="easypiechart-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/salvattore.js?ver=4.22.0" id="salvattore-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/divi-modules-table-maker/extensions/divi-4/scripts/frontend-bundle.min.js?ver=3.1.2" id="divi-modules-table-maker-frontend-bundle-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=9.3.3" id="sourcebuster-js-js"></script> <script type="text/javascript" id="wc-order-attribution-js-extra"> /* <![CDATA[ */ var wc_order_attribution = {"params":{"lifetime":1.0000000000000000818030539140313095458623138256371021270751953125e-5,"session":30,"base64":false,"ajaxurl":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=9.3.3" id="wc-order-attribution-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/core/admin/js/common.js?ver=4.22.0" id="et-core-common-js"></script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/divi-module-code-snippet/features/DBCSCopyToClipboardFeature/script.js?ver=1.4.4" id="dbcs-copy-to-clipboard-js"></script> <script type="text/javascript" id="urvanov_syntax_highlighter_js-js-extra"> /* <![CDATA[ */ var UrvanovSyntaxHighlighterSyntaxSettings = {"version":"2.8.34","is_admin":"0","ajaxurl":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php","prefix":"urvanov-syntax-highlighter-","setting":"urvanov-syntax-highlighter-setting","selected":"urvanov-syntax-highlighter-setting-selected","changed":"urvanov-syntax-highlighter-setting-changed","special":"urvanov-syntax-highlighter-setting-special","orig_value":"data-orig-value","debug":""}; var UrvanovSyntaxHighlighterSyntaxStrings = {"copy":"Copied to the clipboard","minimize":"Click To Expand Code"}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/plugins/urvanov-syntax-highlighter/js/min/urvanov_syntax_highlighter.min.js?ver=2.8.34" id="urvanov_syntax_highlighter_js-js"></script> <script type="text/javascript" id="et-builder-modules-script-motion-js-extra"> /* <![CDATA[ */ var et_pb_motion_elements = {"desktop":[],"tablet":[],"phone":[]}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/motion-effects.js?ver=4.22.0" id="et-builder-modules-script-motion-js"></script> <script type="text/javascript" id="et-builder-modules-script-sticky-js-extra"> /* <![CDATA[ */ var et_pb_sticky_elements = {"et_pb_section_0_tb_header":{"id":"et_pb_section_0_tb_header","selector":".et_pb_section_0_tb_header","position":{"desktop":"top","tablet":"none","phone":"none"},"topOffset":"0px","bottomOffset":"0px","topLimit":"none","bottomLimit":"none","offsetSurrounding":"on","transition":"on","styles":{"module_alignment":{"desktop":"","tablet":"","phone":""},"positioning":"relative"},"stickyStyles":{"position_origin_r":"top_left","horizontal_offset":"","vertical_offset":""}}}; /* ]]> */ </script> <script type="text/javascript" src="https://objectbox.io/wordpress/wp-content/themes/Divi/includes/builder/feature/dynamic-assets/assets/js/sticky-elements.js?ver=4.22.0" id="et-builder-modules-script-sticky-js"></script> <script type="text/javascript">var tcb_current_post_lists=JSON.parse('[]'); var tcb_post_lists=tcb_post_lists?[...tcb_post_lists,...tcb_current_post_lists]:tcb_current_post_lists;</script><script type="text/javascript">/*<![CDATA[*/if ( !window.TL_Const ) {var TL_Const={"security":"f4512e0ff7","ajax_url":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php","forms":[],"action_conversion":"tve_leads_ajax_conversion","action_impression":"tve_leads_ajax_impression","ajax_load":0,"custom_post_data":[],"current_screen":{"screen_type":6,"screen_id":0},"ignored_fields":["email","_captcha_size","_captcha_theme","_captcha_type","_submit_option","_use_captcha","g-recaptcha-response","__tcb_lg_fc","__tcb_lg_msg","_state","_form_type","_error_message_option","_back_url","_submit_option","url","_asset_group","_asset_option","mailchimp_optin","tcb_token","tve_labels","tve_mapping","_api_custom_fields","_sendParams","_autofill"]};} else { window.TL_Front && TL_Front.extendConst && TL_Front.extendConst({"security":"f4512e0ff7","ajax_url":"https:\/\/objectbox.io\/wordpress\/wp-admin\/admin-ajax.php","forms":[],"action_conversion":"tve_leads_ajax_conversion","action_impression":"tve_leads_ajax_impression","ajax_load":0,"custom_post_data":[],"current_screen":{"screen_type":6,"screen_id":0},"ignored_fields":["email","_captcha_size","_captcha_theme","_captcha_type","_submit_option","_use_captcha","g-recaptcha-response","__tcb_lg_fc","__tcb_lg_msg","_state","_form_type","_error_message_option","_back_url","_submit_option","url","_asset_group","_asset_option","mailchimp_optin","tcb_token","tve_labels","tve_mapping","_api_custom_fields","_sendParams","_autofill"]})} /*]]> */</script><style id="et-builder-module-design-260654-cached-inline-styles">.et_pb_section_0.et_pb_section{padding-top:18px}.et_pb_row_0.et_pb_row{padding-top:23px!important;padding-bottom:2px!important;padding-top:23px;padding-bottom:2px}.et_pb_row_0:before,.et_pb_row_1:before,.et_pb_row_2:before,.et_pb_row_3:before,.et_pb_row_4:before,.et_pb_row_5:before,.et_pb_row_6:before,.et_pb_row_7:before{@media only screen and (min-width:981px){.et_pb_column_0{width:15%!important}.et_pb_column_1{width:15%!important}.et_pb_column_2{width:40%!important}.et_pb_column_3{width:15%!important}.et_pb_column_4{width:15%!important}}}.et_pb_text_0{padding-bottom:0px!important}.et_pb_image_0{padding-right:2px;text-align:left;margin-left:0}.et_pb_text_1,.et_pb_text_2,.et_pb_text_3,.et_pb_text_4,.et_pb_text_5{padding-left:0px!important;margin-left:-18%!important}.et_pb_image_1,.et_pb_image_2,.et_pb_image_3,.et_pb_image_4{text-align:left;margin-left:0}.ba_logo_grid_child_0 .dtq-logo-grid__item,.ba_logo_grid_child_1 .dtq-logo-grid__item,.ba_logo_grid_child_2 .dtq-logo-grid__item,.ba_logo_grid_child_3 .dtq-logo-grid__item,.ba_logo_grid_child_4 .dtq-logo-grid__item,.ba_logo_grid_child_5 .dtq-logo-grid__item,.ba_logo_grid_child_6 .dtq-logo-grid__item,.ba_logo_grid_child_7 .dtq-logo-grid__item,.ba_logo_grid_child_8 .dtq-logo-grid__item{background-color:#e2e5ed!important;padding-top:50px!important;padding-right:50px!important;padding-bottom:50px!important;padding-left:50px!important}@media only screen and (min-width:981px){.et_pb_image_0,.et_pb_image_1,.et_pb_image_2,.et_pb_image_3,.et_pb_image_4{width:50%}}@media only screen and (max-width:980px){.et_pb_image_0{width:50%}.et_pb_image_0 .et_pb_image_wrap img,.et_pb_image_1 .et_pb_image_wrap img,.et_pb_image_2 .et_pb_image_wrap img,.et_pb_image_3 .et_pb_image_wrap img,.et_pb_image_4 .et_pb_image_wrap img{width:auto}.et_pb_text_1,.et_pb_text_2,.et_pb_text_3,.et_pb_text_4,.et_pb_text_5{margin-left:-70%!important}.et_pb_image_1{width:40%}.et_pb_image_2{width:41%}.et_pb_image_3{width:37%}.et_pb_image_4{width:40.6%}}@media only screen and (max-width:767px){.et_pb_image_0,.et_pb_image_1,.et_pb_image_2,.et_pb_image_3,.et_pb_image_4{display:none!important}.et_pb_image_0 .et_pb_image_wrap img,.et_pb_image_1 .et_pb_image_wrap img,.et_pb_image_2 .et_pb_image_wrap img,.et_pb_image_3 .et_pb_image_wrap img,.et_pb_image_4 .et_pb_image_wrap img{width:auto}.et_pb_text_1,.et_pb_text_2,.et_pb_text_3{margin-left:0%!important}.et_pb_text_4{margin-left:-70%!important}}</style><style id="et-builder-module-design-256727-cached-inline-styles">.et_pb_section_0_tb_header{border-bottom-width:1px;margin-bottom:-11px;z-index:10;box-shadow:0px 2px 18px 0px rgba(0,0,0,0.1)}.et_pb_section_0_tb_header.et_pb_section{padding-top:0px;padding-bottom:0px;background-color:#1B1815!important}.et_pb_sticky.et_pb_section_0_tb_header{box-shadow:0px 2px 18px 0px rgba(0,0,0,0.1);box-shadow:0px 5px 80px rgba(0,0,0,0.1)!important}.et_pb_row_0_tb_header:before{@media only screen and (min-width:981px){.et_pb_column_0{width:15%!important}.et_pb_column_1{width:15%!important}.et_pb_column_2{width:40%!important}.et_pb_column_3{width:15%!important}.et_pb_column_4{width:15%!important}}}.et_pb_row_0_tb_header{display:flex;align-items:center;flex-wrap:wrap}.et_pb_code_0_tb_header,.et_pb_code_1_tb_header{padding-top:0px;padding-bottom:0px;margin-top:0px!important;margin-bottom:0px!important}.et_pb_menu_0_tb_header.et_pb_menu ul li a{font-weight:500;font-size:15px;color:#ffffff!important}.et_pb_menu_0_tb_header.et_pb_menu{background-color:rgba(0,0,0,0)}.et_pb_menu_0_tb_header .et_pb_menu__logo-wrap .et_pb_menu__logo img{border-top-color:#1B1815;width:auto}.et_pb_menu_0_tb_header{padding-top:10px;padding-right:0px;margin-right:840px!important;margin-bottom:0px!important}.et_pb_menu_0_tb_header.et_pb_menu .et-menu-nav li ul.sub-menu{border-width:2px;border-radius:5px;left:auto!important;padding:0;right:0;width:200px}.et_pb_menu_0_tb_header.et_pb_menu .et-menu-nav li ul.sub-menu a{padding:12px 20px}.et_pb_menu_0_tb_header.et_pb_menu .et_pb_menu__logo{margin-bottom:10px}.et_pb_menu_0_tb_header.et_pb_menu ul li.current-menu-item a{color:#ffffff!important}.et_pb_menu_0_tb_header.et_pb_menu .nav li ul{background-color:#393939!important;border-color:#ffffff}.et_pb_menu_0_tb_header.et_pb_menu .et_mobile_menu{border-color:#ffffff}.et_pb_menu_0_tb_header.et_pb_menu .nav li ul.sub-menu a,.et_pb_menu_0_tb_header.et_pb_menu .et_mobile_menu a{color:#F7F7F7!important}.et_pb_menu_0_tb_header.et_pb_menu .nav li ul.sub-menu li.current-menu-item a{color:#17A6A6!important}.et_pb_menu_0_tb_header.et_pb_menu .et_mobile_menu,.et_pb_menu_0_tb_header.et_pb_menu .et_mobile_menu ul{background-color:#383838!important}.et_pb_menu_0_tb_header .et_pb_menu_inner_container>.et_pb_menu__logo-wrap,.et_pb_menu_0_tb_header .et_pb_menu__logo-slot{width:auto;max-width:100%}.et_pb_menu_0_tb_header .et_pb_menu_inner_container>.et_pb_menu__logo-wrap .et_pb_menu__logo img,.et_pb_menu_0_tb_header .et_pb_menu__logo-slot .et_pb_menu__logo-wrap img{height:35px;max-height:none}.et_pb_menu_0_tb_header .mobile_nav .mobile_menu_bar:before{color:#ffffff}.et_pb_menu_0_tb_header .et_pb_menu__icon.et_pb_menu__search-button,.et_pb_menu_0_tb_header .et_pb_menu__icon.et_pb_menu__close-search-button,.et_pb_menu_0_tb_header .et_pb_menu__icon.et_pb_menu__cart-button{color:#17a6a6}.et_pb_button_0_tb_header_wrapper .et_pb_button_0_tb_header,.et_pb_button_0_tb_header_wrapper .et_pb_button_0_tb_header:hover{padding-top:9px!important;padding-right:10px!important;padding-bottom:9px!important;padding-left:29px!important}.et_pb_button_0_tb_header_wrapper{margin-top:4px!important;margin-right:7px!important;margin-bottom:0px!important}body #page-container .et_pb_section .et_pb_button_0_tb_header{color:#BCBCBC!important;border-width:0px!important;border-color:RGBA(255,255,255,0);border-radius:8px;letter-spacing:0px;font-size:14px;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_0_tb_header:hover{color:#ffffff!important;border-color:#17A6A6!important;border-width:1px!important;background-image:initial;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_0_tb_header:after{display:none}body #page-container .et_pb_section .et_pb_button_0_tb_header:before{content:attr(data-icon);font-family:FontAwesome!important;font-weight:400!important;color:#F7F7F7;line-height:inherit;font-size:inherit!important;opacity:1;margin-left:-1.3em;right:auto;display:inline-block;font-family:FontAwesome!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0_tb_header:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}.et_pb_button_0_tb_header,.et_pb_button_1_tb_header{transition:color 300ms ease 0ms,background-color 300ms ease 0ms,border 300ms ease 0ms}.et_pb_button_0_tb_header,.et_pb_button_0_tb_header:after,.et_pb_button_1_tb_header,.et_pb_button_1_tb_header:after{transition:all 300ms ease 0ms}.et_pb_button_1_tb_header_wrapper .et_pb_button_1_tb_header,.et_pb_button_1_tb_header_wrapper .et_pb_button_1_tb_header:hover{padding-top:7px!important;padding-right:21px!important;padding-bottom:7px!important;padding-left:21px!important}.et_pb_button_1_tb_header_wrapper{margin-top:5px!important;margin-bottom:0px!important}body #page-container .et_pb_section .et_pb_button_1_tb_header{color:#F7F7F7!important;border-width:1px!important;border-color:#17A6A6;border-radius:8px;letter-spacing:0px;font-size:15px;background-image:linear-gradient(195deg,#17a6a6 24%,#006e70 100%);background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_1_tb_header:hover{color:#ffffff!important;border-color:#23ffec!important;background-image:linear-gradient(195deg,#1cdddd 0%,#129694 100%);background-color:#ffffff}body #page-container .et_pb_section .et_pb_button_1_tb_header:before,body #page-container .et_pb_section .et_pb_button_1_tb_header:after{display:none!important}.et_pb_row_0_tb_header.et_pb_row{padding-top:0px!important;padding-bottom:0px!important;margin-left:auto!important;margin-right:auto!important;padding-top:0px;padding-bottom:0px}.et_pb_menu_0_tb_header.et_pb_module{margin-left:auto!important;margin-right:auto!important}@media only screen and (min-width:981px){.et_pb_row_0_tb_header,body #page-container .et-db #et-boc .et-l .et_pb_row_0_tb_header.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_0_tb_header.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_0_tb_header.et_pb_row{width:95%}.et_pb_column_1_tb_header{display:flex;justify-content:flex-end}}@media only screen and (max-width:980px){.et_pb_section_0_tb_header{border-bottom-width:1px}.et_pb_row_0_tb_header,body #page-container .et-db #et-boc .et-l .et_pb_row_0_tb_header.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_0_tb_header.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_0_tb_header.et_pb_row,.et_pb_button_0_tb_header,.et_pb_button_1_tb_header{width:100%}.et_pb_column_0_tb_header{order:2;margin-bottom:0}.et_pb_menu_0_tb_header .et_pb_menu__logo-wrap .et_pb_menu__logo img{border-top-color:#1B1815}.et_pb_menu_0_tb_header{padding-top:10px;padding-right:0px;padding-bottom:0px;width:80%}.et_pb_column_1_tb_header{order:1}.et_pb_button_0_tb_header_wrapper{margin-right:0px!important}body #page-container .et_pb_section .et_pb_button_0_tb_header,body #page-container .et_pb_section .et_pb_button_1_tb_header{border-radius:0px}body #page-container .et_pb_section .et_pb_button_0_tb_header:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:FontAwesome!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0_tb_header:after{display:none}body #page-container .et_pb_section .et_pb_button_0_tb_header:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}}@media only screen and (min-width:768px) and (max-width:980px){.et_pb_button_0_tb_header,.et_pb_button_1_tb_header{display:none!important}}@media only screen and (max-width:767px){.et_pb_section_0_tb_header{border-bottom-width:1px}.et_pb_column_0_tb_header{order:2;margin-bottom:0}.et_pb_menu_0_tb_header .et_pb_menu__logo-wrap .et_pb_menu__logo img{border-top-color:#1B1815}.et_pb_menu_0_tb_header{width:90%}.et_pb_column_1_tb_header{order:1}body #page-container .et_pb_section .et_pb_button_0_tb_header:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:FontAwesome!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0_tb_header:after{display:none}body #page-container .et_pb_section .et_pb_button_0_tb_header:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}.et_pb_button_0_tb_header,.et_pb_button_1_tb_header{width:100%;display:none!important}}</style> <!-- Cookie Notice plugin v2.4.18 by Hu-manity.co https://hu-manity.co/ --> <div id="cookie-notice" role="dialog" class="cookie-notice-hidden cookie-revoke-hidden cn-position-top" aria-label="Cookie Notice" style="background-color: rgba(50,50,58,1);"><div class="cookie-notice-container" style="color: #fff"><span id="cn-notice-text" class="cn-text-container">We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.</span><span id="cn-notice-buttons" class="cn-buttons-container"><a href="#" id="cn-accept-cookie" data-cookie-set="accept" class="cn-set-cookie cn-button cn-button-custom button" aria-label="Ok">Ok</a></span><span id="cn-close-notice" data-cookie-set="accept" class="cn-close-icon" title="No"></span></div> </div> <!-- / Cookie Notice plugin --> <span class="et_pb_scroll_top et-pb-icon"></span> </body> </html>