You shipped it. It got slow.
Your assistant has already guessed twice.

Try Boosthis free for 7 days

Eyes for your AI

it got slow

Something you built is taking too long, or hangs, or quietly got worse this week — and you can describe it but not read it.

guess 1 · guess 2

Whatever is writing your code has changed a couple of things and made it worse, because nothing it can see tells it what your app is actually doing.

the fix

Boosthis measures the running app, names the screen or route that is bad and how bad it is, and hands over the written fix for that exact problem — to you, and to the assistant doing the typing.

A drawing of the headline, not a reading.

Built for the person shipping a real product that was largely written by a coding agent, and for the small team whose phone app and back end each blame the other for being slow. It drops into JavaScript / TypeScript, Python, Java, Go, PHP, C# / .NET, Ruby, Dart (Flutter), Swift, Kotlin (Android), Rust or Elixir — in phone apps, browser pages, back-end servers, Bun and edge functions. If you already have a performance specialist and a stack you trust, this is probably not for you.

The languages you write

JavaScript / TypeScript Python Java Go PHP C# / .NET Ruby Dart (Flutter) Swift Kotlin (Android) Rust Elixir

…and the places that code runs

Phone apps Browser pages Back-end servers Bun Edge functions
// React Native — one hook, instant ratings
// Your AI adds the kit once a project key is connected
 
export default function HomeScreen() {
  useBoosthis("Home");
  // per-screen ratings + on-device issue detection
}

Example project

Home screen 86 Good

It never reads your source code and never sends a full web address: route and screen names are normalised before anything is uploaded. A project sends nothing until its kit starts with your project key. That install step turns sharing on, full timings included, and the Full telemetry switch on your dashboard turns the full timings off again (the edge kit has a single mode and ignores it).


Every screen and route rated, worst first, fix attached

This is the shape of it a day after a kit goes in: the things you shipped, each with a score and a plain verdict, and the worst one carrying the written fix it belongs to. Your assistant reads the same thing you do.

Example project Screens and routes, worst first
  • /orders/:id 47 Poor
  • Checkout screen 68 Needs work
  • Home screen 86 Good
you shipped it guess 1 guess 2 the fix

/orders/:id 47 Poor

  • Measures the running app
  • Names the screen or route that is bad, and how bad it is
  • Hands over the written fix for that exact problem

The fix filed against /orders/:id

What is happening. The route assembles the whole answer before it sends any of it, so the customer waits for the slowest part of a page they can already mostly see.

What to change. Answer with the part that is ready, and fill the rest in behind it.

How you will know it worked. The same route stops rating poor, and stays out of it across a day of real traffic.

An example, written for this page. It is not a reading from anybody's project, not a live view, and not a window taken off one of our own long-running machines — a worst hour of ours is not a typical hour of yours, and showing it as one would be the same lie in the other direction. Your own numbers live behind your sign-in and are published nowhere.

Figures this page works out for itself

121
teams outside Boosthis with it reporting from their apps
Last 30 days, as of 20 October 2026. A minimum: it counts accounts, never installs or projects, and leaves out our own and any we cannot tell apart from ours.
12
languages covered
Counted off the kits we actually serve, not a roadmap.
5
places that code runs
A language is what you write; a place is where it ends up.
16
separate things you can install
One download per kit — take only the ones your project spans.

Our own availability is measured from outside Boosthis, by a watcher that is nothing to do with our servers — but it is not a figure this page can work out as it renders, and a stale percentage is worse than none, so it is not printed here. The watcher's reading is on the status page, good news or not.


Twelve languages, in the five places they run

Two different questions, kept apart on purpose. What you write is a language: JavaScript / TypeScript, Python, Java, Go, PHP, C# / .NET, Ruby, Dart (Flutter), Swift, Kotlin (Android), Rust and Elixir. Where it runs is a place — phone apps, browser pages, back-end servers, Bun and edge functions — and the same JavaScript can run in every one of them. That is why fifteen toolkits cover twelve languages, and why there are sixteen separate things you can install.

Three things are genuinely identical everywhere: the scoring model and its shared budgets, the strict PII guard on everything a kit sends, and the AI tool surface your assistant reads. How much a runtime can measure is not identical — a browser has no garbage collector to inspect, Rust has no runtime to ask, an edge isolate is gone between requests — so the fullest kits take 96 readings and the newest take 25. The plans page lists what each runtime can measure, row by row and generated from the kits themselves; find yours there before you choose a plan.

Not sure what your project spans?

There is a one-command scanner that answers it for you, with no account and no key: it walks the folder, reads the names and contents of the files that list your dependencies, and tells you which kits the project needs and where they go. It never reads your source code, sends nothing anywhere, and makes no network call of its own — the answer is printed in your own terminal.

Phone apps

The iOS and Android apps people install — React Native, Flutter, Swift (Apple) and Android (Kotlin). Here Boosthis reads how long the first screen takes to appear, how long until it answers a tap, how long that tap then waits, and how steady the screen stays afterwards.

React Native performance toolkit

Requirements: React Native 0.76.0 or newer; React 18.2.0 or newer.

Read more

Drop useBoosthis("ScreenName") into any screen for instant, on-device performance ratings — every screen measured, and regressions caught early. A built-in dashboard tab shows the full meter page inside your own app, and your AI assistant can read the same numbers.

Flutter performance toolkit

Requirements: Dart 3.0.0 or newer (below 4.0.0); Flutter 3.10.0 or newer.

Read more

One line — BoosthisFlutter.runApp in main(), in place of Flutter's own — rates every screen against the same shared budgets, straight from the engine's own frame timings. Catches what actually slows Flutter apps down, from raster-vs-build jank and frozen frames to image-cache weight and memory growth.

Swift (Apple) performance toolkit

Requirements: Swift toolchain 5.5 or newer; iOS 14 or newer; tvOS 14 or newer; macOS 11 or newer.

Read more

One line — BoosthisApple.start at launch — rates every screen of a native iOS, iPadOS, macOS, tvOS or visionOS app against the same shared budgets, straight from the app's own run loop and MetricKit. Catches what actually slows native Apple apps down, from unresponsive hangs and scroll hitches to memory headroom before jetsam.

Android (Kotlin) performance toolkit

Requirements: Android API level 24 (minSdk 24); Kotlin compiler 2.0.21 (lowest tested; no floor declared).

Read more

One line at launch rates every screen of a native Android app against the same shared budgets, straight from the app's own frame timing and the ART runtime. Catches what actually slows Android apps down, from frozen frames and app hangs to GC pauses, thermal throttling and cold-start cost.

Browser pages

Anything a person opens in a browser tab — Web (browser). Here Boosthis reads INP — how long a page takes to respond after someone clicks — and the rest of the Core Web Vitals, page by page.

Web (browser) performance toolkit

Requirements: Chromium 140.0.7339.16 (lowest tested; no floor declared).

Read more

Call startWebVitals() once at page load for real browser Web Vitals per page — INP for how quickly the page answers a click, plus the rest of the Core Web Vitals — rated against the same shared budgets. Catches the browser-specific problems that hurt real visitors, with a concrete fix for each.

Back-end servers

The services your app calls — Node.js / Express, Python, Java, Go, PHP, C# / .NET, Ruby, Rust and Elixir. Here Boosthis reads how long each route takes to answer, and what the runtime was busy doing while it took that long.

Node.js / Express performance toolkit

Requirements: Node.js 24.13.0 (lowest tested; no floor declared).

Read more

Add the boosthis() Express middleware — or attach() on any other Node server — and optionally mount(app) for the live /_boosthis/ page. Catches the runtime-specific problems that actually slow Node services down, with a concrete fix for each.

Python performance toolkit

Requirements: Python 3.10 or newer.

Read more

Add @track_perf("route") to any function. One extra line — boosthis.mount(app) — mounts a live dashboard at /_boosthis/ on your existing Flask or FastAPI port. Run boosthis serve without a web app for the same dashboard at localhost:7787. Catches the problems that actually slow Python services down, with a concrete fix for each.

Java performance toolkit

Requirements: Java (OpenJDK) 19.0.2 (lowest tested; no floor declared).

Read more

Wrap any com.sun.net.httpserver handler with BoosthisHandler, or any framework route with the generic Wrap helper, for per-route ratings against the same shared budgets. Catches the problems that actually slow JVM services down — with a concrete fix for each, zero dependencies, JDK stdlib only.

Go performance toolkit

Requirements: Go 1.25.0 or newer.

Read more

Wrap any http.Handler with boosthis.Middleware for per-route ratings against the same shared budgets. Catches the problems that actually slow Go services down — with a concrete fix for each, zero dependencies, pure stdlib.

PHP performance toolkit

Requirements: PHP 8.1 or newer.

Read more

One line — \Boosthis\Boosthis::start() in your front controller, or the ready-made Laravel / PSR-15 middleware — rates every route against the same shared budgets. Catches what actually slows PHP-FPM sites down, from OPcache and memory limits to realpath cache pressure, with a concrete fix for each and no extensions required.

C# / .NET performance toolkit

Requirements: .NET 8.0 (lowest tested; no floor declared).

Read more

One line — app.UseBoosthis() in your ASP.NET Core pipeline, or Boosthis.Start() anywhere else — rates every route against the same shared budgets. Catches what actually slows .NET services down, from GC pauses and heap headroom to thread-pool starvation, with a concrete fix for each and not one NuGet package to install.

Ruby performance toolkit

Requirements: Ruby 3.0 or newer.

Read more

One line — Boosthis.start, or the ready-made Rails Railtie / Rack middleware — rates every route against the same shared budgets. Catches what actually slows Rails and Rack apps down, from GC pressure and memory headroom to slow outbound calls, with a concrete fix for each.

Rust performance toolkit

Requirements: Rust 1.88 or newer.

Read more

One layer — boosthis::middleware for axum or actix-web — rates every route against the same shared budgets. Catches what actually slows tokio services down, from blocking calls on an async worker to task backlog and connection churn, with a core that pulls in nothing but std.

Elixir performance toolkit

Requirements: Elixir 1.14 or newer (below 2.0).

Read more

One plug — Boosthis.Plug in your Phoenix endpoint — rates every route against the same shared budgets, and reads what only the BEAM can tell you: scheduler utilisation, run-queue backlog, reductions, per-process message queues and ETS growth. Zero dependencies — it runs on OTP alone.

Bun

The same back-end kit, on Bun's own engine instead of Node's. Here Boosthis reads the same per-route timings as a Node.js server, minus the few readings Bun's engine does not expose.

Bun performance toolkit

Requirements: Bun 1.3.6 (lowest tested; no floor declared).

Read more

Bun runs the back-end kit's own files on Bun's engine instead of Node's — the same boosthis() middleware, the same /_boosthis/ page, and its own recipe on your Setup page. It registers under its own name so your dashboard can say plainly which readings Bun's engine does not expose, rather than showing them as blanks on a Node project.

Edge functions

Code that runs at the edge, close to whoever asked for it. It runs on Cloudflare Workers, Deno Deploy, Deno, Supabase Edge Functions, Vercel Edge Functions and Netlify Edge Functions. Here Boosthis reads how long each request spends inside the isolate — which is as much as something that stops existing between requests can know.

Edge functions performance toolkit

Requirements: workerd (the Cloudflare Workers runtime) 1.20260825.1; Deno 2 (lowest tested; no floor declared).

Read more

Wrap a Cloudflare Worker or a standard request handler to measure reliability, access pressure, cookie safety and cold starts where the host allows it. It needs neither Node.js nor a filesystem. It adds no page and no bubble to the function on purpose — its numbers appear on your Boosthis dashboard instead.


One comparable score across every runtime

Every runtime is rated against the same shared budgets and distilled into a single 0–100 score, so you can compare performance across RN screens, Python routes, and Node.js handlers side-by-side — no per-tool guesswork.

Shared budgets
Every runtime
Same bar everywhere
One score
0–100
Good · needs-work · poor
Per screen & route
Rated
Down to each interaction

Measuring and rating happen where your code runs. Nothing is uploaded until the kit starts with your project key, the install step that turns sharing on; from then it sends the timings, the issue labels and the screen or route name — normalised, so it is a label like /orders/:id and never a real address. A new project sends its full timings from the start, and the Full telemetry switch on your dashboard turns them off (the edge kit has a single mode and ignores it).

A sleeping host is not a slow app

Serverless and scale-to-zero hosting puts your service to sleep between visitors, and the first request after it wakes looks like a long freeze that your code never caused. Boosthis recognises those wake-ups on server runtimes, sets the affected moments aside, and says so plainly on the meter instead of scoring them against you. A genuine stall still rates red.


AI-ready

Detection runs entirely on-device; clear fix guidance is delivered inside your dashboard and AI tools exactly when an issue is detected.

  1. Drop in one hook or decorator

    React Native: useBoosthis("ScreenName"). Python: @track_perf("route"). Node.js: app.use(boosthis()). One line per screen or route, and your project key connects it.

  2. Get instant ratings and issue detection

    Each kit takes the measurements its own place can actually take — INP and the Core Web Vitals in a browser, first-screen and tap timings in a phone app, per-route timings on a server — rates them against the same shared budgets, and detects known problems as it goes. What each place measures is listed above.

  3. Connect your AI assistant

    Connect your AI assistant so it can read the full live meter page, per-screen diagnosis, session summary and fix suggestions — for the projects you connect, and nothing else. How to connect your AI.


The same mistake, not written twice

Fixing it once is not the end of it. The next time your coding agent touches that part of the app it writes the same thing again, because nothing it reads before it starts knows what went wrong last time.

A block for the file your agent already reads

Boosthis writes a short block of house rules for AGENTS.md — the standing-instructions file a coding agent reads before it writes anything. You copy it in; it is your repository, not ours.

Only what happened in your project

Every line comes from something Boosthis measured in your own app, with your own evidence beside it. Nothing from anyone else's project goes in it: no averages, no "apps like yours", and no fix text — that stays on the page it belongs to, and the block links there.

It expires on purpose

A rule that has stopped being true is worse than none, so the block is stamped with the day it was generated, and a problem your project no longer reports drops out of the next copy.


A score is where it starts, not where it ends

Finding the slow thing is half the job. This is what Boosthis does with it afterwards.

A written fix for every issue

Every problem a kit reports is tied to a fix in the Boosthis library: what causes it, what to change, and how to tell it worked. Your AI assistant reads the same library, so it works from that written fix instead of inventing one — what it changes in your code is still its suggestion and your call.

Crash reports

When something throws where a kit can see it, the crash is filed with your project — through the same privacy guard as every other payload. The kit never takes your app down with it: a failure inside Boosthis can only ever silence Boosthis.

Alerts when something gets worse

Boosthis watches your projects between visits and emails you when a screen or route turns bad, when a fixed one comes back, or when a project that was reporting goes quiet. Muting an alert silences the email, never the measurement — and the page says how much a mute is hiding.

A month in review

Once a month, a written summary per project: what got faster, what got slower, and what was not measured at all. A month with no data is reported as a month with no data, never drawn as a good one.

Tracing across the stack

On the plans that include it, one request can be followed from the screen a person tapped, through the services behind it, and back — so a slow screen is blamed on the part that was actually slow. Available in 15 of 15 runtimes.

Somewhere to look when it matters

Every project has a dashboard with its meters, its issues and its history; and 7 of 15 kits — Node.js / Express, Python, Java, Go, PHP, C# / .NET and Ruby — can serve that same page inside your own app as well. Our own uptime is on the status page, whether it is good news or not.


Three things you have already tried, and what each one cannot tell you

Most people reading this already have something in place, and all three of these are good at the job they were built for. None of them answers the question you are actually stuck on.

An error tracker

It tells you what broke, and it is the right tool for that. But slow is not an error: the route that takes six seconds and the screen that stutters never throw anything, so they never reach it.

A one-off audit score

One run, on one machine, on one network — usually against the pages a stranger can reach. It cannot open the signed-in screen your customers spend their day in, it says nothing about your server, and it has never seen your phone app at all.

Asking your assistant to have a look

It reads the code, not the running app. With no measurements it reasons about what the code could do rather than what it does do, which is why the second guess is so often worse than the first.

What Boosthis adds is the input all three are missing: readings taken inside the app while real people use it, tied to the screen or route they came from, in a form your assistant can read — and each problem arrives with a written fix rather than an opinion.


Simple plans, monthly or yearly

Choose monthly or yearly below, where a year costs 10 months, and the price you see is the final amount charged — inclusive of any applicable taxes, with no hidden fees. Enterprise is priced by arrangement. Charged in Saudi Riyal (SAR): the SAR figure shown is the exact amount taken from your card. The dollar figure is an approximate conversion at the fixed rate of SAR 3.75 to $1, and your own bank converts at its own rate, which may include a fee. Major cards are accepted. You choose your plan when your free trial ends, or during it if you would rather subscribe straight away.

Try Boosthis free for 7 days. It is the whole Team plan, every feature switched on: up to 6 projects, up to 7 people and 12,000 AI credits. No card and no payment details: confirm your email with the 6-digit code we send you, and the trial starts as soon as you enter it. On day 7 the trial ends and nothing is charged — subscribe whenever you like to carry on. Your projects, keys and everything already measured stay exactly as they are, whether you subscribe or not. Subscribe during the trial and you keep the free days you have left: you pay the ordinary price once, and the month you have paid for starts the day the trial would have ended. You get an email when the trial starts, one a few days in, and one when it ends. End the trial whenever you like — one click, and nothing is ever charged for it. One free trial per account and per confirmed email address.

Pro

$35/month$349/year
SAR 131 chargedSAR 1310 chargedSave $70 (SAR 262)

Where most projects should start. For a developer who wants the whole picture of their project.

  • 2 projects
  • 1 person (just you)
  • Connect as many AI tools as you like
  • 4,000 AI credits/month (about 250 typical questions)
  • 30 days of project history — how far the day-by-day chart and Ask Boosthis can both look back
  • Every kit included — twelve languages, coverage differs by runtime

Team

$70/month$701/year
SAR 263 chargedSAR 2630 chargedSave $140 (SAR 526)

For when more than one person is responsible for the same project.

  • 6 projects
  • 7 people in your workspace
  • Connect as many AI tools as you like
  • 12,000 AI credits/month (about 750 typical questions)
  • 120 days of project history — how far the day-by-day chart and Ask Boosthis can both look back
  • Every kit included — twelve languages, coverage differs by runtime
  • Stepping up: SAR 37.57 a person once the seats are full (Pro: SAR 131), and every riyal buys 45 AI credits (Pro: 30).

Plans renew automatically — monthly plans each month, yearly plans each year — until cancelled. Cancel anytime: you keep your plan until the end of the period you have paid for, and a lapsed plan never deletes your data. Fees are prepaid for the period you chose and non-refundable except where the law requires — full details in the Refund & Cancellation Policy.


Privacy-first by design

Boosthis is built to keep sensitive data inside your app rather than filter it afterwards. Measuring and rating happen inside your own process, and a project uploads nothing until its kit starts with your project key: that install step is what turns sharing on. Read the full policy in our Privacy Policy.

Read more

From then on, three things go to your dashboard: the timings, the issue labels, and the normalised name of the screen or route they belong to. A new project shares its full timings from the start; the Full telemetry switch on your dashboard turns them off from the app's next launch (the edge kit has a single mode and ignores it), and a build without the key sends nothing at all. Your source code, request and response bodies, cookies and session data are never collected. Reading something inside your process and collecting it are two different things. The one exception is the AI-call meter: to tell repeated prompts apart it reads up to the first 4,096 characters of an outbound request body to an AI provider, inside your own process, and reduces it immediately to a single number — no body text is stored, uploaded or recoverable. Nine other bounded reads work the same way — the token counts a provider states in its reply, which kind of refusal a provider's error reply is, a stack trace or a secret about to reach one of your users, an error-shaped JSON answer returned with a 200, the method name in a tool-call request your app serves, the query and body of an outgoing call, folded into one number, the flags on the cookies your app sets, a fixed list of named headers and the query of the kit's own upload URLs — each reduced on the spot to a number, a flag or a label from a fixed list, and each set out with its own limit in the Privacy Policy. One bounded read is not a reduction at all — the HTML page the dashboard bubble is written into — held only long enough for the one script tag to be written in, then handed back with nothing taken from it. One read is neither narrowed to a label from a fixed list nor limited in length — the query on requests to the kit's own read endpoints — used as the caller wrote it to pick which of the kit's own rows come back, then dropped with the reply. One bounded read does not stay inside your process — the trace id and span id another instrumented service already put on the request — each adopted only when it is exactly the shape the kits mint, then carried onward or uploaded with that request's timings so one action across your services reads as one. Two reads send what they hold to Boosthis — the owner link's one key, boosthis, in a page's address; and the kit's own two owner cookies — and what is sent is only a credential Boosthis itself issued, returned to be checked on a call of its own, never inside an upload. One read is neither bounded nor reduced to a number, and you ask for it yourself: the code you post to the kit's own rule matcher. Apart from the trace id and span id another instrumented service already put on the request, the owner link's one key, boosthis, in a page's address and the kit's own two owner cookies, none of what is read here is stored, uploaded or recoverable from what is uploaded, and the guard on the upload path refuses outright any payload carrying a request or response body, a header, a cookie or a query value — and those ids are uploaded as fields of their own, never as the header they arrived in, and the owner proof and pass go to Boosthis on calls of their own, never inside an upload.

A strict PII denylist on every outbound path

Every payload — issue signals, fix resolutions, perf snapshots — passes a shared PII guard that checks both field names and values before anything leaves the process. Touch coordinates are transient and never written to a recorded event. Route labels are normalized and redacted if they match email, UUID, JWT, IP, or phone patterns. It is a best-effort defence against the identifier and secret shapes we know, not a guarantee that every identifier you invent will be caught.


Questions people ask before they pay

What does it cost?

Plans run from about $35 to $70 a month (SAR 131 to SAR 263 charged), or about $349 to $701 a year (SAR 1310 to SAR 2630 charged) — a year costs 10 months. The price you see is the final amount charged, inclusive of any applicable taxes, with no hidden fees. Enterprise is tailored to enterprise needs and priced by arrangement. Every plan covers every language, every place your code runs and every reading; what changes between them is how many projects and people they hold, and how much AI use a month includes — the plans, side by side.

What happens when the free trial ends?

On day 7 the trial ends and nothing is charged — subscribe whenever you like to carry on. Your projects, keys and everything already measured stay exactly as they are, whether you subscribe or not.

Is my stack covered?

Boosthis covers JavaScript / TypeScript, Python, Java, Go, PHP, C# / .NET, Ruby, Dart (Flutter), Swift, Kotlin (Android), Rust and Elixir, in phone apps, browser pages, back-end servers, Bun and edge functions. What each one can measure is not identical and cannot be — a browser page cannot be asked what a server can — so the plans page carries a table, generated from the kits themselves, of what your runtime actually reads. Check yours there before you pay. If you are not sure what your project even spans, the scanner answers that without an account.

What leaves my app?

Nothing at all until the kit starts with your project key: that install step is what turns sharing on, and there is no separate switch to flip later. From then on, three things: the timings, the issue labels, and the normalised name of the screen or route they belong to — a label like /orders/:id, never a real address. Your source code, request and response bodies, cookies and session data are never collected. The full list is in the Privacy Policy.

What happens if I stop paying?

You keep your plan to the end of the period you have already paid for. After that the projects on it are frozen rather than emptied: they stop reporting, the dashboard says why, and everything already measured stays where it is — a lapsed plan never deletes your data, and paying again turns it straight back on. Fees are prepaid for the period you chose and non-refundable except where the law requires — Refund & Cancellation Policy.

Do I have to connect an AI assistant to get anything out of it?

No. The meters, the issues, the written fixes and the alerts are all in your dashboard and work on their own. Connecting an assistant is optional, covers the projects you connect and nothing else, and exists so the thing writing your code can read your real numbers instead of guessing at them. Your assistant can look, never change a setting, a key, a measurement or a rule. What it can add is its own word: a note of a change it made or plans to make, a promise you asked it to remember, or a report of how it fixed a crash, for a person at Boosthis to review. Each is kept apart from what Boosthis measured.

Setup questions — getting a kit into your project, connecting an assistant, what one particular kit can measure — are answered in the help centre, and are not repeated here.


Point it at the screen that is already annoying you

Create an account, confirm your email, drop the kit into the project, and let it watch real traffic for a day. Then you have what the rest of this page describes: the worst screen or route named and rated, the written fix beside it, and the same numbers in front of whatever is writing your code. Want the detail first? Compare the plans, or read how it goes in over at the help centre.

Try Boosthis free for 7 days