{"id":26912,"date":"2016-11-20T18:43:51","date_gmt":"2016-11-20T16:43:51","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=26912"},"modified":"2016-11-20T18:43:51","modified_gmt":"2016-11-20T16:43:51","slug":"robo-modern-task-runner-for-php","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/","title":{"rendered":"Robo &#8211; Modern Task Runner for PHP"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"26913\" data-permalink=\"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/robo\/\" data-orig-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/robo.png?fit=798%2C382&amp;ssl=1\" data-orig-size=\"798,382\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"robo\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/robo.png?fit=660%2C316&amp;ssl=1\" class=\"aligncenter size-medium wp-image-26913\" src=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/robo-500x239.png?resize=500%2C239&#038;ssl=1\" alt=\"robo\" width=\"500\" height=\"239\" srcset=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/robo.png?resize=500%2C239&amp;ssl=1 500w, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/robo.png?resize=768%2C368&amp;ssl=1 768w, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/robo.png?w=798&amp;ssl=1 798w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/p>\n<p>There is a whole lot of ways to build and deploy web applications these days. \u00a0I&#8217;ve done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly.<\/p>\n<p>My most recent discovery was <a href=\"http:\/\/robo.li\/\">Robo<\/a> &#8211; a modern task runner for PHP. \u00a0I&#8217;ve been pushing it to one of those weekends, where I have nothing better to do, to trying it out. \u00a0And today I did. \u00a0Not just tried it out, but replaced a part of our infrastructure, which was previously running on <a href=\"https:\/\/laravel.com\/docs\/5.3\/envoy\">Laravel Envoy<\/a>.<\/p>\n<p>Robo is very nice. \u00a0On one hand, it&#8217;s simple and straight forward and is very easy to get you started with. \u00a0On the other hand, it provides quite a bit of functionality to help you with the build and deploy process. \u00a0Here are some of the things that I love about it:<\/p>\n<ul>\n<li>It&#8217;s PHP! \u00a0Which makes it perfect for PHP projects, the kind I&#8217;m dealing with most of my time. \u00a0No need to translate your PHP into XML (hey <a href=\"https:\/\/www.phing.info\/\">Phing<\/a>), or into a weird rake\/capistrano like syntax.<\/li>\n<li>Instant support for command line arguments and their validation, help screens, ANSI colors, and the like. \u00a0Honestly, I don&#8217;t know why we are still fighting these things in 2016.<\/li>\n<li>Transparency. \u00a0You install robo with composer, create your RoboFile.php, and you are done. \u00a0All public methods of the class in the RoboFile.php will be available as robo commands. \u00a0All parameters of public methods are populated by the command line arguments. \u00a0There is no black magic to it. \u00a0All that is executed is whatever you write.<\/li>\n<li>Extensions (or Tasks and Stacks). \u00a0There are a few to utilize already (<a href=\"http:\/\/robo.li\/tasks\/Remote\/#ssh\">SSH<\/a>, <a href=\"http:\/\/robo.li\/tasks\/Vcs\/#gitstack\">git<\/a>, and more). \u00a0And it is trivial to write your own and share them with composer\/Packagist. \u00a0That&#8217;s one of the things that is difficult with our current build setup based on <a href=\"https:\/\/github.com\/jaz303\/phake\">phake<\/a> (hence our <a href=\"https:\/\/github.com\/QoboLtd\/phake-builder\">phake-builder<\/a>).<\/li>\n<\/ul>\n<p>Things I don&#8217;t like (remember I have been using Robo for just about 3 minutes):<\/p>\n<ul>\n<li>Logging. \u00a0While it&#8217;s trivial to add logs into the RoboFiles using your choice of the logging library (<a href=\"https:\/\/github.com\/Seldaek\/monolog\">monolog<\/a> is awesome), I haven&#8217;t found a way to get all the output after the command execution. \u00a0For now, I&#8217;ve wrapped the Robo run into a shell script, which collects all outputs and sends it by email into our deployment archives storage.<\/li>\n<li>Remote power. \u00a0Robo has some very cool tasks and stacks for local work. \u00a0But I haven&#8217;t found a way to utilize them when using Robo&#8217;s SSH task. \u00a0This slightly spoils the clean remote commands with sprinkles of bash, which I would love to avoid.<\/li>\n<\/ul>\n<p>Overall, it looks like a very nice and elegant system and I&#8217;ll probably be using it for much more. \u00a0Once I get a bit more comfortable with it, I will probably replace our <a href=\"https:\/\/github.com\/QoboLtd\/phake-builder\">phake-builder<\/a> setup with <a href=\"http:\/\/robo.li\/\">Robo<\/a>.<\/p>\n<p>If you are looking for a good tool to use for your build and deploy needs, give it a try. \u00a0You&#8217;ll probably like it a lot.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>There is a whole lot of ways to build and deploy web applications these days. \u00a0I&#8217;ve done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo &#8211; a modern task runner &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Robo &#8211; Modern Task Runner for PHP<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Robo - Modern Task Runner for PHP #PHP #DevOps #SysAdmin #WebDev","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[1,6,18,133,62],"tags":[1586,38,1330],"keyring_services":[],"class_list":["post-26912","post","type-post","status-publish","format-standard","hentry","category-general","category-linux","category-programming","category-sysadmin","category-technology","tag-deployment","tag-php","tag-web-development"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"There is a whole lot of ways to build and deploy web applications these days. I&#039;ve done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Leonid Mamchenkov\"\/>\n\t<meta name=\"google-site-verification\" content=\"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Leonid Mamchenkov - Life, universe, and everything else\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Robo \u2013 Modern Task Runner for PHP - Leonid Mamchenkov\" \/>\n\t\t<meta property=\"og:description\" content=\"There is a whole lot of ways to build and deploy web applications these days. I&#039;ve done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2016-11-20T16:43:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2016-11-20T16:43:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/MamchenkovBlog\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Robo \u2013 Modern Task Runner for PHP - Leonid Mamchenkov\" \/>\n\t\t<meta name=\"twitter:description\" content=\"There is a whole lot of ways to build and deploy web applications these days. I&#039;ve done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#blogposting\",\"name\":\"Robo \\u2013 Modern Task Runner for PHP - Leonid Mamchenkov\",\"headline\":\"Robo &#8211; Modern Task Runner for PHP\",\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/wp-content\\\/uploads\\\/2016\\\/11\\\/robo-500x239.png\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#articleImage\"},\"datePublished\":\"2016-11-20T18:43:51+02:00\",\"dateModified\":\"2016-11-20T18:43:51+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#webpage\"},\"articleSection\":\"All, Linux, Programming, Sysadmin, Technology, deployment, PHP, web development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"position\":2,\"name\":\"Technology\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/linux\\\/#listItem\",\"name\":\"Linux\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/linux\\\/#listItem\",\"position\":3,\"name\":\"Linux\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/linux\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#listItem\",\"name\":\"Robo &#8211; Modern Task Runner for PHP\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#listItem\",\"position\":4,\"name\":\"Robo &#8211; Modern Task Runner for PHP\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/linux\\\/#listItem\",\"name\":\"Linux\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#webpage\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/\",\"name\":\"Robo \\u2013 Modern Task Runner for PHP - Leonid Mamchenkov\",\"description\":\"There is a whole lot of ways to build and deploy web applications these days. I've done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2016\\\/11\\\/20\\\/robo-modern-task-runner-for-php\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"datePublished\":\"2016-11-20T18:43:51+02:00\",\"dateModified\":\"2016-11-20T18:43:51+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/\",\"name\":\"Blog of Leonid Mamchenkov\",\"description\":\"Life, universe, and everything else\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Robo \u2013 Modern Task Runner for PHP - Leonid Mamchenkov","description":"There is a whole lot of ways to build and deploy web applications these days. I've done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner","canonical_url":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#blogposting","name":"Robo \u2013 Modern Task Runner for PHP - Leonid Mamchenkov","headline":"Robo &#8211; Modern Task Runner for PHP","author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/robo-500x239.png","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#articleImage"},"datePublished":"2016-11-20T18:43:51+02:00","dateModified":"2016-11-20T18:43:51+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#webpage"},"isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#webpage"},"articleSection":"All, Linux, Programming, Sysadmin, Technology, deployment, PHP, web development"},{"@type":"BreadcrumbList","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","position":1,"name":"Home","item":"https:\/\/mamchenkov.net\/wordpress","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","position":2,"name":"Technology","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/linux\/#listItem","name":"Linux"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/linux\/#listItem","position":3,"name":"Linux","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/linux\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#listItem","name":"Robo &#8211; Modern Task Runner for PHP"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#listItem","position":4,"name":"Robo &#8211; Modern Task Runner for PHP","previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/linux\/#listItem","name":"Linux"}}]},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/#person","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author","url":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"WebPage","@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#webpage","url":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/","name":"Robo \u2013 Modern Task Runner for PHP - Leonid Mamchenkov","description":"There is a whole lot of ways to build and deploy web applications these days. I've done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/#breadcrumblist"},"author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"creator":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"datePublished":"2016-11-20T18:43:51+02:00","dateModified":"2016-11-20T18:43:51+02:00"},{"@type":"WebSite","@id":"https:\/\/mamchenkov.net\/wordpress\/#website","url":"https:\/\/mamchenkov.net\/wordpress\/","name":"Blog of Leonid Mamchenkov","description":"Life, universe, and everything else","inLanguage":"en-US","publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"}}]},"og:locale":"en_US","og:site_name":"Leonid Mamchenkov - Life, universe, and everything else","og:type":"article","og:title":"Robo \u2013 Modern Task Runner for PHP - Leonid Mamchenkov","og:description":"There is a whole lot of ways to build and deploy web applications these days. I've done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner","og:url":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/","og:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:secure_url":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:width":1024,"og:image:height":1024,"article:published_time":"2016-11-20T16:43:51+00:00","article:modified_time":"2016-11-20T16:43:51+00:00","article:publisher":"https:\/\/www.facebook.com\/MamchenkovBlog","twitter:card":"summary_large_image","twitter:site":"@mamchenkov","twitter:title":"Robo \u2013 Modern Task Runner for PHP - Leonid Mamchenkov","twitter:description":"There is a whole lot of ways to build and deploy web applications these days. I've done my own circle of trials and errors and have some very strong opinions on which ones are good, which ones are bad, and which ones are ugly. My most recent discovery was Robo - a modern task runner","twitter:creator":"@mamchenkov","twitter:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg"},"aioseo_meta_data":{"post_id":"26912","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2023-07-19 10:00:21","updated":"2026-01-15 12:26:46","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/\" title=\"Technology\">Technology<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/linux\/\" title=\"Linux\">Linux<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tRobo \u2013 Modern Task Runner for PHP\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/mamchenkov.net\/wordpress"},{"label":"Technology","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/"},{"label":"Linux","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/linux\/"},{"label":"Robo &#8211; Modern Task Runner for PHP","link":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/20\/robo-modern-task-runner-for-php\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":29204,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/01\/09\/grumphp-php-quality-control-tool\/","url_meta":{"origin":26912,"position":0},"title":"GrumPHP &#8211; PHP quality control tool","author":"Leonid Mamchenkov","date":"January 9, 2019","format":false,"excerpt":"GrumPHP is yet another quality control tool for PHP. But unlike a million other - PHPUnit, PHP CodeSniffer, and the like - this one is more of a tying knot. GrumPHP integrates via git hooks. It runs one more of the other tools, making sure that the changes you are\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/01\/grumphp-grumpy.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":21758,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/05\/07\/pomander-automate-and-deploy-applications-with-php\/","url_meta":{"origin":26912,"position":1},"title":"Pomander &#8211; automate and deploy applications with PHP","author":"Leonid Mamchenkov","date":"May 7, 2014","format":"link","excerpt":"Pomander - automate and deploy applications with PHP","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":15018,"url":"https:\/\/mamchenkov.net\/wordpress\/2011\/06\/03\/pagoda-box-scalable-platform-for-your-php-application\/","url_meta":{"origin":26912,"position":2},"title":"Pagoda Box &#8211; scalable platform for your PHP application","author":"Leonid Mamchenkov","date":"June 3, 2011","format":false,"excerpt":"I got my hands on a private beta of Pagoda Box. \u00a0It is a platform that you can deploy your PHP applications to. \u00a0 I gave it a brief look around and I have to say it's pretty sweet. Right after you register and get access to your dashboard, you\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2011\/06\/pagodabox-500x313.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":22402,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/08\/19\/phake-php-task-management-software\/","url_meta":{"origin":26912,"position":3},"title":"Phake &#8211; PHP task management software","author":"Leonid Mamchenkov","date":"August 19, 2014","format":"link","excerpt":"Phake - PHP task management software. \u00a0This Phake is a clone of Ruby's rake, not to be confused with Phake - PHP Mocking Framework. \u00a0Think Phing, not PHPUnit. \u00a0Use Phake for process automation such as, for example, project deployment.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27844,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/08\/14\/secure-headers-a-php-library-for-easier-management-of-browser-security-features\/","url_meta":{"origin":26912,"position":4},"title":"Secure Headers &#8211; a PHP library for easier management of browser security features","author":"Leonid Mamchenkov","date":"August 14, 2017","format":false,"excerpt":"Modern browsers offer a variety of security mechanisms for web developers. \u00a0Unfortunately, some of these aren't so easy to manage. \u00a0One needs a deep understanding of the functionality as well as theory behind. \u00a0Secure Headers is a library that makes all that work a lot easier for PHP developers. \u00a0Here\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27105,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/12\/11\/php-static-analysis-tool-discover-bugs-in-your-code-without-running-it\/","url_meta":{"origin":26912,"position":5},"title":"PHP Static Analysis Tool &#8211; discover bugs in your code without running it!","author":"Leonid Mamchenkov","date":"December 11, 2016","format":false,"excerpt":"Ond\u0159ej Mirtes shares the idea behind the creation of\u00a0PHPStan - a static analysis tool for PHP: Compiled languages need to know about the type of every variable, return type of every method etc. before the program runs. This is why the compiler needs to make sure that the program is\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/26912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=26912"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/26912\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=26912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=26912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=26912"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=26912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}