Skip to content
Home
Docs/Dev Browser

Dev Browser

The Dev Browser shows your web pages full screen, on your device's system WebView, with seven DevTools panels (Console, Network, Storage, Elements, CSS, Perf and Audit), 21 device profiles, history, bookmarks and screenshots. It works the same on Free and Pro.

What it is and how to open it

It is a full-screen window that covers everything, the bottom navigation bar included. It has an address bar on top, your page below and, when you ask for it, a DevTools panel. There is one single page view: no tabs, no private mode and no pop-up windows. The editor calls it DevBrowser; on the Editor page its button is described as Open in browser.

Ways to open it

Where you areWhat you tapAddress it opens
The Editor page (the one with your file tabs)The globe icon in the header. It has no visible text: screen readers call it Open in browser. It appears only with an HTML, CSS, JavaScript or TypeScript file open (not an external file), and it stays greyed out until the project's local server is running.http://localhost:<port>/<path of the open file>, with the port the server really got
The full-screen editorThe globe icon (DevBrowser) in the top bar, on any file except Markdown and external files.http://localhost:<port>/<path of the file in the project>, with the port of the local server that is running
The editor's menu or command paletteOpen in DevBrowser, in the Tools section under the Run group (or search for it), on any file except Markdown.http://localhost:<port>/<path of the file in the project>, with the port of the local server that is running
The Run panel of the editor, after you run an .html fileThe Open in DevBrowser chipThe same address on the local server: the file:// path that the runner prints is turned into http://localhost:<port>/<path of the file in the project>
The globe icon of the full-screen editor, the Open in DevBrowser command and the Run panel chip ask the app which port the local server really got (from 8765 to 8774), so they reach your files even if something else holds 8765. If no local server is running yet they fall back to 8765, where nothing answers: open the project on the Editor page first, because that is what starts the server.

The local server behind the preview

  • Opening a project on the Editor page starts a small HTTP server for its folder by itself; there is no button to start or stop it. It takes the first free port from 8765 to 8774 and listens only on 127.0.0.1.
  • It is a static server: it sends the files of your project, the index.html of a folder or a folder listing, with Cache-Control: no-cache, no-store, must-revalidate, and it never runs server code.
  • Every request needs the server's credential. The Dev Browser adds it for you, so your pages load; anything else that reaches the server gets 401 Unauthorized.
  • Your own files load without a connection. Whatever your page asks from the Internet (CDN scripts, fonts, APIs) still needs one.

How the window behaves

  • There is no close button and no keyboard shortcut. Use the system back gesture or button: it goes back through the page's history first and closes the Dev Browser only when there is none left.
  • Closing it doesn't lose your place. Opening it again with the same address brings the page back and keeps the console. Opening a different address starts with an empty console, network, storage, DOM, CSS, metrics and audit; your device profile, whether DevTools is shown, the history and the bookmarks stay.
  • Rotating the device keeps the DevTools tab, the open dialogs and the split between page and panel. In landscape the status bar hides; swipe to bring it back.
  • The DevTools panel starts hidden.

You can't, and why

  • Open it from the Tools sheet, the global command palette, Home, Settings or a deep link: it is a tool of the editor, not a module of its own.By design
  • Have several pages open: there are no tabs, no private mode and no pop-up windows.By design

Screen map

One row per screen, panel and dialog of the Dev Browser. Each one is explained in the sections below.

ScreenHow you get thereWhat you can do
Address barAlways at the top.Type an address or a search, reload or stop, open DevTools, open the menu.
Browser menuBrowser menu (⋮) in the address bar.Back, forward, find, screenshots, device, history, bookmarks, system browser, clear cache.
Find in pageMenu → Find in page.Search the text of the page and jump between matches.
The pageBelow the address bar.Use the page, pinch to zoom, pick files for uploads, copy load errors.
Device ProfilesMenu → Device Profile.Emulate the size and User-Agent of a phone, tablet or desktop; rotate it.
History and BookmarksMenu → History or Bookmarks.Reopen pages, delete bookmarks, clear the history.
Add BookmarkMenu → Add Bookmark.Save the current page with an editable title and address.
Clear CacheMenu → Clear Cache.Clear the cache, cookies and site storage after confirming.
ScreenshotsMenu → Take Screenshot or Screenshot (full page).Save a PNG of the visible page or of the whole page.
DevTools panelThe </> button (DevTools).Show or hide the seven panels and resize them.
ConsoleDevTools → Console.Read and filter the page's messages, run JavaScript.
NetworkDevTools → Network.See the page's requests with status, size and duration; open a request's detail.
StorageDevTools → Storage.See, copy and delete localStorage, sessionStorage and cookies.
ElementsDevTools → Elements.Read the DOM tree, pick an element on the page, copy its selector, highlight it.
CSSDevTools → CSS.Apply your own CSS to the page and read the page's rules.
PerfDevTools → Perf.Read load times, Core Web Vitals and page statistics.
AuditDevTools → Audit.Run PocketCode's local quality check (47 tests in five categories).
Automatic reloadNothing to tap.The page reloads when the AI agent writes a file that affects it.
AI agent toolsAI Chat.The agent opens, reads, clicks, types in, audits and captures the open page.

Browse a page

The address bar is always at the top and the page fills the rest of the window. Everything else is in the Browser menu.

Address bar

Tap the address chip to edit it. The chip shows the address without https://, http://, www. or the final /, with a lock for HTTPS pages and a globe for the rest. A progress bar under it fills as the page loads, with a real percentage when the page reports one.

You can

  • Type an address or a search in Search or enter URL and press the keyboard's Go key; the X (Cancel) stops editing.
  • Reload with Reload; while a page is loading the same button becomes Stop.
  • Open or close the DevTools panel with the </> button (DevTools). A red badge counts the errors in the console and stops counting at 99+.
  • Open the Browser menu (⋮).

You can't, and why

  • Load file://, content://, data:, javascript:, intent:, mailto: or tel: addresses: typed in the bar, they turn into a Google search.By design
  • Choose another search engine: text that isn't an address is always searched on Google.By design
  • Open plain http:// addresses on your local network (for example http://192.168.1.20): the app's network policy only allows unencrypted HTTP to localhost, 127.0.0.1 and 10.0.2.2. Use HTTPS or a tunnel.Needs network

What happens to what you type

You typeThe Dev Browser loads
http://… or https://…The address as typed.
Any other scheme (file://, data:, javascript:, mailto:…)A Google search for the text.
localhost…, an IPv4 address or host:portThe same text with http:// in front.
Text with a dot, such as example.comThe same text with https:// in front.
Anything elseA Google search (https://www.google.com/search?q=…).

Browser menu

The ⋮ button opens it. These are its 11 items, in this order.

ItemWhat it does
BackGoes back in the page's history. Greyed out when there is nowhere to go.
ForwardGoes forward in the page's history. Greyed out when there is nowhere to go.
Find in pageOpens the search bar under the address bar.
Take ScreenshotSaves the visible part of the page as a PNG.
Screenshot (full page)Saves the whole page as one PNG.
Device ProfileOpens the device picker.
HistoryOpens the list of pages you visited.
BookmarksOpens your bookmarks.
Add BookmarkSaves the current page as a bookmark.
Open in system browserOpens the current address in your default browser. Only for http and https; if it can't be opened, the address shows in a red toast.
Clear CacheClears the cache, cookies and site storage, after you confirm.

Find in page

Opens under the address bar when you pick Find in page in the menu.

You can

  • Type the text in Find in page: it searches as you type, marks the matches in the page and shows how many there are.
  • Jump to the next or the previous match with Next match and Previous match; the keyboard's Search key also goes to the next one.
  • Close it with Close; that clears the search.

You can't, and why

—

The page

The page runs in the system WebView, with JavaScript and DOM storage on.

You can

  • Use the page as usual: scroll, tap, type and pinch to zoom.
  • Pick files for a file upload field with the system file picker.
  • See the page's own alert and confirm dialogs.
  • Read load errors in a red toast you can copy: the WebView's own message, HTTP <code> <reason> when the page itself answers with 400 or above, or WebView render process crashed. Reload the page. A crash of the page's render process doesn't close PocketCode.

You can't, and why

  • Follow links with other schemes (tel:, mailto:, intent:, file:…): they are ignored, with no message.By design
  • Load HTTP content inside an HTTPS page (mixed content).By design
  • Continue past an invalid TLS certificate, sign in with HTTP basic authentication or present a client certificate: the request is cancelled. Only the system's certificate authorities are trusted.By design
  • Let a page use the camera, the microphone or your location: they are always denied, and the Console shows a Warning.By design
  • Download files inside the app: a download link opens in the system browser.By design
  • Open pop-up windows.By design

Device and viewport

Pick a device to see how a page looks and behaves at that size. A profile changes only two things: the viewport size and the User-Agent the page receives.

  • The page view takes the profile's width and height in CSS pixels. If that doesn't fit on screen, it is scaled down visually (touches are scaled too), like Chrome's device mode.
  • The long side of the viewport never goes above 1,600 CSS pixels: bigger profiles keep their proportions inside that limit (Desktop 4K, for example, shows at 1600 × 900).
  • The User-Agent matches the family: Safari on iOS for the iPhone and iPad profiles, Chrome on Android for the Android phones and tablets, Chrome on Windows or Mac for the desktops.
  • The pixel ratio shown next to each size (such as 2.625x) is only text: it isn't applied to the page.
  • Picking a profile reloads the page when one is loaded. Responsive removes the fixed size, so the page fills the area, but it keeps a Chrome-on-Android User-Agent. Before you pick anything there is no emulation at all.

You can

  • Open Device Profile in the menu. The dialog is titled Device Profiles and opens on the group of your current profile.
  • Switch between Mobile, Tablet and Desktop.
  • Pick Responsive (Adapts to container size) or one of the 21 profiles; the active one is marked with a check (screen readers read Selected).
  • Rotate a mobile or tablet profile by 90° with Rotate device; the dialog closes.

You can't, and why

  • Rotate a desktop profile.By design
  • Go above 1,600 CSS pixels on the long side, whatever the profile: it would make the page unresponsive.By design

The 21 profiles

GroupProfiles (CSS pixels)
Mobile (7, rotatable)iPhone 15 Pro 393×852 · iPhone 15 Pro Max 430×932 · iPhone SE 375×667 · Google Pixel 8 412×915 · Google Pixel 8 Pro 448×998 · Samsung Galaxy S24 360×780 · Samsung Galaxy S24 Ultra 412×915
Tablet (6, rotatable)iPad Pro 11" 834×1194 · iPad Pro 13" 1024×1366 · iPad Air 820×1180 · iPad Mini 744×1133 · Google Pixel Tablet 1080×1920 · Samsung Galaxy Tab S9 1600×2560
Desktop (8, not rotatable)Desktop 1080p 1920×1080 · Desktop 1440p (2K) 2560×1440 · Desktop 4K 3840×2160 · Laptop (1366x768) · MacBook Pro 14" 1512×982 · MacBook Pro 16" 1728×1117 · iMac 24" 2240×1260 · Ultrawide (3440x1440)

The DevTools panel

Tap the </> button (DevTools) in the address bar to show or hide the panel. It starts hidden.

  • In portrait the panel sits below the page; in landscape (when the screen is wider than it is tall) it sits to the right.
  • Drag the handle between the page and the panel to resize it: the page keeps between 25 % and 80 % of the space, 55 % by default.
  • There are seven tabs. Only the selected one shows its name, so that all of them fit.
  • Storage, Elements, CSS and Perf read the page again every time you select them, as long as a page is loaded. Network completes the timings of the requests when you open it. Audit only runs when you tap Run Audit.
  • In Network, Storage and Elements, the detail of a row opens below the list, inside the panel, so the page stays visible. It has a title, optional tabs, some actions and Close, and it scrolls when it is long.

The seven tabs

TabWhat it shows
ConsoleWhat the page logs, plus a line to run JavaScript.
NetworkThe requests the page makes, with status, size and duration.
StorageThe page's localStorage, sessionStorage and cookies.
ElementsThe DOM tree, with an element picker.
CSSA CSS editor and the page's own rules.
PerfLoad times, Core Web Vitals and page statistics.
AuditA local quality check with 47 tests.

You can't, and why

  • Set breakpoints, attach Chrome's remote DevTools (chrome://inspect), use browser extensions, or inspect IndexedDB, Cache Storage, service workers and the web manifest: the engine is the system WebView, the app doesn't turn on remote debugging, and these seven panels are all there is.Device

Console

Shows the page's console.* messages with their level and text and, when the page gives them, the time, the file and the line. It also shows a few warnings from the app: denied permissions, a storage read problem and automatic reload.

You can

  • Filter by level with the four chips (error, warning, info, debug). Each shows its count; tap it again to remove the filter. There is no chip for plain console.log: you see those when no filter is on. The number on the right is how many messages are listed.
  • Empty the console with the trash icon (Clear).
  • Run JavaScript in the page's main frame: type it in Evaluate JavaScript… and tap Run. The command and its result (cut at 2,000 characters) are added as ordinary messages, so the filters apply to them.
  • Bring back earlier commands with Previous command: it cycles through them and never repeats the same command twice in a row.
  • Copy a message by pressing and holding its text.
  • New messages scroll into view only if you were already at the end of the list.

You can't, and why

  • See more than the last 1,000 messages: older ones are dropped. Navigating doesn't empty the console, but opening the Dev Browser on a different address does.By design

Network

A list of the requests the page makes, each with a letter for its type (D document, C stylesheet, J script, I image, F font or fetch, X XHR, M media, ? other), its file name, status, size, duration and a bar that compares its duration with the slowest one. A summary reads listed/total · KB · average ms. The list is observed: each request is noted as the WebView makes it, without blocking or changing it, and its status, duration, size and real type are filled in afterwards from error callbacks and from the page's Resource Timing data, read when a page finishes loading and when you open the tab. The only requests the app makes itself are those to the project's local server, to add its credential.

You can

  • Filter by type with the chips All, Doc, CSS, JS, XHR (it includes fetch) and Img. Those words are always in English.
  • Tap a request to open its detail below the list, with three tabs: General (url, method, status, size, time, duration and error), Request Headers (the headers the WebView hands over) and Response Headers.
  • Empty the list with the trash icon (Clear).

You can't, and why

  • See request or response bodies, response headers or the MIME type: the Response Headers tab always shows None, because nothing fills those fields yet.Not yet
  • Break a request into DNS, TLS and waiting phases: each request has one bar, because the WebView doesn't provide those timings.Device
  • Keep the list from one page to the next: it is emptied on every navigation of the main page (only the new document stays) and holds at most 1,000 requests.By design
  • Count on a status for every successful request: it comes from the page's Resource Timing data, and when the WebView doesn't report it the column shows a dash. Error statuses (400 and above) always show.Device

Storage

Shows the page's localStorage, sessionStorage and cookies in three sections (LOCAL STORAGE, SESSION STORAGE and COOKIES), each with its count, plus an overall n items counter. It reads the page when you open the tab and with Refresh. It is for looking, copying and deleting; to create or change a value, run JavaScript in the Console.

You can

  • Tap a row to open its full key and value in the detail below the list.
  • Tap Copy to copy the value (Copied to clipboard confirms it).
  • Tap Delete to remove that single key.
  • Empty a whole section with the red clear icon next to its title (Clear).
  • When the page has nothing, the panel says No storage data and suggests trying a site like google.com.

You can't, and why

  • See HttpOnly cookies or the attributes of a cookie (domain, expiry, Secure, SameSite): the panel reads document.cookie, which hides them from page scripts.By design
  • Delete a cookie that was set for another path or domain: deleting a cookie expires it with path=/.By design

Elements

A read-only tree of the page's DOM, coloured with your code theme. Each row shows <tag id class …>, the text of leaf nodes and the number of children (child / children). It opens with <html> expanded and its children too, except <head>; tap a row to expand or collapse it. The header counts the nodes. It is a snapshot, read when you open the tab or tap Refresh DOM: it doesn't update by itself, and you can't edit nodes or read computed styles and events here.

You can

  • Tap the selector icon (Select an element on the page), then tap anything on the page. The header says Tap an element on the page; your next tap picks the element without activating it (no link is followed and no form is sent), and the tree opens at that element, highlights it on the page and opens its detail below the list. If the element is deeper than the snapshot goes, it picks the deepest ancestor that is there.
  • Read the snapshot again with Refresh DOM.
  • Open a node's detail with its (i) icon (Entry details): its <tag>, its CSS selector and its id, class, attributes and text.
  • Tap Copy selector to copy a positional selector such as html > :nth-child(2) > :nth-child(1); it uses positions, not ids or classes.
  • Tap Highlight on page to outline the element in orange and scroll it to the centre. The outline stays until you highlight another node or reload.
  • When nothing is loaded, the panel says No DOM tree and Load a page and tap refresh.

You can't, and why

  • See the whole DOM: the snapshot stops at depth 10, 100 children per node (a … +N more node stands for the rest), 20 attributes per element, 500 characters of text and 200 characters per attribute value. It only holds elements (no comments) and it doesn't look inside iframes or Shadow DOM.By design

CSS

A small editor that applies CSS to the open page, and a list of the page's own rules. The CSS lives only in the page: the panel never writes to your project files, so copy what you like into your stylesheet.

You can

  • Write CSS in the editor (Editor) and tap Apply CSS: it creates, or updates, a <style> element with the id pocket-css-inject in the page.
  • Remove what you applied with Clear (it is enabled only while something is applied).
  • The last CSS you applied is applied again after every load, reload and navigation, even to another site, until you tap Clear. It is lost when you open the Dev Browser on a different address.
  • Switch to Rules (n) to read the page's rules: the selector, the number of properties, the first three and where it comes from (the address of the stylesheet or inline). Tap a rule to copy its declarations into the editor; applying them then overrides the original instead of editing it in place.
  • When there is nothing to list, the panel says No CSS rules detected.

You can't, and why

  • See more than 200 rules, rules inside @media, @supports or @keyframes, or stylesheets the browser doesn't let a page read: only top-level rules are listed, and unreadable sheets are skipped without a message.By design

Perf

Load times and page statistics, read from the page's Performance API. Tap Refresh to read them again. It doesn't profile the CPU or JavaScript and it has no throttling.

You can

  • Read the cards under CORE WEB VITALS: First Paint (FP), First Contentful Paint (FCP), DOM Content Loaded (DCL) and Page Load always; Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS) and Total Blocking Time (TBT) when their value is above zero. Each card is coloured good, needs work or poor against fixed thresholds (for example LCP 2,500 and 4,000 ms, CLS 0.1 and 0.25, TBT 200 and 600 ms).
  • Read PAGE STATISTICS: DOM Nodes, Resources and, when the WebView exposes them, JS Heap and Transferred.
  • Read the RESOURCE WATERFALL (n): up to 50 resources with their type, the last 30 characters of the name and the duration.
  • Tap Record: it reads the metrics again every 1.5 seconds until you tap Stop. It doesn't record a trace; it is a live refresh.

You can't, and why

  • See the LCP, CLS and TBT cards when the WebView doesn't report them: they only appear when their value is above zero. The JS heap and the transferred size likewise depend on what the WebView exposes.Device

Audit

A local estimate, not Lighthouse. PocketCode runs its own set of 47 checks as JavaScript inside the page. Each check scores from 0 to 1 against fixed thresholds, and the score of a category is the average of its checks times 100. There is no Lighthouse, no mobile or network emulation and no trace. The check names, the gauge labels and the words passed, warnings and failed are always in English.

You can

  • Tap Run Audit (it reads Auditing… while it runs). The audit only runs when you tap the button. Before the first run the panel says Run an audit to analyze page quality and Checks Performance, Accessibility, Best Practices, SEO and PWA.
  • Read five gauges from 0 to 100 (Perf, A11y, BP, SEO and PWA; green from 90, orange from 50), the audited address and how long the audit took in milliseconds.
  • Read the summary (N passed, N warnings, N failed) and filter with the chips All (n), passed, warnings and failed. A check passes at 0.9 or more, is a warning from 0.5 up to 0.9 and fails below 0.5.
  • Fold the categories and open a check to read its detail (up to 8 lines).
  • Tap the button again, now in the top bar, to measure again.

You can't, and why

  • Get scores comparable to Lighthouse or PageSpeed Insights: these are PocketCode's own estimates, and some checks only look at a sample of the page (DOM depth reads the first 150 elements, font size 100 and tap targets 50).By design
  • Inspect a service worker: the check only detects whether one controls the page.By design

The 47 checks

CategoryChecks
Performance (12)First Contentful Paint · Largest Contentful Paint · Page Load Time · Time to First Byte · DOM Size · Maximum DOM Depth · Render-Blocking Resources · Minified JavaScript · Properly Sized Images · Resource Count · Total Transfer Size · Long Resource Loads
Accessibility (11)Image Alt Text · HTML lang Attribute · Document Title · Button Accessible Names · Link Accessible Names · Form Input Labels · Heading Hierarchy · Valid ARIA Roles · Tab Index Values · Landmark Regions · Valid List Structure
Best practices (9)HTTPS · Viewport Meta Tag · Document Type · Character Encoding · No Deprecated HTML · Safe Cross-Origin Links · Responsive Images · Image Aspect Ratio · No Mixed Content
SEO (9)Page Title · Meta Description · H1 Heading · Canonical URL · Structured Data · Robots Directives · Crawlable Links · Legible Font Sizes · Tap Target Size
PWA (6)Service Worker · Web App Manifest · HTTPS Required · Theme Color · Apple Touch Icon · App Icons

History, bookmarks and site data

History, bookmarks and the cache dialog all start from the Browser menu.

History and Bookmarks

History and Bookmarks open the same dialog, on one tab or the other. Its title is the name of the active tab, and it has a Close button. The history keeps the last 100 pages, newest first; a page you reload in a row only updates its title. The app stores up to 200 bookmarks and never repeats an address. Both are kept on the device between sessions.

You can

  • Switch between the History and Bookmarks tabs.
  • Tap an entry to open its address (it follows the same rules as the address bar) and close the dialog.
  • Delete one bookmark with its trash icon (Delete).
  • Delete the whole history with the red sweep icon (Clear), shown only on the history tab when there are entries. It asks for no confirmation.
  • When a list is empty it says No history entries yet. Browse a few pages. or No bookmarks yet. Add one from the menu.

You can't, and why

  • Keep more than 100 history entries or 200 bookmarks.By design

Add Bookmark

The dialog opens from Add Bookmark in the menu.

You can

  • Edit Title, filled with the page's title (or its address), and URL, filled with the current address.
  • Tap Save, which stays disabled while either field is empty, or Cancel. Bookmark added appears even if that address was already saved; it isn't saved twice.

You can't, and why

—

Clear Cache

The dialog asks: This will clear all cached data including cookies and storage. Continue?

You can

  • Tap Confirm or Cancel.
  • On confirming, it clears the WebView's HTTP cache; the localStorage, the sessionStorage, the cookies visible to JavaScript and the IndexedDB databases of the open page's site; and all the cookies of the app's WebView, not only this site's. Then the Storage panel refreshes and Site data cleared appears.
  • It keeps your browsing history: neither the page's back and forward history nor the History list is cleared.

You can't, and why

  • Clear the data of just one site: the cookie wipe covers every site the app's WebView knows.By design

Screenshots

Two actions in the menu: Take Screenshot and Screenshot (full page). Both save a PNG named screenshot_<milliseconds>.png in Pictures/PocketCode/Screenshots, so it shows in your gallery, and answer Screenshot saved (the full-page one adds its size, like (1080x4200)).

You can

  • Take Screenshot saves what the page view shows. If its long side is over 4,096 px, it is scaled down in proportion.
  • Screenshot (full page) first scrolls down the page in up to 12 jumps of about 90 % of the screen, so that lazy-loaded content appears; then it draws the whole document, trims the empty bottom, and brings you back to where you were. It captures at up to 2× density.

You can't, and why

  • Capture a very tall page without a notice: the full-page canvas is sized at 1.45 times the measured height and capped at 20,000 px tall and 64 MB. When that size goes over the cap, the notice ends with [truncated at 5 tiles], even if the whole page fits. Despite the wording, the cutoff is that height and memory cap, not a count of tiles.Device
  • Save to the gallery on Android 9, the minimum version: there the PNG goes to the app's own folder (…/files/Pictures/PocketCode/Screenshots). From Android 10 on it goes to the gallery.Device

Automatic reload

When the AI agent writes a file in your project, the page reloads by itself if the open page is that file, or the index.html of its folder, or if the open page is on localhost, 127.0.0.1 or [::1] and the file is a static one (.html, .htm, .css, .js, .mjs, .json, .svg, .png, .jpg, .jpeg, .gif, .webp, .woff, .woff2). The Console logs a line that starts with Live Reload: and ends with actualizado (that wording is always in Spanish).

You can

  • Ask the AI agent in AI Chat to edit your page while the Dev Browser is open on it, and watch the page reload.
  • Reload by hand at any time with Reload.

You can't, and why

  • Make the page reload when you save a file yourself in the editor, or switch automatic reload on or off: only writes by the AI agent trigger it.Not yet

The AI agent and the Dev Browser

The AI agent in AI Chat has 19 tools that drive the Dev Browser. They only work while the Dev Browser is open: otherwise they answer Dev Browser is not open. Ask the user to open the Dev Browser, then call this tool again.

GroupTools
Open pages (2)browser_navigate (http, https or about; it waits for the page to start and to finish loading, up to 5 s and 10 s) · browser_nav_action (BACK, FORWARD or RELOAD)
Read the page (7)browser_get_page_info · browser_get_elements · browser_get_console_logs · browser_get_network · browser_get_storage (it reads the live page, with the tab closed too) · browser_get_performance · browser_find_text
Act on the page (4)browser_click_element · browser_input_text · browser_scroll · browser_wait_for (a selector, a text or network idle; from 500 to 15,000 ms)
Audit and capture (2)browser_run_lighthouse_audit (the same local check as Audit) · browser_screenshot
Device, storage and script (4)browser_set_device · browser_clear_storage · browser_set_cookie · browser_evaluate_js

You can

  • Ask the agent to open your page, read its console and requests, click and type to walk through a flow, take a screenshot or run the audit.
  • Close the Dev Browser to stop the agent from reaching the page.

You can't, and why

  • Use the tools with the Dev Browser closed.By design
  • Run a script longer than 32,768 characters or for longer than 15 seconds, or use a selector longer than 512 characters.By design
  • Set an HttpOnly cookie: browser_set_cookie writes through document.cookie.By design

Free and Pro

The Dev Browser has no plan limits: Free and Pro get exactly the same panels, history and capture. Its only caps are technical, they are listed under Limitations, and they are the same for everyone.

Privacy and security

What the Dev Browser keeps, where, and what it can reach.

  • History and bookmarks stay on your device, in the app's private storage (SharedPreferences, a JSON text, not encrypted). No part of the app's sync code reads them, so Cloud Sync doesn't carry them. The history keeps the full addresses.
  • Signing out wipes it. Signing out of PocketCode clears the WebView's cookies, storage and cache together with the Dev Browser's history and bookmarks, because the WebView is shared by every account.
  • It is one browser for the whole app. The WebView shares its cookies with the rest of the app, so a site you sign in to here stays signed in until you sign out of PocketCode or use Clear Cache, which removes all the WebView's cookies.
  • Permissions. A page's requests for the camera, the microphone and your location are always denied.
  • No files. The page view can't read files from the device, mixed content is blocked and Google's Safe Browsing is on.
  • The local server listens only on 127.0.0.1 and refuses any request without its credential; the Dev Browser adds the credential itself.
  • What it adds to a page. Performance observers (window.__pcPerf), the CSS you apply (a <style> element with the id pocket-css-inject), the frame of the element picker and a highlight class. It registers no addJavascriptInterface bridge, so pages get no access to objects of the app.
  • The AI agent can read and act on the open page while the Dev Browser is open: run JavaScript, click, type, clear storage and set cookies.

Limitations

The main limits of the Dev Browser, each with its reason. The sections above list the rest.

  • The engine is your device's system WebView, so its version, and data such as performance.memory or the status of successful responses, depend on it. There are no extensions and no remote debugging.Device
  • Pages on the Internet need a connection; only the project's local server works without one.Needs network
  • Plain HTTP is only allowed to localhost, 127.0.0.1 and 10.0.2.2. For a server on your local network, use HTTPS or a tunnel.Needs network
  • Invalid TLS certificates, HTTP basic authentication and client certificates are refused, and only the system's certificate authorities are trusted.By design
  • An address typed in the bar must be http or https; anything else becomes a Google search, and the search engine can't be changed.By design
  • There is one page view: no tabs, no private mode, no pop-up windows and no downloads inside the app.By design
  • Mixed content, the camera, the microphone and the location are blocked.By design
  • There is no close button and no keyboard shortcut: you leave with the system back gesture, after the page's history is used up.By design
  • A device profile changes the viewport size, capped at 1,600 CSS pixels on the long side, and the User-Agent. Nothing else is emulated.By design
  • The Network panel shows no bodies, response headers or MIME types, and the Response Headers tab always says None.Not yet
  • Audit is PocketCode's own local estimate of 47 checks, not Lighthouse, and its texts are always in English.By design
  • Automatic reload only reacts to files written by the AI agent, not to what you save by hand.Not yet
  • With no local server running, the globe icon of the full-screen editor, Open in DevBrowser and the Run panel chip fall back to port 8765, where nothing answers: the project's workspace starts the server when you open the project on the Editor page.Not yet
  • Screenshots are bound by memory: 4,096 px for the visible part, 20,000 px and 64 MB for a full page, and on Android 9 they go to the app's own folder.Device

Troubleshooting

The messages below are the real ones the app shows. Where a message comes from the local server or from the AI agent's tools, its language is fixed.

The globe icon in the Editor header is greyed out, or missing

It only appears when the open file is HTML, CSS, JavaScript or TypeScript (and not an external file), and it stays greyed out until the project's local server is running. The server starts by itself when the Editor page opens a project, so give it a moment.

My page doesn't load from the editor's globe icon, from Open in DevBrowser or from the Run panel chip

They use the port of the local server that is running (from 8765 to 8774). If none is running yet, they fall back to http://localhost:8765/…, where nothing answers. Open the project on the Editor page, which starts the server, wait a moment and try again.

The page says 404 and Archivo no encontrado: <path>

That page comes from the project's local server, and its text is always in Spanish. There is no file at that path in the project it serves: check the path and the file name.

401 Unauthorized

The local server answers this to any request that arrives without its credential. The Dev Browser adds the credential itself, so you only see it if the same address is opened in another app or browser.

403 Forbidden: Acceso denegado

The address points outside the project folder (for example with ../), and the server refuses it. Keep the path inside the project.

A red toast that reads HTTP <code> <reason>

The page's main document answered with an error status, 400 or above (for example HTTP 404 Not Found). Images, scripts and API calls that fail don't raise a toast; look for them in Network, where an error status shows in red.

WebView render process crashed. Reload the page.

The render process of the page stopped. PocketCode stays open: tap Reload.

A red toast with another message, and the page doesn't load

It is the WebView's own error text for the main document, for example when the server can't be reached or the name can't be resolved. Check the address and your connection. Remember that plain HTTP to a local-network address is blocked (see Limitations).

Unable to capture screenshot

There is no page view yet to capture. Wait for a page to appear and try again.

Failed to capture screenshot

The page couldn't be drawn into an image, for example because a very large page ran out of memory. Try Take Screenshot (the visible part) instead of the full page.

Failed to capture WebView bitmap

The visible part couldn't be turned into an image: the page view had no size yet, or memory ran out. Try again once the page is on screen.

Failed to save screenshot

The image was drawn but the PNG couldn't be written to the gallery (or to the app's folder on Android 9). Check that the device has free storage and try again.

The notice after a full-page screenshot ends with truncated at 5 tiles

The capture canvas (the page's height plus a 45 % safety margin) went over the budget of 20,000 px tall and 64 MB. With a very tall page the image stops where the budget ran out; with a shorter one it may already hold the whole page, so look at its end. Despite the wording, the cutoff isn't a count of tiles. For a very tall page, scroll to the part you need and use Take Screenshot.

Unable to clear site data

There is no page view yet. Open a page first and use Clear Cache again.

No network activity

The list is emptied on every navigation of the main page and only holds the requests made since. Reload the page with the Network tab open to see them again.

No storage data

The page has no localStorage, sessionStorage or cookies (HttpOnly cookies are not visible). The panel suggests trying a site like google.com.

No DOM tree and Load a page and tap refresh

Elements shows a snapshot, read when you open the tab or tap Refresh DOM. Load a page, then refresh.

No CSS rules detected

The panel lists the top-level rules of the stylesheets that the page lets it read. A page whose rules are all inside @media, or whose stylesheets come from another site, can show none.

Audit failed: Audit script returned no data

The audit script returned nothing, for example when no page is loaded. Load a page, wait for it to finish and tap Run Audit again.

The console shows Permission denied by Dev Browser: <resource> or Geolocation denied by Dev Browser for origin: <origin>

The page asked for the camera, the microphone or your location. The Dev Browser always denies them and leaves a Warning so that you know why the request failed.

The page doesn't reload when I save in the editor

Automatic reload only happens when the AI agent writes the file. Saving by hand doesn't trigger it: tap Reload.

Dev Browser is not open. Ask the user to open the Dev Browser, then call this tool again.

This is what a browser_* tool of the AI agent answers when the Dev Browser is closed. Open the Dev Browser on your page and ask the agent to try again.