{"id":19003,"date":"2025-12-24T11:30:42","date_gmt":"2025-12-24T16:30:42","guid":{"rendered":"https:\/\/blogs.mathworks.com\/deep-learning\/?p=19003"},"modified":"2025-12-24T12:11:54","modified_gmt":"2025-12-24T17:11:54","slug":"antigravity-plus-matlab-is-wicked-good","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/deep-learning\/2025\/12\/24\/antigravity-plus-matlab-is-wicked-good\/","title":{"rendered":"Antigravity + MATLAB is wicked good"},"content":{"rendered":"<h6><\/h6>\r\nGoogle released a new agentic development environment called <strong>Antigravity<\/strong>. And it works great with MATLAB. (It's wicked as they say in Boston!)\r\n<h6><\/h6>\r\nIf you are looking to defy gravity, here is a fun use case for an app leveraging the power of MATLAB and Antigravity:\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<h6 style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/h6>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-19093\" src=\"https:\/\/blogs.mathworks.com\/deep-learning\/files\/2025\/12\/antigravityMatlabMcpBlog_1.png\" alt=\"\" width=\"800\" height=\"420\" \/><\/div>\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\n<h6><\/h6>\r\nThis article will look at three different components, that were built using Antigravity + MATLAB:\r\n\r\n&nbsp;\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<table style=\"margin: 3px; border: 0.666667px solid #bfbfbf; border-collapse: collapse;\">\r\n<tbody>\r\n<tr style=\"background-color: #f5f5f5;\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Component<\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Description<\/div><\/td>\r\n<\/tr>\r\n<tr style=\"background-color: rgba(0, 0, 0, 0);\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><span style=\"font-weight: bold;\">uihtml + React workflow<\/span><\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Modern web frameworks embedded seamlessly in MATLAB desktop apps<\/div><\/td>\r\n<\/tr>\r\n<tr style=\"background-color: rgba(0, 0, 0, 0);\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><span style=\"font-weight: bold;\">Flight data replay<\/span><\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Post-process and visualize trajectories with <span style=\"font-family: monospace;\">gravityFlightDashboard<\/span><\/div><\/td>\r\n<\/tr>\r\n<tr style=\"background-color: rgba(0, 0, 0, 0);\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><span style=\"font-weight: bold;\">Defying Gravity Toolbox<\/span><\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">A fully-packaged MATLAB app with 3D graphics powered by Three.js<\/div><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<div><\/div>\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<h2>The AI Copy &amp; Paste Problem (Revisited for apps)<\/h2>\r\n<h6><\/h6>\r\nRegular readers will remember the core problem that led us to <a href=\"https:\/\/blogs.mathworks.com\/deep-learning\/2025\/11\/03\/releasing-the-matlab-mcp-core-server-on-github\/\">release the MATLAB MCP Core Server<\/a>: the tedious copy-paste loop between your favorite AI chat and MATLAB. Write code in ChatGPT or Claude, copy it, paste it in MATLAB, get an error, copy the error, paste it back... iterate.\r\n<h6><\/h6>\r\nThe MCP server solved that for MATLAB code. But what about <strong>apps<\/strong>?\r\n<h6><\/h6>\r\nBuilding a MATLAB app with modern 3D graphics used to require deep knowledge of app building in MATLAB, plus OpenGL graphics. Now, with uihtml, you can embed any web technology\u2014React, Three.js, D3.js\u2014directly inside a MATLAB figure. The catch? You need to know web development too.\r\n<h6><\/h6>\r\nThat is where AI agents come in. I described what I wanted in natural language, and Antigravity (with the MATLAB MCP Core Server connected) helped me scaffold the whole thing.\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\n<h2>Connect MATLAB to Antigravity<\/h2>\r\n<h6><\/h6>\r\nLet's start by connecting MATLAB to Antigravity. There are two steps you can take, quite similar to how you would in VSCode (Antigravity is a fork of VSCode):\r\n<ol>\r\n \t<li>Install the MATLAB extension<\/li>\r\n \t<li>Set up the MATLAB MCP Core Server<\/li>\r\n<\/ol>\r\n&nbsp;\r\n<h6><\/h6>\r\nNavigate to the extension side-panel, and search for\u00a0<strong>MATLAB<\/strong>:\r\n<h6><\/h6>\r\n<img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-19100\" src=\"https:\/\/blogs.mathworks.com\/deep-learning\/files\/2025\/12\/antigravity-matlab-extension.png\" alt=\"\" width=\"800\" height=\"406\" \/>\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\nYou will find the MCP Server setup screen in the three dots on the top right of the Agent side panel (slightly different from VSCode).\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-19097\" src=\"https:\/\/blogs.mathworks.com\/deep-learning\/files\/2025\/12\/antigravity-mcp-server-setup.png\" alt=\"\" width=\"800\" height=\"404\" \/>\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\n<h6><\/h6>\r\nOnce your MATLAB is connected to Antigravity, you can ask the following prompt:\r\n<h6><\/h6>\r\n<blockquote>Generate a MATLAB App with 2 windows:\r\nOne web frontend implementing a flight simulator in React and ThreeJS that enables to record the trajectory in a CSV file. This web frontend will be integrated in a MATLAB uihtml component.\r\nThe second window is a dashboard post-processing the trajectories with MATLAB plots. There is a button that enables to open the simulator from this view.<\/blockquote>\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<h2>Testing web frontend before integration in uihtml<\/h2>\r\n<h6><\/h6>\r\nMATLAB Apps can integrate HTML UI components through the use of the function <a href=\"https:\/\/www.mathworks.com\/help\/matlab\/ref\/uihtml.html\">uihtml<\/a>. One great combo is to use the embedded chrome browser in Antigravity to test the interactions of the web frontend before integrating it into your app:\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<div class=\"row\"><div class=\"col-xs-12 containing-block\"><div class=\"bc-outer-container add_margin_20\"><videoplayer><div class=\"video-js-container\"><video data-video-id=\"6386913440112\" data-video-category=\"blog\" data-autostart=\"false\" data-account=\"62009828001\" data-omniture-account=\"mathwgbl\" data-player=\"rJ9XCz2Sx\" data-embed=\"default\" id=\"mathworks-brightcove-player\" class=\"video-js\" controls><\/video><script src=\"\/\/players.brightcove.net\/62009828001\/rJ9XCz2Sx_default\/index.min.js\"><\/script><script>if (typeof(playerLoaded) === 'undefined') {var playerLoaded = false;}(function isVideojsDefined() {if (typeof(videojs) !== 'undefined') {videojs(\"mathworks-brightcove-player\").on('loadedmetadata', function() {playerLoaded = true;});} else {setTimeout(isVideojsDefined, 10);}})();<\/script><\/div><\/videoplayer><\/div><\/div><\/div>\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<h2>Let's Walk Through the Generated Code<\/h2>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<h3>The Main App Entry Point<\/h3>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThe core of <span style=\"font-family: monospace;\">gravityFlightSimulator.m<\/span> is surprisingly simple:\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<div class=\"preformatted-matlab\" style=\"margin: 10px 3px 10px 55px; padding: 10px 10px 10px 5px;\">\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #0e00ff;\">function <\/span>gravityFlightSimulator()<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #008013;\">% Create main figure with appropriate size<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> fig = uifigure(<span style=\"color: #a709f5;\">'Name'<\/span>, <span style=\"color: #a709f5;\">'Defying Gravity'<\/span>, <span style=\"color: #0e00ff;\">...<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #a709f5;\">'Position'<\/span>, [100 100 1200 800], <span style=\"color: #0e00ff;\">...<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #a709f5;\">'Color'<\/span>, [0 0 0], <span style=\"color: #0e00ff;\">...<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #a709f5;\">'AutoResizeChildren'<\/span>, <span style=\"color: #a709f5;\">'off'<\/span>);<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #008013;\">% Get the path to the HTML file and icon<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> appDir = fileparts(mfilename(<span style=\"color: #a709f5;\">'fullpath'<\/span>));<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> htmlFile = fullfile(appDir, <span style=\"color: #a709f5;\">'dist'<\/span>, <span style=\"color: #a709f5;\">'index.html'<\/span>);<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> iconFile = fullfile(appDir, <span style=\"color: #a709f5;\">'dist'<\/span>, <span style=\"color: #a709f5;\">'broom.png'<\/span>);<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #008013;\">% Set the app icon (yes, it's a broom)<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> fig.Icon = iconFile;<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #008013;\">% Create uihtml component filling the entire figure<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> h = uihtml(fig, <span style=\"color: #a709f5;\">'Position'<\/span>, [0 0 fig.Position(3) fig.Position(4)]);<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> h.HTMLSource = htmlFile;<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #008013;\">% Handle figure resize to keep uihtml fullscreen<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"> fig.SizeChangedFcn = @(src, ~) resizeHTML(src, h);<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #0e00ff;\">end<\/span><\/span><\/div>\r\n<\/div>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThat's it. About 20 lines of MATLAB to embed a full 3D flight simulator.\r\n<h6><\/h6>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<h3>The Flight Controls<\/h3>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThe web app (built with React and Three.js) provides the flight physics:\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<table style=\"margin: 3px; border: 0.666667px solid #bfbfbf; border-collapse: collapse;\">\r\n<tbody>\r\n<tr style=\"background-color: #f5f5f5;\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Control<\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Action<\/div><\/td>\r\n<\/tr>\r\n<tr style=\"background-color: rgba(0, 0, 0, 0);\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">W\/S<\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Throttle Up\/Down<\/div><\/td>\r\n<\/tr>\r\n<tr style=\"background-color: rgba(0, 0, 0, 0);\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Up\/Down<\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Pitch Up\/Down<\/div><\/td>\r\n<\/tr>\r\n<tr style=\"background-color: rgba(0, 0, 0, 0);\">\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Left\/Right<\/div><\/td>\r\n<td style=\"border: 0.666667px solid #bfbfbf; vertical-align: top;\">\r\n<div style=\"margin: 2px 10px 2px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: break-spaces; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\">Roll Left\/Right<\/div><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nAnd you can switch between a plane and a witch on a broomstick (hence the icon). Because why not?\r\n<h6 style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/h6>\r\n<div><\/div>\r\n<h6><\/h6>\r\n<h6><\/h6>\r\n<h3>Post-Processing with gravityFlightDashboard<\/h3>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThe app can export flight data to CSV. Then comes the MATLAB part\u2014analyzing trajectories with <span style=\"font-family: monospace;\">gravityFlightDashboard<\/span>:\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<div class=\"preformatted-matlab\" style=\"margin: 10px 3px 10px 55px; padding: 10px 10px 10px 5px;\">\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\">gravityFlightDashboard(<span style=\"color: #a709f5;\">'gravity-flight-2025-12-07.csv'<\/span>)<\/span><\/div>\r\n<\/div>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThis opens a replay dashboard with:\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<ul>\r\n \t<li style=\"margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap;\"><span style=\"font-weight: bold;\">3D trajectory visualization<\/span> with heading arrows<\/li>\r\n \t<li style=\"margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap;\"><span style=\"font-weight: bold;\">Altitude vs. time plot<\/span><\/li>\r\n \t<li style=\"margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap;\"><span style=\"font-weight: bold;\">Play\/Pause\/Reset controls<\/span> with a timeline slider<\/li>\r\n \t<li style=\"margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap;\"><span style=\"font-weight: bold;\">Real-time flight metrics<\/span>: speed, altitude, pitch, roll<\/li>\r\n<\/ul>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<div class=\"preformatted-matlab\" style=\"margin: 10px 3px 10px 55px; padding: 10px 10px 10px 5px;\">\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #008013;\">% The dashboard using MATLAB graphics<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\">plot3(pathAxes, position(:,1), position(:,2), position(:,3), <span style=\"color: #0e00ff;\">...<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #a709f5;\">'Color'<\/span>, [0.7 0.7 0.7], <span style=\"color: #a709f5;\">'LineWidth'<\/span>, 1.25);<\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\">craftMarker = plot3(pathAxes, position(1,1), position(1,2), position(1,3), <span style=\"color: #0e00ff;\">...<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #a709f5;\">'o'<\/span>, <span style=\"color: #a709f5;\">'MarkerFaceColor'<\/span>, [0.95 0.3 0.2], <span style=\"color: #a709f5;\">'MarkerEdgeColor'<\/span>, <span style=\"color: #a709f5;\">'k'<\/span>, <span style=\"color: #0e00ff;\">...<\/span><\/span><\/div>\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\"><span style=\"color: #a709f5;\">'MarkerSize'<\/span>, 8);<\/span><\/div>\r\n<\/div>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThis is the beauty of the hybrid approach: use web tech for the interactive 3D simulation, use MATLAB for post-processing and analysis.\r\n<h6><\/h6>\r\nIf you are interested in more advanced flight data analysis, I recommend you take a look at our <a href=\"https:\/\/www.mathworks.com\/products\/uav.html\">UAV toolbox<\/a>.\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\n<h2>Packaging as a Toolbox<\/h2>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nOne of my favorite parts: you can package this as a proper MATLAB toolbox (<span style=\"font-family: monospace;\">.mltbx<\/span> file) that anyone can install with one click.\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: center;\"><img decoding=\"async\" loading=\"lazy\" width=\"723\" height=\"535\" class=\"size-full wp-image-19103 aligncenter\" src=\"https:\/\/blogs.mathworks.com\/deep-learning\/files\/2025\/12\/toolbox.png\" alt=\"\" \/><\/div>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<h6><\/h6>\r\n&nbsp;\r\n<h6><\/h6>\r\nThe \"Gravity\" toolbox appears right alongside your other add-ons.\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nInstall it like this:\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<div class=\"preformatted-matlab\" style=\"margin: 10px 3px 10px 55px; padding: 10px 10px 10px 5px;\">\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\">matlab.addons.install(<span style=\"color: #a709f5;\">'Gravity.mltbx'<\/span>)<\/span><\/div>\r\n<\/div>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThen just run:\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\n<div class=\"preformatted-matlab\" style=\"margin: 10px 3px 10px 55px; padding: 10px 10px 10px 5px;\">\r\n<div style=\"border-radius: 0px; padding: 0px; line-height: 15.6px; min-height: 16px; white-space: pre; color: #212121; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; border: 0px none #212121;\"><span style=\"white-space: pre;\">gravityApp<\/span><\/div>\r\n<\/div>\r\n<div style=\"margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: #212121; font-family: Helvetica, Arial, sans-serif, Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left;\"><\/div>\r\nThe toolbox bundles everything: the MATLAB code, the web assets, the broom icon. Users don't need to know anything about React or Three.js\u2014they just install and fly.\r\n<h6><\/h6>\r\n&nbsp;\r\n<h2>Calling the Wizard of Apps<\/h2>\r\nFor the next post of this series on<strong> Agentic App Building<\/strong>, I will turn to colleague Pax, who I call the <em>\"Wizard of Apps\"<\/em>:\r\n<h6><\/h6>\r\n<table style=\"background-color: #e2f0ff;\">\r\n<tbody>\r\n<tr>\r\n<td style=\"width: 120px; padding: 3px; vertical-align: middle;\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-19004 size-full\" src=\"https:\/\/blogs.mathworks.com\/deep-learning\/files\/2025\/12\/pax.jpg\" alt=\"\" width=\"200\" height=\"200\" \/><\/td>\r\n<td style=\"vertical-align: middle; padding: 3px;\"><strong>Next episode: <a href=\"https:\/\/www.linkedin.com\/in\/ricardopaxson\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Rick Paxson<\/a><\/strong> aka \"Pax\"\r\n<h6><\/h6>\r\n<h6><\/h6>\r\nRick Paxson is the Director of Computational Biology at MathWorks. He is an experienced programmer and an early adopter of AI assisted coding. I always turned to him for advices on how to best leverage AI in software development.<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<h6><\/h6>\r\n<h6><\/h6>\r\nHe developed some particular <em>\"skills\"<\/em> that he shared with <a href=\"https:\/\/blogs.mathworks.com\/community\/2025\/11\/04\/storyboarding-with-live-script-skills\/\">Ned<\/a> and I to build MATLAB Apps with a web front end. If you are too impatient, you can get a sneak peek into the recipe we will use:\r\n\r\n<a href=\"https:\/\/github.com\/matlab\/skills\/blob\/main\/skills\/matlab-uihtml-app-builder\/SKILL.md\">skills\/skills\/matlab-uihtml-app-builder\/SKILL.md<\/a>\r\n<h6><\/h6>\r\nIn the meantime, I wish you a wicked Christmas\ud83c\udf85\r\n\r\n&nbsp;\r\n<h6><\/h6>\r\n<strong>PS:<\/strong> Check out the code and have fun defying gravity\ud83e\uddf9\r\n<h6><\/h6>\r\n<a href=\"https:\/\/github.com\/mathworks\/MATLAB-AI-Blog\/tree\/main\/antigravity-plus-matlab-is-wicked-good\">MATLAB-AI-Blog\/antigravity-plus-matlab-is-wicked-good at main \u00b7 mathworks\/MATLAB-AI-Blog<\/a>\r\n<h6><\/h6>\r\n&nbsp;","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img decoding=\"async\"  class=\"img-responsive\" src=\"https:\/\/blogs.mathworks.com\/deep-learning\/files\/2025\/12\/antigravityMatlabMcpBlog_1.png\" onError=\"this.style.display ='none';\" \/><\/div><p>\r\nGoogle released a new agentic development environment called Antigravity. And it works great with MATLAB. (It's wicked as they say in Boston!)\r\n\r\nIf you are looking to defy gravity, here is a fun... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/deep-learning\/2025\/12\/24\/antigravity-plus-matlab-is-wicked-good\/\">read more >><\/a><\/p>","protected":false},"author":230,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[74,77],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/posts\/19003"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/users\/230"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/comments?post=19003"}],"version-history":[{"count":11,"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/posts\/19003\/revisions"}],"predecessor-version":[{"id":19109,"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/posts\/19003\/revisions\/19109"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/media?parent=19003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/categories?post=19003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/deep-learning\/wp-json\/wp\/v2\/tags?post=19003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}