<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: veilus browser</title>
    <description>The latest articles on DEV Community by veilus browser (@veilus_browser).</description>
    <link>https://dev.to/veilus_browser</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4176026%2Fcfe2c3f7-aa70-4717-ae09-58962d04cde0.png</url>
      <title>DEV Community: veilus browser</title>
      <link>https://dev.to/veilus_browser</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/veilus_browser"/>
    <language>en</language>
    <item>
      <title>Connect Claude Code to an Anti-Detect Browser over MCP: Setup, Tools and Guardrails</title>
      <dc:creator>veilus browser</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:30:31 +0000</pubDate>
      <link>https://dev.to/veilus_browser/connect-claude-code-to-an-anti-detect-browser-over-mcp-setup-tools-and-guardrails-5cb2</link>
      <guid>https://dev.to/veilus_browser/connect-claude-code-to-an-anti-detect-browser-over-mcp-setup-tools-and-guardrails-5cb2</guid>
      <description>&lt;p&gt;Veilus runs many browser profiles on one computer, each with its own fingerprint, cookies and proxy. It also ships an MCP server, so an AI assistant such as Claude Code can create those profiles, open them, read their pages, write a Playwright script and put it on a schedule. This post covers the setup, what the assistant can and can't do, and why a few things always stay with you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=8NRDNW_4KNU" rel="noopener noreferrer"&gt;Watch the 55-second demo on YouTube&lt;/a&gt;: one sentence in Claude Code, three profiles, a script tested on all three, one approval, then a daily schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Veilus on Windows 10/11 (x64) or macOS on Apple Silicon, from the &lt;a href="https://veilus.io/download/" rel="noopener noreferrer"&gt;download page&lt;/a&gt;, with the engine downloaded under &lt;strong&gt;Settings → Engine &amp;amp; updates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A paid plan or the 7-day Pro trial. The Free plan (5 profiles on one device) does not include the local API and MCP. See &lt;a href="https://docs.veilus.io/reference/plans-and-license/" rel="noopener noreferrer"&gt;plans and license&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;An MCP client: Claude Code, Cursor or Claude Desktop.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Turn on the local API
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;API &amp;amp; MCP&lt;/strong&gt; in the app sidebar and click &lt;strong&gt;Turn on port&lt;/strong&gt;. The port listens only on your own computer. On the same page, create a token. Every MCP call carries it, so treat it like a password.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Connect your client
&lt;/h2&gt;

&lt;p&gt;The Veilus app binary has an &lt;code&gt;mcp&lt;/code&gt; subcommand that speaks MCP over stdio. The &lt;strong&gt;API &amp;amp; MCP&lt;/strong&gt; page shows a ready-made snippet with the real binary path and your token filled in, so copy it from there. For Claude Code it looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--scope&lt;/span&gt; user veilus &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;VEILUS_API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;token&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;path to Veilus&amp;gt;"&lt;/span&gt; mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--scope user&lt;/code&gt; makes Veilus available in every folder you open Claude Code in. For Cursor or Claude Desktop, the snippet goes into the client's MCP config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"veilus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;path to Veilus&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"VEILUS_API_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;token&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3 (Claude Code): add the plugin
&lt;/h2&gt;

&lt;p&gt;Any MCP client can use the tools directly. If you use Claude Code, the Veilus plugin adds four skills that walk through a job step by step and stop at the points where you decide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin marketplace add veilus/claude-plugin
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;veilus@veilus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Claude Code and type &lt;code&gt;/veilus:&lt;/code&gt; to see them: &lt;code&gt;campaign&lt;/code&gt; for the whole job, &lt;code&gt;script&lt;/code&gt; to write and test a script, &lt;code&gt;schedule&lt;/code&gt; to plan a schedule and show it to you as a table before creating it, and &lt;code&gt;run&lt;/code&gt; to run a script now and explain any failures profile by profile. The plugin is &lt;a href="https://github.com/veilus/claude-plugin" rel="noopener noreferrer"&gt;open source on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the assistant can do
&lt;/h2&gt;

&lt;p&gt;As of October 2026 the server has 39 tools. The &lt;a href="https://docs.veilus.io/reference/mcp/" rel="noopener noreferrer"&gt;MCP reference&lt;/a&gt; lists every one with its parameters. They fall into five groups:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Group&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Profiles and proxies&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Create up to 50 profiles in one call, launch and stop them, import proxy lists into a pool, test proxies, assign a pool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The page&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Load a URL in a running profile, read the page as an accessibility snapshot, click and type with real mouse and key events, scroll, wait for an element, attach a file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scripts&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Save a Playwright script into Veilus Flow, read it back, trial-run it and read each profile's output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runs and schedules&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Run an approved script on many profiles, schedule it, turn schedules on or off, list runs, check how many browsers this computer can run at once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datasets&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Tables of per-profile input, such as one account row per profile, that approved scripts read&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The page tools act inside a profile that is already running, with its own fingerprint and logins. The assistant does not start a separate browser of its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  A first request
&lt;/h2&gt;

&lt;p&gt;Describe the job the way you would describe it to a colleague. This is the request from the demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create 3 Veilus profiles named "Demo {n}". Then write a script that opens
https://quotes.toscrape.com/ and prints the first quote and its author.
Test it on those 3 profiles.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The assistant calls &lt;code&gt;create_profiles&lt;/code&gt;, opens one profile, uses &lt;code&gt;navigate&lt;/code&gt; and &lt;code&gt;snapshot&lt;/code&gt; to learn the page, and saves a script with &lt;code&gt;save_script&lt;/code&gt;. Then it trial-runs the script with &lt;code&gt;run_script&lt;/code&gt; on the three profiles and reads each one's output with &lt;code&gt;get_run_result&lt;/code&gt;. If a run fails, it reads the error, fixes the script and saves it again, all before you've looked at anything.&lt;/p&gt;

&lt;p&gt;Scripts follow a fixed contract: they connect to the profile's own browser over CDP instead of launching one, and leave the user agent and viewport alone because those belong to the profile. The &lt;a href="https://docs.veilus.io/recipes/llm-scripts/" rel="noopener noreferrer"&gt;LLM scripts recipe&lt;/a&gt; has the full rules and a minimal correct script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approval stays in the app
&lt;/h2&gt;

&lt;p&gt;A script saved by an assistant is &lt;strong&gt;not approved&lt;/strong&gt;. It can be trial-run on up to 3 profiles, but batch runs and schedules accept only approved scripts. To approve it, open &lt;strong&gt;Veilus Flow&lt;/strong&gt;, where the script carries an &lt;strong&gt;MCP&lt;/strong&gt; badge under &lt;strong&gt;Pending approval&lt;/strong&gt;, read the changes or the full source, and click &lt;strong&gt;Approve this script&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There is no tool for approving. An approved script runs unattended with your profiles and their logins, and it is a normal Node program with your user's permissions, so it gets the review you'd give a pull request. If the assistant saves a new version later, it goes back to pending.&lt;/p&gt;

&lt;p&gt;After that, a second sentence is enough: "I approved it. Schedule it for those 3 profiles every day at 9:00."&lt;/p&gt;

&lt;h2&gt;
  
  
  Other limits on the assistant
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It can create and stop, never delete.&lt;/strong&gt; No tool deletes profiles, proxy pools, scripts or schedules. The assistant can turn a schedule off, which keeps the schedule and its history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Existing proxies aren't overwritten by accident.&lt;/strong&gt; Assigning a pool refuses the whole call if any profile already has a proxy, unless the assistant explicitly forces it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expensive calls are rate-limited.&lt;/strong&gt; Each token can make at most 30 launches, runs, profile creations or proxy imports per 60 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stored secrets reach only approved scripts.&lt;/strong&gt; Profile variables and dataset rows go to approved scripts. A trial run of an unapproved script sees only what was passed to that one call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;evaluate_js&lt;/code&gt; is not a sandbox.&lt;/strong&gt; It runs JavaScript in a logged-in page with that page's rights. Only let an assistant you trust use it on accounts that matter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Schedules run while Veilus is running and the computer is awake. Turn on &lt;strong&gt;Run in background&lt;/strong&gt; in Settings so closing the window sends Veilus to the tray instead of quitting it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://veilus.io/download/" rel="noopener noreferrer"&gt;Download Veilus&lt;/a&gt;, start the 7-day Pro trial in the app, and connect your assistant from the &lt;strong&gt;API &amp;amp; MCP&lt;/strong&gt; page. The &lt;a href="https://veilus.io/features/mcp/" rel="noopener noreferrer"&gt;MCP page&lt;/a&gt; has the overview, and the &lt;a href="https://blog.veilus.io/blog/introducing-veilus/" rel="noopener noreferrer"&gt;first-hour walkthrough&lt;/a&gt; covers profiles and proxies if you're new to Veilus.&lt;/p&gt;

&lt;p&gt;Use Veilus only for accounts you own or manage with permission. See the &lt;a href="https://veilus.io/acceptable-use/" rel="noopener noreferrer"&gt;Acceptable Use Policy&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://blog.veilus.io/blog/claude-code-anti-detect-browser-mcp/" rel="noopener noreferrer"&gt;Veilus blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claudecode</category>
      <category>automation</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introducing Veilus: Your First Hour, From Install to a Scheduled Script</title>
      <dc:creator>veilus browser</dc:creator>
      <pubDate>Sat, 10 Oct 2026 22:03:22 +0000</pubDate>
      <link>https://dev.to/veilus_browser/introducing-veilus-your-first-hour-from-install-to-a-scheduled-script-46al</link>
      <guid>https://dev.to/veilus_browser/introducing-veilus-your-first-hour-from-install-to-a-scheduled-script-46al</guid>
      <description>&lt;p&gt;The &lt;a href="https://veilus.io/" rel="noopener noreferrer"&gt;homepage&lt;/a&gt; says what Veilus is. This post shows what using it looks like: one sitting, from a fresh install to a script that runs on its own every morning. Each step links to the docs page with the full details.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install, then download the engine
&lt;/h2&gt;

&lt;p&gt;Veilus runs on Windows 10 or 11 (x64) and on macOS 13 or later on Apple Silicon. Get the installer from the &lt;a href="https://veilus.io/download/" rel="noopener noreferrer"&gt;download page&lt;/a&gt;. Neither Windows nor macOS recognises the publisher on first launch, so you click through one warning: &lt;strong&gt;More info → Run anyway&lt;/strong&gt; on Windows, &lt;strong&gt;Open Anyway&lt;/strong&gt; in Privacy &amp;amp; Security on macOS. The &lt;a href="https://docs.veilus.io/getting-started/installation/" rel="noopener noreferrer"&gt;installation guide&lt;/a&gt; has the exact steps.&lt;/p&gt;

&lt;p&gt;The installer does not include the browser itself. Open &lt;strong&gt;Settings → Engine &amp;amp; updates&lt;/strong&gt; and click &lt;strong&gt;Download&lt;/strong&gt; next to the version marked &lt;strong&gt;Latest&lt;/strong&gt;. That is Veilus's own build of Chromium, and every profile runs on it. The first engine you download becomes active automatically. &lt;a href="https://docs.veilus.io/engine/chromium/" rel="noopener noreferrer"&gt;More about the engine&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Create your first profile
&lt;/h2&gt;

&lt;p&gt;Click &lt;strong&gt;New profile&lt;/strong&gt;. Pick the operating system the profile should present. It defaults to your computer's own OS, which is the safer choice: a profile for a different OS has to imitate more, so Veilus warns you if you pick one. Then pick a market under &lt;strong&gt;Language &amp;amp; Region&lt;/strong&gt;, or set the language and timezone yourself, and click &lt;strong&gt;Create Profile&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Veilus generates a &lt;a href="https://docs.veilus.io/profiles/fingerprinting/" rel="noopener noreferrer"&gt;fingerprint&lt;/a&gt; that fits the OS you chose. Click the launch button on the profile's row, keep &lt;strong&gt;Browser Only&lt;/strong&gt;, and a browser window opens with that profile's own fingerprint, cookies and storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Give it a proxy
&lt;/h2&gt;

&lt;p&gt;Open the profile's panel and go to the &lt;strong&gt;Network&lt;/strong&gt; tab. For one profile, fill in &lt;strong&gt;Manual Proxy&lt;/strong&gt; (HTTP, SOCKS5 or residential) and click &lt;strong&gt;Test Proxy&lt;/strong&gt;. For many profiles, create a &lt;strong&gt;proxy pool&lt;/strong&gt; from a list and assign it. &lt;a href="https://docs.veilus.io/profiles/proxy/" rel="noopener noreferrer"&gt;Proxy setup&lt;/a&gt; covers both.&lt;/p&gt;

&lt;p&gt;This is the step most people trip over. By default Veilus refuses to launch a profile whose timezone doesn't match where its proxy exits, because a US IP with a Vietnam timezone contradicts itself. With a pool assigned, &lt;strong&gt;Match to proxy&lt;/strong&gt; measures the proxy's real exit and proposes the matching timezone. With a manual proxy, set the &lt;strong&gt;Timezone&lt;/strong&gt; yourself on the Fingerprint tab. Save, and the profile launches.&lt;/p&gt;

&lt;p&gt;To check the result, tick the profile and click &lt;strong&gt;Test&lt;/strong&gt;. Veilus opens it on a set of fingerprinting test sites, and the &lt;strong&gt;Score&lt;/strong&gt; column shows how many passed.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Connect an AI assistant
&lt;/h2&gt;

&lt;p&gt;Everything so far works on the Free plan, which gives you 5 profiles on one device. Automation, schedules and the local API/MCP need a paid plan or the 7-day Pro trial. See &lt;a href="https://docs.veilus.io/reference/plans-and-license/" rel="noopener noreferrer"&gt;plans and license&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;API &amp;amp; MCP&lt;/strong&gt; in the sidebar, click &lt;strong&gt;Turn on port&lt;/strong&gt; (it listens only on your own computer), create a token, and copy the ready-made snippet for Claude Code, Cursor or Claude Desktop. The &lt;a href="https://veilus.io/features/mcp/" rel="noopener noreferrer"&gt;MCP page&lt;/a&gt; shows how the assistant works with Veilus. If you use Claude Code, the Veilus plugin adds skills that walk through the job and stop for your decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Ask for the job in one sentence
&lt;/h2&gt;

&lt;p&gt;Describe the task the way you'd describe it to a colleague: "Open the first profile, go to the login page of our dashboard, write a script that logs in and prints the account name, and test it."&lt;/p&gt;

&lt;p&gt;The assistant opens a real profile, looks at the page, writes a Playwright script and saves it to Veilus Flow. While the script is unapproved, it can trial-run it on up to 3 profiles and read back each profile's output, so it fixes its own mistakes before you look. The &lt;a href="https://docs.veilus.io/recipes/llm-scripts/" rel="noopener noreferrer"&gt;LLM recipe&lt;/a&gt; shows each tool call along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Read it, approve it
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;Veilus Flow&lt;/strong&gt;. The script carries an &lt;strong&gt;MCP&lt;/strong&gt; badge and sits under &lt;strong&gt;Pending approval&lt;/strong&gt;. Read the changes, or the full source, then click &lt;strong&gt;Approve this script&lt;/strong&gt;. This step exists because an approved script runs unattended with your profiles and their logins. Approval happens in the app, never through the assistant. If the assistant saves a new version later, it goes back to pending. &lt;a href="https://docs.veilus.io/automation/scripts/" rel="noopener noreferrer"&gt;More on reviewing scripts&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Put it on a schedule
&lt;/h2&gt;

&lt;p&gt;Ask the assistant to run the approved script every day at 09:00, or create the schedule yourself in the &lt;strong&gt;Schedule&lt;/strong&gt; tab: daily, weekly, every few minutes, a cron expression or a single run. A schedule can target a saved filter instead of a fixed list, so profiles you tag later are included automatically. &lt;a href="https://docs.veilus.io/automation/schedules/" rel="noopener noreferrer"&gt;Schedules&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Schedules run while Veilus is running and the computer is awake. Turn on &lt;strong&gt;Run in background&lt;/strong&gt; in Settings, and closing the window sends Veilus to the tray instead of quitting it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the assistant can't do
&lt;/h2&gt;

&lt;p&gt;A few limits are built in. No tool deletes profiles, proxy pools, scripts or schedules: deleting stays in the app, with you. Values you store on profiles, such as logins, only reach scripts you've approved. And at most 16 profile browsers are open at once, counting everything, so a large run waits for a free slot instead of overloading your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to go next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.veilus.io/getting-started/quickstart/" rel="noopener noreferrer"&gt;Quick start in the docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://veilus.io/pricing/" rel="noopener noreferrer"&gt;Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://t.me/veilusbrowser" rel="noopener noreferrer"&gt;Telegram&lt;/a&gt; for questions, &lt;a href="https://github.com/veilus" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; for bug reports&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://blog.veilus.io/blog/introducing-veilus/" rel="noopener noreferrer"&gt;Veilus blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>automation</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why We Built Veilus with Rust and Tauri</title>
      <dc:creator>veilus browser</dc:creator>
      <pubDate>Sat, 10 Oct 2026 21:59:52 +0000</pubDate>
      <link>https://dev.to/veilus_browser/why-we-built-veilus-with-rust-and-tauri-5074</link>
      <guid>https://dev.to/veilus_browser/why-we-built-veilus-with-rust-and-tauri-5074</guid>
      <description>&lt;p&gt;Veilus opens many browser profiles side by side, each with its own fingerprint and proxy. The desktop app that manages them is built with Tauri 2 and Rust. This post explains why we chose that stack, how the pieces fit together, and what it costs us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Halves: The App and the Engine
&lt;/h2&gt;

&lt;p&gt;Veilus has two parts that are easy to mix up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The app&lt;/strong&gt; is what you install. It lists your profiles, edits their &lt;a href="https://docs.veilus.io/profiles/fingerprinting/" rel="noopener noreferrer"&gt;fingerprints&lt;/a&gt; and proxies, runs &lt;a href="https://docs.veilus.io/automation/overview/" rel="noopener noreferrer"&gt;automation&lt;/a&gt;, and launches browsers. This is the part built with Tauri and Rust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The engine&lt;/strong&gt; is the browser each profile runs in: &lt;a href="https://docs.veilus.io/engine/chromium/" rel="noopener noreferrer"&gt;Veilus's own patched build of Chromium&lt;/a&gt;. The app &lt;a href="https://docs.veilus.io/getting-started/installation/" rel="noopener noreferrer"&gt;downloads it separately&lt;/a&gt; and starts one browser per open profile.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Veilus app: Tauri 2]
  ├── [Interface in the system webview]
  └── [Rust core: profiles, fingerprints, proxies, automation]
        ├── [Profile 1: Veilus's patched Chromium]
        ├── [Profile 2: Veilus's patched Chromium]
        └── [Profile 3: Veilus's patched Chromium]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The engine is Chromium because websites expect a real Chrome-family browser. The app around it had no such constraint, so we could choose the stack we trusted most to stay correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Tauri
&lt;/h2&gt;

&lt;p&gt;Tauri lets us write the interface with ordinary web technology and put everything else in Rust. The interface runs in the webview the operating system already provides — WebView2 on Windows, WKWebView on macOS — so the app does not carry a second browser just to draw its own windows.&lt;/p&gt;

&lt;p&gt;That split suits Veilus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The app and the engine ship separately.&lt;/strong&gt; The installer does not include the browser engine; the app downloads Veilus's patched Chromium itself, so the two can be updated on their own schedules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The state lives in Rust.&lt;/strong&gt; Profiles, schedules and scripts are kept by the Rust core, and the interface reads and changes them through it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One core behind every entry point.&lt;/strong&gt; The local REST API and the MCP server (&lt;code&gt;veilus mcp&lt;/code&gt;) ship in the same Rust program as the interface and call into the same core, so your AI assistant works with the same profiles you see in the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Rust
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Memory Safety Without a Garbage Collector
&lt;/h3&gt;

&lt;p&gt;In safe Rust, the compiler rules out use-after-free bugs and data races before the code ever runs, and it does so without a garbage collector. Veilus handles sensitive data — cookies, credentials, fingerprints — so a whole class of memory bugs that cannot reach users is a security property, not just a technical detail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Concurrency the Compiler Checks
&lt;/h3&gt;

&lt;p&gt;Veilus does many things at once: it launches browsers, watches their processes and runs scheduled scripts across profiles. Rust's type system refuses to compile code that shares data between threads unsafely. It does not prevent every concurrency bug — deadlocks and logic races are still ours to avoid — but in safe Rust a data race is a compile error, not a crash report.&lt;/p&gt;

&lt;h3&gt;
  
  
  SQLite, Directly
&lt;/h3&gt;

&lt;p&gt;Profiles, schedules and scripts are stored in a local SQLite database on your machine. The &lt;code&gt;rusqlite&lt;/code&gt; crate gives the Rust core direct access to it, with no ORM layer in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Trade-offs
&lt;/h2&gt;

&lt;p&gt;Being honest about the downsides:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fewer ready-made parts.&lt;/strong&gt; Tauri's ecosystem is still young, so we write more pieces ourselves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steeper learning curve.&lt;/strong&gt; Rust asks more of whoever writes it, and experienced Rust developers are harder to find.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slower iteration.&lt;/strong&gt; The compiler is strict, so a change that would be quick in JavaScript can take noticeably longer to get past it. In return, many of the bugs it stops would otherwise have shown up in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two webviews to test.&lt;/strong&gt; Tauri draws the interface with the operating system's webview, and those behave slightly differently from one system to the next. Veilus ships for Windows and macOS, so the interface has to hold up in both.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Was It Worth It?
&lt;/h2&gt;

&lt;p&gt;For us, yes. The compiler checks what we would otherwise have to remember, the interface stays ordinary web code, and the browser your profiles run in is still Chromium — patched by us, because that is what websites expect. We'll keep writing about what we learn as Veilus grows.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want to see it for yourself? &lt;a href="https://veilus.io/download" rel="noopener noreferrer"&gt;Download Veilus free&lt;/a&gt; — built with Rust, run with confidence.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://blog.veilus.io/blog/why-we-built-veilus-with-rust/" rel="noopener noreferrer"&gt;Veilus blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>tauri</category>
      <category>desktop</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
