{"id":7252,"date":"2019-07-24T02:10:36","date_gmt":"2019-07-24T09:10:36","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7252"},"modified":"2025-06-13T20:08:58","modified_gmt":"2025-06-14T03:08:58","slug":"synchronized-drawing-apps-with-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/","title":{"rendered":"Synchronized Drawing Apps with Couchbase Mobile"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/products\/mobile\/\">Couchbase Mobile<\/a> contains a robust and powerful <a href=\"https:\/\/www.couchbase.com\/products\/lite\/\">embedded NoSQL database<\/a>, called <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.5\/introduction.html\">Couchbase Lite<\/a>, that can be used within your iOS, Android, and <a href=\"https:\/\/visualstudio.microsoft.com\/xamarin\/\">Xamarin<\/a> apps. The Couchbase Mobile stack also contains <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.5\/introduction.html\">Sync Gateway<\/a>. Sync Gateway enables secure data synchronization across Couchbase Lite enabled clients. Sync Gateway has existed for years, but last year Couchbase Mobile 2.0 officially introduced a <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.0\/index.html\">brand new web-sockets based replication<\/a> protocol for data synchronization that is more efficient than its HTTP based predecessor.<\/p>\n<p>While considering all of the changes to Couchbase Mobile, and the recent release of <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.5\/index.html\">version 2.5<\/a>, I started thinking about unique ways I could visualize the improvements using an app. I started by nailing down a couple of simple requirements. I wanted the app to:<\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Be simple<\/li>\n<li>Be fun<\/li>\n<li>Display the power of Couchbase Mobile<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Ultimately, I decided to look into what it would take to create an app that involves something we&#8217;ve all likely done as kids, for fun, or when we&#8217;re just plain bored. Drawing! And what&#8217;s more fun than drawing? That&#8217;s right, collaborative drawing!<\/p>\n<p><img decoding=\"async\" style=\"margin-left: auto;margin-right: auto\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/snake.gif\" alt=\"snake\" \/><\/p>\n<h2>Getting started<\/h2>\n<p>I hadn&#8217;t created an app that supported real-time drawing before, but I was familiar with a few approaches that might get the job done.\u00a0 The front-runner for me was a library that has had some buzz around it for a few years; <a href=\"https:\/\/skia.org\/\">Skia<\/a>.<\/p>\n<div>\n<p>Skia is an open source 2D <a href=\"https:\/\/en.wikipedia.org\/wiki\/Graphics_library\">graphics library<\/a> which provides common APIs that work across a variety of hardware and software platforms. It serves as the graphics engine for Google Chrome and Chrome OS, Android, Mozilla Firefox and Firefox OS, and many other products including mobile. Skia is mostly maintained by Google, but is completely free for anyone to use.<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-7260\" style=\"float: right;margin: 20px\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/skia_logo-300x166.png\" alt=\"\" width=\"300\" height=\"166\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/skia_logo-300x166.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/skia_logo-1024x565.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/skia_logo-768x424.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/skia_logo-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/skia_logo.png 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<\/div>\n<p>I liked the idea of using Skia to support my touch effect driven drawings, but I wanted to create a cross-platform app. Having more than a few years of Xamarin experience under my belt I was already familiar with <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/user-interface\/graphics\/skiasharp\/\">SkiaSharp<\/a>, a .NET-based, cross-platform implementation of Skia.<\/p>\n<p>So, I created a <a href=\"https:\/\/docs.microsoft.com\/en-us\/xamarin\/xamarin-forms\/\">Xamarin.Forms<\/a> solution, and included the SkiaSharp <a href=\"https:\/\/www.nuget.org\/\">nuget<\/a> package. I was impressed, as after only a few lines of code I had a Skia Canvas (SkCanvasView) in my UI,<\/p>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-xml\" data-lang=\"xml\"><\/code><\/pre>\n<\/div>\n<\/div>\n<p>and was able to start listening to touch events in my page&#8217;s code behind.<\/p>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-c#\" data-lang=\"c#\">void OnTouchEffectAction(object sender, TouchActionEventArgs args)\r\n{\r\n    var point = new Models.Point\r\n    {\r\n        X = args.Location.X,\r\n        Y = args.Location.Y\r\n    };\r\n\r\n    switch (args.Type)\r\n    {\r\n        case TouchActionType.Pressed:\r\n            ...\r\n            break;\r\n        case TouchActionType.Moved:\r\n            ...\r\n            break;\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<p>From those events I was able to gather the foundation for 2D vector renderings on a canvas. After all, two dimensional drawings boil down to a core component; a point. A collection of points creates a path, and a collection of paths creates&#8230; a drawing.<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Huzzah\">Huzzah<\/a>! Now that I was able to capture the points, create paths from those points, and ultimately drawings from those paths, I had the data I needed to share between canvases on separate app instances.<\/p>\n<h2>The Power of Couchbase Mobile<\/h2>\n<p>As mentioned before, the Couchbase Mobile stack contains both an embedded NoSQL database called Couchbase Lite, and a data synchronization mechanism called Sync Gateway. Combined with the power of Couchbase Server, a distributed JSON based NoSQL database, data can be pushed and pulled to and from the edge.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2755 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/01\/CBMDiagram-300x177.png\" alt=\"Couchbase Mobile\" width=\"346\" height=\"204\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/CBMDiagram-300x177.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/CBMDiagram-20x12.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/01\/CBMDiagram.png 412w\" sizes=\"auto, (max-width: 346px) 100vw, 346px\" \/><\/p>\n<p>Sync Gateway support is fully integrated into Couchbase.Lite and Couchbase.Lite.Enterprise Nuget packages, and you can find more information on how to do so <a href=\"https:\/\/docs.couchbase.com\/userprofile-couchbase-mobile\/sync\/userprofile\/xamarin\/userprofile_sync.html\">here<\/a>.<\/p>\n<p>The key to storing data in a document based database centers around how the <a href=\"https:\/\/docs.couchbase.com\/server\/4.5\/data-modeling\/intro-data-modeling.html\">data is modeled<\/a>. Luckily, in this app, data modeling was easy. It all came full circle because all I needed to store, via JSON, was a collection of points within collections of paths.<\/p>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-c#\" data-lang=\"c#\">{\r\n    \"color\": \"#000000\",\r\n    \"createdBy\": \"cca6ebe8-a713-49ac-bb86-cff0fb095ab2\",\r\n    \"id\": \"059fee8c-fbb3-450e-a1f1-61d82a28e68b\",\r\n    \"points\": [\r\n        {\r\n            \"type\": \"point\",\r\n            \"x\": 101.333,\r\n            \"y\": 339.667\r\n        },\r\n        {\r\n            \"type\": \"point\",\r\n            \"x\": 101.333,\r\n            \"y\": 340.3333282470703\r\n        }\r\n    ],\r\n    \"type\": \"path\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<p>Next, I simply saved the point and path information into the embedded Couchbase Lite database. From there Sync Gateway handles the rest, and, voil\u00e0, a shared canvas made simple with Couchbase Mobile!<\/p>\n<p><img decoding=\"async\" style=\"margin-left: auto;margin-right: auto\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/07\/N1QL_Rick.gif\" alt=\"N1QL-Rick\" \/><\/p>\n<h2>Introducing CouchDraw<\/h2>\n<p>Obviously, I&#8217;ve glossed over some of the nitty-gritty details of app I&#8217;ve been babbling on about, but fear not, I have created a <a href=\"https:\/\/github.com\/couchbaselabs\/CouchDraw\">new repository<\/a> for it! In the new &#8220;<a href=\"https:\/\/github.com\/couchbaselabs\/CouchDraw\">CouchDraw<\/a>&#8221; repo, along with the source code, I&#8217;ve also included a <a href=\"https:\/\/github.com\/couchbaselabs\/CouchDraw\/blob\/master\/README.md\">README<\/a> with <strong>many<\/strong> <strong>more<\/strong> details on how to download, configure, and run the solution. Feel free to drop everything you&#8217;re doing right now and go check it out!<\/p>\n<p><a href=\"https:\/\/github.com\/couchbaselabs\/CouchDraw\">CouchDraw<\/a> is a very basic app, and, as such, there are many ways it can be improved (This is where you come in). I challenge the mobile and Couchbase community to dive in and expand on <a href=\"https:\/\/github.com\/couchbaselabs\/CouchDraw\">CouchDraw&#8217;s<\/a> functionality!<\/p>\n<p>Some new feature ideas may include:<\/p>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Replacing the color buttons with a range slider for color selection.<\/li>\n<li>Adding the ability to change the line thickness.<\/li>\n<li>Adding the ability to erase lines that have been drawn.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Next Steps<\/h2>\n<p>Along with extending synchronized drawing support to native iOS and Android, I&#8217;ll also be integrating Couchbase Mobile&#8217;s <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.5\/csharp.html#peer-to-peer-sync\">peer-to-peer replication<\/a> and <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.5\/csharp.html#predictive-query\">predictive querying<\/a> features into <a href=\"https:\/\/github.com\/couchbaselabs\/CouchDraw\">CouchDraw<\/a>. Stay tuned for more posts in this series!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Couchbase Mobile contains a robust and powerful embedded NoSQL database, called Couchbase Lite, that can be used within your iOS, Android, and Xamarin apps. The Couchbase Mobile stack also contains Sync Gateway. Sync Gateway enables secure data synchronization across Couchbase [&hellip;]<\/p>\n","protected":false},"author":34959,"featured_media":7261,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,2381,7667,1810,1816,1819,2366,2351],"tags":[2213,2350,2363],"ppma_author":[9080],"class_list":["post-7252","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-community","category-couchbase-lite","category-couchbase-mobile","category-couchbase-server","category-data-modeling","category-sync-gateway","category-xamarin","tag-couchbase-lite-2-0","tag-cross-platform-mobile","tag-xamarin-forms"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Synchronized Drawing Apps with Couchbase Mobile - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Synchronized drawing apps made easy with the power of Couchbase Lite, Couchbase Sync Gateway, Couchbase Server, and Xamarin.Forms.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Synchronized Drawing Apps with Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"Synchronized drawing apps made easy with the power of Couchbase Lite, Couchbase Sync Gateway, Couchbase Server, and Xamarin.Forms.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-24T09:10:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:08:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"589\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Rob Hedgpeth, Senior Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@probablyrealrob\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rob Hedgpeth, Senior Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/\"},\"author\":{\"name\":\"Rob Hedgpeth, Senior Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/4fe39f690069382f7641d3a02f551e47\"},\"headline\":\"Synchronized Drawing Apps with Couchbase Mobile\",\"datePublished\":\"2019-07-24T09:10:36+00:00\",\"dateModified\":\"2025-06-14T03:08:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/\"},\"wordCount\":807,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif\",\"keywords\":[\"Couchbase Lite 2.0\",\"cross-platform mobile\",\"xamarin.forms\"],\"articleSection\":[\".NET\",\"Community\",\"Couchbase Lite\",\"Couchbase Mobile\",\"Couchbase Server\",\"Data Modeling\",\"Sync Gateway\",\"Xamarin\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/\",\"name\":\"Synchronized Drawing Apps with Couchbase Mobile - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif\",\"datePublished\":\"2019-07-24T09:10:36+00:00\",\"dateModified\":\"2025-06-14T03:08:58+00:00\",\"description\":\"Synchronized drawing apps made easy with the power of Couchbase Lite, Couchbase Sync Gateway, Couchbase Server, and Xamarin.Forms.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif\",\"width\":600,\"height\":589},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Synchronized Drawing Apps with Couchbase Mobile\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/4fe39f690069382f7641d3a02f551e47\",\"name\":\"Rob Hedgpeth, Senior Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d2687b799f515d10560e40ed5b695b63\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8059b152c76ec2d3d1a3a05ad6dfd02e2c74a4ae158b724c3420b254c5fd7499?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8059b152c76ec2d3d1a3a05ad6dfd02e2c74a4ae158b724c3420b254c5fd7499?s=96&d=mm&r=g\",\"caption\":\"Rob Hedgpeth, Senior Developer Advocate, Couchbase\"},\"description\":\"Rob Hedgpeth is a Senior Developer Advocate at Couchbase specializing in mobile and IoT technologies. Rob has been developing applications of all flavors for over a decade, but has primarily been focused on the mobile space since 2010. Prior to working at Couchbase Rob worked as a Mobile Architect at Xamarin and Microsoft.\",\"sameAs\":[\"https:\/\/x.com\/probablyrealrob\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/robert-hedgpeth\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Synchronized Drawing Apps with Couchbase Mobile - The Couchbase Blog","description":"Synchronized drawing apps made easy with the power of Couchbase Lite, Couchbase Sync Gateway, Couchbase Server, and Xamarin.Forms.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/","og_locale":"en_US","og_type":"article","og_title":"Synchronized Drawing Apps with Couchbase Mobile","og_description":"Synchronized drawing apps made easy with the power of Couchbase Lite, Couchbase Sync Gateway, Couchbase Server, and Xamarin.Forms.","og_url":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-07-24T09:10:36+00:00","article_modified_time":"2025-06-14T03:08:58+00:00","og_image":[{"width":600,"height":589,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif","type":"image\/gif"}],"author":"Rob Hedgpeth, Senior Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@probablyrealrob","twitter_misc":{"Written by":"Rob Hedgpeth, Senior Developer Advocate, Couchbase","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/"},"author":{"name":"Rob Hedgpeth, Senior Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/4fe39f690069382f7641d3a02f551e47"},"headline":"Synchronized Drawing Apps with Couchbase Mobile","datePublished":"2019-07-24T09:10:36+00:00","dateModified":"2025-06-14T03:08:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/"},"wordCount":807,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif","keywords":["Couchbase Lite 2.0","cross-platform mobile","xamarin.forms"],"articleSection":[".NET","Community","Couchbase Lite","Couchbase Mobile","Couchbase Server","Data Modeling","Sync Gateway","Xamarin"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/","name":"Synchronized Drawing Apps with Couchbase Mobile - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif","datePublished":"2019-07-24T09:10:36+00:00","dateModified":"2025-06-14T03:08:58+00:00","description":"Synchronized drawing apps made easy with the power of Couchbase Lite, Couchbase Sync Gateway, Couchbase Server, and Xamarin.Forms.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/07\/snake.gif","width":600,"height":589},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/synchronized-drawing-apps-with-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Synchronized Drawing Apps with Couchbase Mobile"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/4fe39f690069382f7641d3a02f551e47","name":"Rob Hedgpeth, Senior Developer Advocate, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/d2687b799f515d10560e40ed5b695b63","url":"https:\/\/secure.gravatar.com\/avatar\/8059b152c76ec2d3d1a3a05ad6dfd02e2c74a4ae158b724c3420b254c5fd7499?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8059b152c76ec2d3d1a3a05ad6dfd02e2c74a4ae158b724c3420b254c5fd7499?s=96&d=mm&r=g","caption":"Rob Hedgpeth, Senior Developer Advocate, Couchbase"},"description":"Rob Hedgpeth is a Senior Developer Advocate at Couchbase specializing in mobile and IoT technologies. Rob has been developing applications of all flavors for over a decade, but has primarily been focused on the mobile space since 2010. Prior to working at Couchbase Rob worked as a Mobile Architect at Xamarin and Microsoft.","sameAs":["https:\/\/x.com\/probablyrealrob"],"url":"https:\/\/www.couchbase.com\/blog\/author\/robert-hedgpeth\/"}]}},"authors":[{"term_id":9080,"user_id":34959,"is_guest":0,"slug":"robert-hedgpeth","display_name":"Rob Hedgpeth, Senior Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/8059b152c76ec2d3d1a3a05ad6dfd02e2c74a4ae158b724c3420b254c5fd7499?s=96&d=mm&r=g","author_category":"","last_name":"Hedgpeth, Senior Developer Advocate, Couchbase","first_name":"Rob","job_title":"","user_url":"","description":"Rob Hedgpeth is a Senior Developer Advocate at Couchbase specializing in mobile and IoT technologies. Rob has been developing applications of all flavors for over a decade, but has primarily been focused on the mobile space since 2010. Prior to working at Couchbase Rob worked as a Mobile Architect at Xamarin and Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/34959"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=7252"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7252\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/7261"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=7252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=7252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=7252"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=7252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}