{"version":"2.1.267","anchor":"new-in-process-plugin-ui-surface-runtime-boxtextbutton","canonical_anchor":"new-in-process-plugin-ui-surface-runtime-boxtextbutton","heading":"New in-process plugin UI \"surface\" runtime (Box\/Text\/Button\/Input\/Select\/Link\/Code)","tier":"use","area":"Plugin UI","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.267\/e\/new-in-process-plugin-ui-surface-runtime-boxtextbutton","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.267","markdown":"### New in-process plugin UI \"surface\" runtime (Box\/Text\/Button\/Input\/Select\/Link\/Code)\n\nPlugins get a sandboxed UI toolkit with Box, Text, Button, Input, Select, Link, and Code elements\n\n**What**\n\nA new system lets plugins build interactive UI \"surfaces\" that run inside an isolated Node.js sandbox (a vm context, meaning the plugin's code runs separately from the main app for safety). It provides a fixed set of building blocks: `Box`, `Text`, `Button`, `Input`, `Select`, `Link`, and `Code`, along with state management, timers, and handlers for pointer and keyboard events. Whatever UI tree the plugin builds gets converted to plain JSON before it's sent to the host application, and is limited by strict budgets on node count, nesting depth, character length, and value size.\n\n**Why**\n\nThis gives plugin developers a safe, constrained way to build rich interactive interfaces without letting plugin code run unchecked in the main application or send oversized data back to it.\n\n- Area: Plugin UI\n- Names: `Box`, `Text`, `Button`, `Input`, `Select`\n- Tier: Use it now\n- Useful: 4\/5\n- Signal: 4\/5"}