{"id":123,"date":"2018-01-30T07:50:41","date_gmt":"2018-01-30T15:50:41","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/implementing-offline-capability-in-your-app\/"},"modified":"2025-06-11T08:10:02","modified_gmt":"2025-06-11T15:10:02","slug":"implementing-offline-capability-in-your-app","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/implementing-offline-capability-in-your-app\/","title":{"rendered":"Implementing Offline Capability In Your App"},"content":{"rendered":"<p>Do you want to build offline capabilities in your PowerApps app because your app users need to access some data or save some data even when they don&#8217;t have the internet connection? This blog provides an example of building these offline capabilities in your PowerApps app. This article assumes that you already know the basic concepts of PowerApps like screens, controls, events, attributes, navigation etc. We&#8217;ll will use all these concepts in this tutorial.<br \/>\n\u00a0<\/p>\n<h3 style='font-style: normal; font-family: Tahoma, \"Helvetica Neue\", Arial, Helvetica, sans-serif;'><b>Note<\/b><\/h3>\n<p style='font-weight: 400; font-style: normal; font-size: 13.008px; font-family: Tahoma, \"Helvetica Neue\", Arial, Helvetica, sans-serif;'><em style=\"font-size: 13.008px;\">The offline feature area is still under development and is not optimized for every offline scenario today. The functions to SaveData() to a local device and LoadData() from that device work best in their current implementation over relatively small quantities of data (e.g., dozens of text records in a table) that generally do not exceed 2MB. This is useful for some basic \u201coffline\u201d scenarios as well as to increase the startup performance of canvas apps by caching data locally. However, using this feature to save large amounts of data (e.g., saving thousands of rows in a table, or caching large images or videos) may cause errors or unexpected behavior with the current implementation and should be avoided. Also, the functions do not automatically resolve merge conflicts when a device returns to connectivity from offline \u2013 configuration on what data is saved and how to handle reconnection is up to the maker when writing expressions. We are working to expand the capabilities of offline apps to increase stability and size limits, and in the future to automatically handle decisions about what to save and how to handle conflicts. Stay tuned here and on the PowerApps blog for updates when they become available.\u00a0<\/em><\/p>\n<p style='font-weight: 400; font-style: normal; font-size: 13.008px; font-family: Tahoma, \"Helvetica Neue\", Arial, Helvetica, sans-serif;'>\u00a0<\/p>\n<h2>Offline Requirements Of An Example Issue Reporting App<\/h2>\n<p>For this tutorial, let\u2019s assume we have to build a simple Issue Reporting App with the following requirements:<\/p>\n<ul>\n<li>Show the list of reported issues (show latest data from the database or offline cache when the internet connection is not available)<\/li>\n<li>Capture new issues even when the internet connection is not available and save them to the database when the internet connection becomes available<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"609\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png\" style=\"display: inline; background-image: none;\" title=\"image\" width=\"737\"\/><\/a><\/p>\n<h3>\u00a0<\/h3>\n<h3>Note:<\/h3>\n<ul>\n<li>For this blog, I\u2019ll not get into conflict resolution scenarios e.g. allow offline editing of existing records and resolve conflicts with the edits done by other users on the same record. Implementing conflict resolution needs more work- e.g. you have to not only detect conflicts but also come up with a policy to resolve the conflict (auto resolution or user intervention). Conflict Resolution implementation would be easier to grasp, once you fully understand the offline capabilities described in this article. If there is enough interest, I\u2019ll write another article covering the conflict resolution aspect as well.<br \/>\n\t\u00a0<\/li>\n<li>You can find finished version of the example app over here (<a href=\"https:\/\/blogcode.blob.core.windows.net\/offline-1\/OfflineDemo.msapp\">msapp file is here<\/a> and <a href=\"https:\/\/blogcode.blob.core.windows.net\/offline-1\/OfflineDemoAppCDSPackage.zip\">exported package along with CDS is here<\/a>). For this app, I used CDS (Common Data Service) as the data source. However same concepts will apply to any other data source like SharePoint, SQL etc.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<h2>Part 1:\u00a0 Build Offline Cache of the Issue List: Show Online or Offline List Depending On the Internet Connection Availability<\/h2>\n<p>\u00a0<\/p>\n<p>High Level Approach for accomplishing this is:<\/p>\n<ul>\n<li>On start of the app or on click of a button, check if the internet connection is available<\/li>\n<li>If internet connection is available, fetch the data from the the database and put that in a collection (table in memory). Also, save this collection data to local\u00a0 storage of your device (local cache) so that we can use this cached data next time when the internet connection is not available (see next bullet).<\/li>\n<li>If internet connection is not available, fetch data from local storage of your device and use that to populate the collection.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p>For this app, I created a very simple custom entity \u201cIssue List\u201d in CDS (Common Data Service) to capture issues with \u201cTitle\u201d and \u201cDescription\u201d as 2 custom fields.<br \/>\nNote- I used CDS as the data source for my app. You can also use any other data source like SQL, SharePoint Online etc for creating similar table. Offline implementation concepts will be same.<\/p>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/8a12aeed-4618-4284-b08c-66dde9cf337e.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"498\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/8a12aeed-4618-4284-b08c-66dde9cf337e.png\" style=\"display: inline; background-image: none;\" title=\"image\" width=\"574\"\/><\/a><\/p>\n<p>\u00a0<\/p>\n<p>First screen in this sample app is a cover page kind of screen. On the click of \u201cLet\u2019s Go\u201d button, we\u2019ll check the internet connection via an object exposed by PowerApps called \u201cConnection\u201d. If internet connection is available (i.e. Connection.Connected is true), populate the local collection \u201cIssueCollection\u201d directly from the entity \u201cIssue List\u201d in the CDS database. Also, save it to the local storage (local cache) as \u201cissuesInLocalStorage\u201d so that we can use it as local cache when the internet connection is not available. If internet connection is not available, populate \u201cIssueCollection\u201d from this local cache. Finally, put the formula to navigate to the next screen where we\u2019ll be using the \u201cIssueCollection\u201d collection as the data source (Items property) for the gallery to show all the issues.<\/p>\n<p>\u00a0<\/p>\n<p>Following is the formula to be written on OnSelect event of the\u00a0 button \u201cLet\u2019s Go\u201d:<\/p>\n<p>If(Connection.Connected,<\/p>\n<p>ClearCollect(IssueCollection, &#8216;Issue List&#8217;);<\/p>\n<p>SaveData(IssueCollection,&#8221;issuesInLocalStorage&#8221;),<br \/>\nLoadData(IssueCollection,&#8221;issuesInLocalStorage&#8221;, true)<\/p>\n<p>);<\/p>\n<p>Navigate(IssueListScreen,ScreenTransition.Cover)<\/p>\n<p>\u00a0<\/p>\n<p>Note- I chose the option to do all this work in the OnSelect event of a button. You are free to use a different approach like doing all this work in the OnStart event of the app or OnVisible event of the screen.<\/p>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7eda2acc-881f-4311-ab89-2e6d354e0729.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"490\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7eda2acc-881f-4311-ab89-2e6d354e0729.png\" style=\"display: inline; background-image: none;\" title=\"image\" width=\"815\"\/><\/a><\/p>\n<p>\u00a0<\/p>\n<p>Now, on the next screen (\u201cIssueListScreen\u201d), insert a gallery and set the Items property of that gallery to \u201cIssueCollection\u201d. Show the Title and Description fields in the gallery. That\u2019s it for the first requirement. Your app is now ready to show data directly from the data source or local cache depending on the internet connection availability.<\/p>\n<p>\u00a0<\/p>\n<p>Test it by first opening the app and seeing the gallery data with the internet connection on your phone. Close the app and now turn the phone in the airplane mode. Open this app again and hit \u201cLet\u2019s Go\u201d. You should see the issue list coming from Local Cache.<\/p>\n<p>\nImportant Note- As of now, you can\u2019t test the LoadData and SaveData in browser. You must use your mobile device to test that part. In the web editor, you might see the error for LoadData and SaveData. Please ignore that.<\/p>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7672e811-5186-43db-9756-5fde179cba78.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"444\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7672e811-5186-43db-9756-5fde179cba78.png\" style=\"display: inline; background-image: none;\" title=\"image\" width=\"770\"\/><\/a><\/p>\n<h2>\u00a0<\/h2>\n<h2>Part 2: Capture new issues even when internet connection is not available and save to the database when the internet connection becomes available<\/h2>\n<p>For adding new issues, add a new screen \u201cNewIssueScreen\u201d and insert an EditForm control in that screen. Navigate to this screen on the press of plus sign from the &#8220;IssueListScreen\u201d. Our high level approach for save new data (new issue for our app) will be as follows:<br \/>\n\u00a0<\/p>\n<ul>\n<li>If the internet connection is available,\n<ul>\n<li>Submit the form so that new issue is directly saved to the database.<\/li>\n<li>Refresh the \u201cIssue List\u201d data source and repopulate the collection \u201cIssueCollection\u201d with the latest data from \u201cIssue List\u201d data source (so that your local collection gets the last record added in the table).<\/li>\n<li>Save \u201cIssue Collection\u201d collection in the local storage as \u201cissuesInLocalStorage\u201d \u2013 this ensures that the newly added record is available in local cache to be used next time when the app is opened in offline mode (without internet connection)<\/li>\n<\/ul>\n<\/li>\n<li>If the internet connection is not available,\n<ul>\n<li>Add the offline issues to be added to a local collection called \u201cIssuesToBeAdded\u201d. In a later step, using a timer, we\u2019ll keep checking the internet connection availability. As soon as the internet becomes available, we\u2019ll try saving this local collection to the database and clear the local collection.<\/li>\n<li>Also save this local collection of offline \u201cIssuesToBeAdded\u201d to local storage as \u201cnewIssuesInLocalStorage\u201d. This will be useful if the app is closed with some offline new issues to be saved. We\u2019ll retrieve it from the local storage next time when the app is opened.<br \/>\n\t\t\u00a0<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<blockquote>\n<p>Following is the formula to be used on the \u201cOnSelect\u201d event of a save button:<\/p>\n<p>\nIf(Connection.Connected,SubmitForm(EditForm1); Refresh(&#8216;Issue List&#8217;); ClearCollect(IssueCollection,&#8217;Issue List&#8217;);<br \/>\nSaveData(IssueCollection,&#8221;issuesInLocalStorage&#8221;)<br \/>\n,<br \/>\nCollect(IssuesToBeAdded,{Title:TitleDatacard.Text,Description:DescriptionDatacard.Text} ); SaveData(IssuesToBeAdded, &#8220;newIssuesInLocalStorage&#8221;));<\/p>\n<p>Navigate(IssueListScreen,ScreenTransition.Cover)<\/p>\n<\/blockquote>\n<blockquote>\n<p>\u00a0<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e80fd67-3c9f-4f30-a8ee-c3cd1c4cc926.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"438\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e80fd67-3c9f-4f30-a8ee-c3cd1c4cc926.png\" style=\"display: inline; background-image: none;\" title=\"image\" width=\"766\"\/><\/a><\/p>\n<\/blockquote>\n<p>\u00a0<\/p>\n<ul>\n<li>Add a new screen to show these offline issues to be added (I call it \u201cUnSavedIssuesScreen\u201d). Add a gallery control and set the \u201cItems\u201d property of the gallery control to \u201cIssuesToBeAdded\u201d.<br \/>\n\t\u00a0<\/li>\n<li>On the \u201cIssueListScreen\u201d,\n<ul>\n<li>Add a label at the bottom to show how many offline issues are to be save to database (or, if all of them are saved, indicate so). This is done by checking the count or rows in the collection \u201cIssuesToBeAdded\u201d. Text formula for this label should be:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<blockquote>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 If(CountRows(IssuesToBeAdded) &gt;0,CountRows(IssuesToBeAdded) &amp; &#8221; offline issues to be added&#8221;, &#8220;0 offline issues. All caught up.\u201d)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/p>\n<\/blockquote>\n<ul>\n<li>\n<ul>\n<li>Add a timer that checks every 30 seconds for the internet connection availability (using the same Connection object we used earlier). If the Connection is connected and there are some pending offline issues to be saved,:\n<ul>\n<li>Save the \u201cIssuesToBeAdded\u201d collection to the database\u00a0<\/li>\n<li>Clear the collection \u201cIssuesToBeAdded\u201d (because they are all saved to the database now)<\/li>\n<li>Get the latest list of issues from the database (by using Refresh method on \u201cIssue List\u201d and repopulating the collection \u201cIssueCollection\u201d)<\/li>\n<li>Update the local cache \u201cissuesInLocalStorage\u201d with this repopulated collection \u201cIssueCollection\u201d. This will ensure that app can get the updated issue list from the local cache if it is opened next time in offline mode (without internet connection)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<blockquote>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Below is the formula for OnTimerEnd event of the timer:<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 If(Connection.Connected &amp;&amp; CountRows(IssuesToBeAdded) &gt;0,<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Collect(&#8216;Issue List&#8217;,IssuesToBeAdded);<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Clear(IssuesToBeAdded);<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SaveData(IssuesToBeAdded,&#8221;newIssuesInLocalStorage&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Refresh(&#8216;Issue List&#8217;);<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ClearCollect(IssueCollection, &#8216;Issue List&#8217;);<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SaveData(IssueCollection,&#8221;issuesInLocalStorage&#8221;))<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 With this, we are all set with saving the offline issues to database as soon as the connection is available and also getting a label to tell us how many issues are offline issues to be saved.<\/p>\n<p><a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/51a7d8a3-95b3-403a-a58e-f35680aa4a59.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"426\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/51a7d8a3-95b3-403a-a58e-f35680aa4a59.png\" style=\"display: inline; background-image: none;\" title=\"image\" width=\"693\"\/><\/a><br \/>\n\u00a0<\/p>\n<ul>\n<li>Last thing we need to do is go back to the first screen and on the click of \u201cLet\u2019s Go\u201d button, update the formula to check offline issues from the local cache. This will ensure that if the app was closed last time with some offline issues to be saved, app will retrieve them from local storage and keep trying to save it on internet connection availability (on the IssueListScreen) . So, update the formula of OnSelect event of the button \u201cLet\u2019s Go\u201d to (bolded part is the new addition in the earlier formula):<\/li>\n<\/ul>\n<p>If(Connection.Connected, ClearCollect(IssueCollection, &#8216;Issue List&#8217;);SaveData(IssueCollection,&#8221;issuesInLocalStorage&#8221;),<br \/>\nLoadData(IssueCollection,&#8221;issuesInLocalStorage&#8221;, true));<\/p>\n<p><strong>LoadData(IssuesToBeAdded,&#8221;newIssuesInLocalStorage&#8221;, true); <\/strong>Navigate(IssueListScreen,ScreenTransition.Cover)<\/p>\n<p>\u00a0<\/p>\n<p>Side note- Caching data is a good strategy for your app performance as well. You can learn more about performance tips for your apps <a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/performance-considerations-with-powerapps\/\">in this blog<\/a>.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<a href=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/4a383687-762f-4f07-a31c-a9a99bf54fe0.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"476\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/4a383687-762f-4f07-a31c-a9a99bf54fe0.png\" style=\"display: inline; background-image: none;\" title=\"image\" width=\"792\"\/><\/a><\/p>\n<\/blockquote>\n<p>\u00a0<\/p>\n<p>With this, we are done with building basic offline capabilities in your app. Without internet connection, your user can see the issues cached last time and even add new issues offline (to be synced later on internet connection availability). Keep in mind that your user has to open this app at least once and tap on \u201cLet\u2019s Go\u201d once to ensure \u201cIssue List\u201d is cached once.<\/p>\n<p>\u00a0<\/p>\n<h2>Conclusion<\/h2>\n<p>\u00a0<\/p>\n<p>Building offline capabilities makes your app even more compelling for your users (esp. mobile users traveling to places with spotty internet connections). Hopefully this tutorial provided you necessary guidance to build these offline capabilities in your PowerApps app. We excluded Conflict Resolution requirements from the scope of this blog to make this article easily digestible. Most of the customer scenarios we heard don\u2019t even need conflict resolution. However if many of you need help implementing conflict resolution requirements, let us know. We\u2019ll be happy to do another blog on that topic. Happy App Building!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Read this blog to see an example of building basic offline capabilities in your PowerApps app. If your app users need to access some data or save some data even when they don&#8217;t have the internet connection, you&#8217;ll find this article helpful.<\/p>\n","protected":false},"author":109,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[3423],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2138],"class_list":["post-123","post","type-post","status-publish","format-standard","hentry","audience-it-professional","content-type-tips-and-guides","product-power-apps","topic-application-modernization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Implementing Offline Capability In Your App - Microsoft Power Platform Blog<\/title>\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.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Implementing Offline Capability In Your App - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"Read this blog to see an example of building basic offline capabilities in your PowerApps app. If your app users need to access some data or save some data even when they don&#039;t have the internet connection, you&#039;ll find this article helpful.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/implementing-offline-capability-in-your-app\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-30T15:50:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T15:10:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png\" \/>\n<meta name=\"author\" content=\"Saurabh Pant\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Saurabh Pant\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/saurabh-pant\/\",\"@type\":\"Person\",\"@name\":\"Saurabh Pant\"}],\"headline\":\"Implementing Offline Capability In Your App\",\"datePublished\":\"2018-01-30T15:50:41+00:00\",\"dateModified\":\"2025-06-11T15:10:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/\"},\"wordCount\":1944,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/\",\"name\":\"Implementing Offline Capability In Your App - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png\",\"datePublished\":\"2018-01-30T15:50:41+00:00\",\"dateModified\":\"2025-06-11T15:10:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage\",\"url\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png\",\"contentUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Implementing Offline Capability In Your App\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/cff307f090dbecc142a4ae500635fbc0\",\"name\":\"Saurabh Pant\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/a2aee9e7e83190780707b84811a763b3798edcf2c9d6a04c84472ee66376ebb2?s=96&d=mm&r=g0f202c855deeae9d0116ea4b4d397597\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a2aee9e7e83190780707b84811a763b3798edcf2c9d6a04c84472ee66376ebb2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a2aee9e7e83190780707b84811a763b3798edcf2c9d6a04c84472ee66376ebb2?s=96&d=mm&r=g\",\"caption\":\"Saurabh Pant\"},\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/spant\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Implementing Offline Capability In Your App - Microsoft Power Platform Blog","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.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/","og_locale":"en_US","og_type":"article","og_title":"Implementing Offline Capability In Your App - Microsoft Power Platform Blog","og_description":"Read this blog to see an example of building basic offline capabilities in your PowerApps app. If your app users need to access some data or save some data even when they don't have the internet connection, you'll find this article helpful.","og_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/implementing-offline-capability-in-your-app\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2018-01-30T15:50:41+00:00","article_modified_time":"2025-06-11T15:10:02+00:00","og_image":[{"url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png","type":"","width":"","height":""}],"author":"Saurabh Pant","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Saurabh Pant","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/saurabh-pant\/","@type":"Person","@name":"Saurabh Pant"}],"headline":"Implementing Offline Capability In Your App","datePublished":"2018-01-30T15:50:41+00:00","dateModified":"2025-06-11T15:10:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/"},"wordCount":1944,"commentCount":0,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/","name":"Implementing Offline Capability In Your App - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png","datePublished":"2018-01-30T15:50:41+00:00","dateModified":"2025-06-11T15:10:02+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#primaryimage","url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png","contentUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/0e6edfa7-c234-47fb-abf4-d5c9dc554c36.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2018\/01\/30\/implementing-offline-capability-in-your-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Implementing Offline Capability In Your App"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/cff307f090dbecc142a4ae500635fbc0","name":"Saurabh Pant","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a2aee9e7e83190780707b84811a763b3798edcf2c9d6a04c84472ee66376ebb2?s=96&d=mm&r=g0f202c855deeae9d0116ea4b4d397597","url":"https:\/\/secure.gravatar.com\/avatar\/a2aee9e7e83190780707b84811a763b3798edcf2c9d6a04c84472ee66376ebb2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a2aee9e7e83190780707b84811a763b3798edcf2c9d6a04c84472ee66376ebb2?s=96&d=mm&r=g","caption":"Saurabh Pant"},"url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/spant\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/109"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/123\/revisions"}],"predecessor-version":[{"id":131123,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/123\/revisions\/131123"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=123"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=123"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=123"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=123"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=123"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=123"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=123"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}