{"id":1421,"date":"2016-02-29T14:22:34","date_gmt":"2016-02-29T13:22:34","guid":{"rendered":"https:\/\/www.inovex.de\/\/?p=1421"},"modified":"2026-03-17T08:00:13","modified_gmt":"2026-03-17T07:00:13","slug":"adaptive-code-execution-with-dart","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/","title":{"rendered":"Adaptive Code Execution with Dart"},"content":{"rendered":"<p>In this article we introduce two Dart libraries for code distribution: <a href=\"https:\/\/github.com\/dbaelz\/adaptify\" target=\"_blank\" rel=\"noopener\">Adaptify<\/a> and <a href=\"https:\/\/github.com\/dbaelz\/code_mobility\" target=\"_blank\" rel=\"noopener\">Code Mobility<\/a>. Both are available on GitHub, so read on\u00a0to learn the basics before jumping right in and using\u00a0them.<\/p>\n<p><!--more--><\/p>\n<p>Distributed systems and applications are widely used. In fact, they are the cornerstones of modern web services. Whether you shop on the internet, send an instant message or watch a video stream: Distribution provides the services fast and reliably.<\/p>\n<p>The architecture of a conventional distributed application is characterized by a static task-to-component assignment. In this architecture the decision on which component a task is performed is already made in the development of the application. Adaptive software pursues a different approach: It provides decision-making at runtime to determine which component should execute the task. In addition, it features concepts for the distribution of the source code. The objectives are a better resource utilization and the creation of software that is more adaptable to requirement changes at runtime.<\/p>\n<p>In my master&#8217;s thesis I studied the opportunities of adaptive code execution in theory and practice. For the practical part, I developed two libraries with the Dart programming language. One library is responsible for the decision-making and the other for the code distribution.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#Dart\" >Dart<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#Adaptify\" >Adaptify<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#Code-Mobility\" >Code Mobility<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#Security\" >Security<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#Outlook\" >Outlook<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#Were-hiring\" >We&#8217;re hiring!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#Get-in-touch\" >Get in touch<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Dart\"><\/span>Dart<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The <a href=\"https:\/\/www.dartlang.org\/\" target=\"_blank\" rel=\"noopener\">Dart<\/a> programming language is developed by a team at Google with the self proclaimed goal to run on the client and on the server. Dart allows the use of the same source code on the client and server, thus\u00a0the development and maintenance effort is reduced.<\/p>\n<p>Dart is an object-oriented language with class-based single inheritance. Variables have a lexical scope, which is determined statically. It supports optional static types and dynamic type assertions at runtime. Among other features, Dart is especially optimized for high performance and asynchronous code execution.<\/p>\n<p>Server-side backends and desktop command-line applications are executed on the Dart VM. For the client Dart focuses on the browser. Since no current browser features a Dart runtime, the source code is compiled to JavaScript with the dart2js compiler.<\/p>\n<p>Both libraries are developed with the goal\u00a0to use them in the browser and the Dart VM. This increases the development effort, but the source code is reusable on both platforms and tasks can\u00a0be shared and exchanged between the runtime environments. The\u00a0libraries use abstract classes to ensure uniform interfaces. These abstract classes are the framework for individual\u00a0implementations. Also, the libraries consist of working implementations for out-of-the-box usage.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Adaptify\"><\/span>Adaptify<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The Adaptify library is responsible for the decision-making. It utilizes the three basic resources CPU, memory and bandwidth. For every task used with Adaptify metadata with consumption information for the three resources must be defined. In the metadata the resource requirement is graded into low, medium or high consumption. Additionally, there is a fourth <span style=\"font-weight: 400;\">metadata<\/span> which defines whether\u00a0a task is time-critical.<\/p>\n<p>Several components of the library interact with each other for the decision-making. At first the resource <b>requirements<\/b> of a task, as\u00a0defined\u00a0before, are determined. In addition, the <b>monitor<\/b> component provides information about the current capacity of the device. Both information sources are evaluated by an <b>adaptation strategy<\/b> and a decision is made. Adaptify\u00a0is able\u00a0to make a decision based\u00a0on the resource requirements alone, if no monitor information has\u00a0been collected or the adaptation strategy doesn&#8217;t intend the use of a monitor. The decision is then forwarded to the <b>decision unit<\/b> which determines a final result and returns it to the application. The decision unit may further process the decision of an adaptation strategy. For example, several adaptation strategies can be evaluated within a decision unit. Subsequently, the decisions are collected and the result is determined by a majority decision.<\/p>\n<p>The implementation with Dart provides\u00a0several challenges. At first the two very different runtime environments (Dart VM and browser) offer different and very limited options to acquire the capacity\u00a0information of a system. Furthermore, the comparability of measurements on different devices is a problem that makes it hard to use the results in an adaptation strategy. The implementation and conducted tests revealed that it&#8217;s difficult to\u00a0capture meaningful results for the\u00a0three resources in both runtimes.\u00a0Especially the browser complicates the data collection and only limited information are available.\u00a0<span style=\"line-height: 1.5;\">Therefore, the manual user input of the performance values is a good strategy to collect information for the monitor.\u00a0In addition to the collection of information a good adaptation strategy\u00a0is important. Adaptify currently provides two strategies based on conditional expressions and fuzzy logic.\u00a0They<\/span><span style=\"line-height: 1.5;\">\u00a0are tested with user provided values and have proven their suitable for the decision-making in tests.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Code-Mobility\"><\/span>Code Mobility<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>With the Code Mobility library different concepts of\u00a0code distribution and execution are implemented. In order to demonstrate the\u00a0opportunities of the library\u00a0these concepts are briefly discussed here.\u00a0The easiest way of code distribution is the use of locally available code. In this case, it&#8217;s assumed that the source code is available on all devices and the code can\u00a0simply be executed on them. If the task is executed remotely, it may be necessary to send additional data to the target device. After the computation the result is returned from the local or remote device and further processed.\u00a0These types of executions are referred to as <b>local execution<\/b> and <b>remote execution<\/b>.<\/p>\n<p>Another concept is <b>remote evaluation<\/b>, which is similar to Remote Procedure Call (RPC). It enables the remote execution of code on a target device and the receipt of the result. A simple example for\u00a0the use of remote evaluation is an SQL query, which is sent to the SQL server and executed there. The result of the query is returned to the sender.<\/p>\n<p>The last supported concept is <b>code on demand<\/b>. This concept supports requesting\u00a0source code from another device. On the requesting device, the source code is executed and the results are processed. The best known and widely used example for code on demand is JavaScript in a browser. Figure 1 shows the different approaches for code mobility.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1436 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/code-mobility-alternatives-1024x576.png\" alt=\"\" width=\"800\" height=\"450\" \/><\/p>\n<p>Based on these concepts the library provides its functionality. The central piece of Code Mobility is the <strong>task<\/strong>, whose execution is the reason for all further functionality. A\u00a0task consist of the three metadata\u00a0name, resource identifier and description.\u00a0This metadata are used to uniquely identify the task in the code distribution and execution and to provide additional information.\u00a0In principle a task\u00a0consists of a class that manipulates the input data and returns the result or an error. It&#8217;s executed by a <strong>taskrunner<\/strong> on either a server or client.\u00a0This class is responsible for the handover of the input data, the execution of the task and the evaluation of the return values.\u00a0In addition to an abstract interface for the taskrunner, the library contributes a concrete implementation for the client and server.<\/p>\n<p>The <strong>server<\/strong> is also part of the Code Mobility library and\u00a0is only available for the Dart VM. A\u00a0server is used to deliver the content and to accept requests for the above described concepts. For communication and data exchange the HTTP protocol and\u00a0the JSON data format is used. Code Mobility\u00a0consists of an abstract server class and two concrete implementations:\u00a0The MobilityServer, which supports all concepts and the limited RepositoryServer that provides only content delivery.<\/p>\n<p>The <strong>client<\/strong>\u00a0controls the local execution of a task,\u00a0triggers a remote execution\/evaluation or queries the source code with code on demand. In all cases, the client delivers the result to the application for further processing. The client is defined with\u00a0an abstract class to provide unified interface. Furthermore, the library provides clients for\u00a0the Dart VM and the browser.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Security\"><\/span>Security<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Security for adaptive code execution is complex and difficult\u00a0to achieve. Due to the exchange of source code, it\u2019s easily possible that a sender delivers malicious code. Therefore, the source code exchanged with the Code Mobility library must be executed in a sandbox. A sandbox is a highly controlled environment within the device, which operates only on a tightly controlled set of resources. The JavaScript engine in the browser as well as the Dart VM use a sandbox and provide some basic protection. Nevertheless, it\u2019s possible to affect the application, other executed tasks and the underlying system with the available APIs. As a precaution\u00a0only previously approved tasks should be performed.<\/p>\n<p>The Code Mobility library supports secure connections with the HTTPS protocol using the certificates provided by the system or self-signed certificates. Authentication and authorization of users may be valuable for more complex usage scenarios. Currently the Code Mobility library doesn\u2019t support either, these\u00a0may\u00a0be added in future development.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Outlook\"><\/span>Outlook<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Although both libraries provide a solid foundation, they can be improved with\u00a0further development. For the Adaptify library additional approaches like strategies using artificial intelligence and improvement\u00a0for\u00a0the current algorithms should be considered. Also, benchmarks for detecting the maximum capacity of the system resources aren\u2019t implemented yet and could be added to the library.<\/p>\n<p>The next step forward for the Code Mobility library is the implementation of authentication and authorization. Another step to improve the library will be\u00a0better error handling and code inspection to ensure that the code can\u00a0be executed on the target device.<\/p>\n<p>Overall, both\u00a0libraries provide the required basic functionality for adaptive software and are ready to use.\u00a0The libraries are documented with\u00a0dartdoc to ease the usage.\u00a0<a href=\"https:\/\/github.com\/dbaelz\/adaptify\" target=\"_blank\" rel=\"noopener\">Adaptify<\/a> and\u00a0<a href=\"https:\/\/github.com\/dbaelz\/code_mobility\" target=\"_blank\" rel=\"noopener\">Code Mobility<\/a> are released under the BSD License on Github. For feedback, bug reports or code contribution visit the project sites and feel free to contact me.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Were-hiring\"><\/span>We&#8217;re hiring!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Looking for a change? We&#8217;re hiring software developers skilled in Java, .NET and JavaScript who are no strangers to more exotic languages such as Dart, Elixir or Go either. <strong>Apply now!<\/strong><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Get-in-touch\"><\/span>Get in touch<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Don&#8217;t want to get your hands dirty? Our developers have years of experience in developing mobile and web applications. Visit <a href=\"https:\/\/www.inovex.de\/en\/our-services\/mobile\/\" target=\"_blank\" rel=\"noopener\">our website<\/a> for a full portfolio, ask for a quotation at <a href=\"mailto:list-blog@inovex.de\" target=\"_blank\" rel=\"noopener\">list-blog@inovex.de<\/a>\u00a0or call\u00a0<a href=\"tel:+497216190210\" target=\"_blank\" rel=\"noopener\">+49 721 619 021-0<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article we introduce two Dart libraries for code distribution: Adaptify and Code Mobility. Both are available on GitHub, so read on\u00a0to learn the basics before jumping right in and using\u00a0them.<\/p>\n","protected":false},"author":39,"featured_media":12420,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[510],"service":[420],"coauthors":[{"id":39,"display_name":"Daniel B\u00e4lz","user_nicename":"dbaelz"}],"class_list":["post-1421","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-apps-2","service-apps"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Adaptive Code Execution with Dart - inovex GmbH<\/title>\n<meta name=\"description\" content=\"In this article, we introduce two Dart libraries for code distribution: Adaptify and Code Mobility. Both are available on GitHub.\" \/>\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.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Adaptive Code Execution with Dart - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"In this article, we introduce two Dart libraries for code distribution: Adaptify and Code Mobility. Both are available on GitHub.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-29T13:22:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-17T07:00:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2300\" \/>\n\t<meta property=\"og:image:height\" content=\"678\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daniel B\u00e4lz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart-1024x302.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel B\u00e4lz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Daniel B\u00e4lz\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/\"},\"author\":{\"name\":\"Daniel B\u00e4lz\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/2a543d8c30ae96e4ca4e55a3a280539b\"},\"headline\":\"Adaptive Code Execution with Dart\",\"datePublished\":\"2016-02-29T13:22:34+00:00\",\"dateModified\":\"2026-03-17T07:00:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/\"},\"wordCount\":1666,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png\",\"keywords\":[\"Apps\"],\"articleSection\":[\"Applications\",\"English Content\",\"General\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/\",\"url\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/\",\"name\":\"Adaptive Code Execution with Dart - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png\",\"datePublished\":\"2016-02-29T13:22:34+00:00\",\"dateModified\":\"2026-03-17T07:00:13+00:00\",\"description\":\"In this article, we introduce two Dart libraries for code distribution: Adaptify and Code Mobility. Both are available on GitHub.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png\",\"width\":2300,\"height\":678,\"caption\":\"Adaptive Code Execution with Dart\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.inovex.de\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Adaptive Code Execution with Dart\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.inovex.de\/de\/#website\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.inovex.de\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/inovexde\",\"https:\/\/x.com\/inovexgmbh\",\"https:\/\/www.instagram.com\/inovexlife\/\",\"https:\/\/www.linkedin.com\/company\/inovex\",\"https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/2a543d8c30ae96e4ca4e55a3a280539b\",\"name\":\"Daniel B\u00e4lz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/cd3c2b443db1c5d1d6f2acef05fc002d\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1de6b57541e80290e1972f383e53c4aca12d46c83ff79472b19c2148de60b4f1?s=96&d=retro&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1de6b57541e80290e1972f383e53c4aca12d46c83ff79472b19c2148de60b4f1?s=96&d=retro&r=g\",\"caption\":\"Daniel B\u00e4lz\"},\"url\":\"https:\/\/www.inovex.de\/de\/blog\/author\/dbaelz\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Adaptive Code Execution with Dart - inovex GmbH","description":"In this article, we introduce two Dart libraries for code distribution: Adaptify and Code Mobility. Both are available on GitHub.","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.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/","og_locale":"de_DE","og_type":"article","og_title":"Adaptive Code Execution with Dart - inovex GmbH","og_description":"In this article, we introduce two Dart libraries for code distribution: Adaptify and Code Mobility. Both are available on GitHub.","og_url":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2016-02-29T13:22:34+00:00","article_modified_time":"2026-03-17T07:00:13+00:00","og_image":[{"width":2300,"height":678,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png","type":"image\/png"}],"author":"Daniel B\u00e4lz","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart-1024x302.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Daniel B\u00e4lz","Gesch\u00e4tzte Lesezeit":"8\u00a0Minuten","Written by":"Daniel B\u00e4lz"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/"},"author":{"name":"Daniel B\u00e4lz","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/2a543d8c30ae96e4ca4e55a3a280539b"},"headline":"Adaptive Code Execution with Dart","datePublished":"2016-02-29T13:22:34+00:00","dateModified":"2026-03-17T07:00:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/"},"wordCount":1666,"commentCount":1,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png","keywords":["Apps"],"articleSection":["Applications","English Content","General"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/","url":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/","name":"Adaptive Code Execution with Dart - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png","datePublished":"2016-02-29T13:22:34+00:00","dateModified":"2026-03-17T07:00:13+00:00","description":"In this article, we introduce two Dart libraries for code distribution: Adaptify and Code Mobility. Both are available on GitHub.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/02\/artikelbild-dart.png","width":2300,"height":678,"caption":"Adaptive Code Execution with Dart"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/adaptive-code-execution-with-dart\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Adaptive Code Execution with Dart"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/2a543d8c30ae96e4ca4e55a3a280539b","name":"Daniel B\u00e4lz","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/cd3c2b443db1c5d1d6f2acef05fc002d","url":"https:\/\/secure.gravatar.com\/avatar\/1de6b57541e80290e1972f383e53c4aca12d46c83ff79472b19c2148de60b4f1?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1de6b57541e80290e1972f383e53c4aca12d46c83ff79472b19c2148de60b4f1?s=96&d=retro&r=g","caption":"Daniel B\u00e4lz"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/dbaelz\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/1421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=1421"}],"version-history":[{"count":2,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/1421\/revisions"}],"predecessor-version":[{"id":66547,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/1421\/revisions\/66547"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/12420"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=1421"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=1421"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=1421"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=1421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}