Back to all insights

Weave App Blank Screen on Meraki: A Content-Filtering Fix

A staff member opens the Weave desktop app at the front desk, and nothing happens. Not an error. Not a spinning loader that eventually times out with a message. Just a blank white screen where the login page should be. The app is installed, the internet works, every other program loads fine — and yet Weave never paints a single pixel of its interface. If you have run into this on a practice that sits behind a Cisco Meraki firewall, the cause is almost certainly content filtering, and the fix takes about ninety seconds once you know where to look.

We hit this during a new Weave onboarding at one of our managed dental practices, traced it to root cause the same afternoon, and reported it upstream to Weave as a Weave Ambassador so their onboarding and support teams could get ahead of it. This article is the technical writeup we wish had existed when we started troubleshooting: what is actually happening at the network layer, how to confirm it in a couple of minutes with tools you already have, the exact one-line fix on Meraki, and how to make sure it never bites you on the next install. It is written for the IT partners and practice admins who onboard apps like this for a living — and for anyone bringing Weave onto a filtered network for the first time.

A blank screen with no error is not an application bug. It is the network silently dropping the files the application needs to draw itself.

Why the Weave app shows a blank screen instead of an error

Modern web apps — and the Weave client is one of them — are built as single-page applications (SPAs). When you launch the app, a small shell loads first, and then that shell reaches out to a content delivery network (CDN) to pull down the JavaScript and CSS bundles that contain the actual interface: the login form, the dashboard, the buttons, everything you see. Until those bundles arrive and execute, there is nothing to render. The window is genuinely empty because the code that draws the UI has not loaded yet.

That architecture is fast and normal. But it creates a specific failure mode: if the network lets the shell load but blocks the CDN, the app gets stuck in the gap. It has a window, it has a shell, and it has no interface. There is no built-in error page for “the network ate my JavaScript,” because from the app’s point of view the request was simply never answered. The browser engine inside the app fires the requests, the requests die at the firewall, and the user is left staring at white.

For Weave specifically, the asset CDN is f.static.wstack.net (part of the wstack.net domain). When that host is reachable, the app loads. When it is blocked, you get the blank screen — even though Weave’s other services, like authentication and the API, are on entirely different domains that load without issue. That uneven behavior (some Weave domains work, one is dead) is the first real clue, and it is the reason the problem is so easy to misdiagnose as “the app is broken.”

The specific Meraki + Talos interaction

Cisco Meraki MX security appliances (on recent firmware) use Cisco Talos as the threat-intelligence and URL-categorization engine behind their content filtering. When you enable content filtering and block a category — say, Advertisements — Meraki asks Talos what category a given domain belongs to and enforces the policy accordingly. That is exactly how it is designed to work, and for genuine ad and tracking domains it works well.

The problem here is a categorization miss, not a Meraki defect. At the time of our incident, Talos classified wstack.net — and its f.static.wstack.net CDN host — under the Advertisements category. (You can confirm the current classification for any domain yourself at the Talos Reputation Center.) “Advertisements” is one of the most commonly blocked categories on healthcare and SMB networks, because blocking ads is a sensible default for both bandwidth and security hygiene. So a perfectly reasonable, security-conscious filtering policy ends up blocking the CDN that a legitimate business application depends on to function at all.

The result is a silent failure: a domain that powers a clinical workflow tool gets swept up in an “Advertisements” block intended for ad networks, and nothing in the Weave app tells the user why.

How content filtering blocks an HTTPS request (and why there’s no block page)

It is worth understanding why this fails so quietly, because the mechanism is what makes it confusing. On older HTTP traffic, a content filter could intercept the request and return a friendly “This site is blocked” page. Modern traffic to a CDN is HTTPS, and the filter generally cannot inject a readable block page into an encrypted connection without breaking it. So instead of a tidy block page, the appliance resets the connection — it sends a TCP reset that tears the connection down before any data flows.

To the application, that reset looks like the server hung up instantly. In Chrome’s developer tools, it surfaces as the error net::ERR_CONNECTION_RESET. Cisco’s own Meraki content filtering documentation notes this behavior: when an HTTPS request is blocked by category, the user sees a browser-level connection error rather than a block page. There is no banner, no Meraki splash, no “your administrator has blocked this site.” Just a dead connection and, for an SPA, a blank window.

This is the crux of why the symptom is so misleading. The user reports “Weave won’t open.” The app reports nothing. The firewall did its job and said nothing to anyone. The only place the truth is written down is in the network request log — which is exactly where we go next.

How to diagnose net::ERR_CONNECTION_RESET with DevTools and a HAR capture

When an app loads blank and gives you nothing, stop guessing and read the network. Here is the exact path we used, and it generalizes to almost any “app won’t load on this network” call.

Step 1 — Open developer tools and watch the network

In a Chromium-based browser (or any client that exposes a developer console), open the developer tools and switch to the Network tab, then reload the app. You are looking for requests that fail instantly with a red status and the reason net::ERR_CONNECTION_RESET. If the failures cluster on a single domain while everything else succeeds, you have found your blocked host.

Step 2 — Export a HAR and read the numbers

A HAR (HTTP Archive) file is a complete, timestamped record of every request the app made — URL, status, timing, and failure reason. Right-click in the Network tab and export it. The HAR turns a vague “it’s not loading” into hard evidence.

In our capture, the picture was unambiguous. Of 1,355 requests to f.static.wstack.net, 1,335 returned net::ERR_CONNECTION_RESET — effectively the entire CDN, dead on arrival. Meanwhile every other Weave domain we checked (auth.getweave.com, oidc.weaveconnect.com, api.weaveconnect.com, and others) loaded normally. That single contrast — one domain hard-failing while its siblings succeed — is the signature of a category-based block rather than an outage. A broad outage would tend to take down more than one host; an authentication problem would fail auth, not assets. A targeted filter is by far the most likely explanation for this specific pattern, and it is where we’d point your investigation first.

One domain returning a wall of connection resets while every neighboring domain loads cleanly is the fingerprint of content filtering — not an app outage, not DNS, not auth.

Step 3 — Confirm it’s the filter, not DNS or the app

Before you change anything, rule out the cheaper explanations. Does the host resolve in DNS? (It did for us — f.static.wstack.net resolves into Google’s content infrastructure, googleusercontent.com, which is normal for a CDN-hosted asset.) Does the same app load on a phone using cellular data instead of the practice Wi-Fi? If it loads off-network and dies on-network, the network is the variable, and on a Meraki environment with content filtering enabled, the category block is the prime suspect.

Step 4 — Confirm the category on the firewall itself

On Meraki, you do not have to guess what Talos thinks of a domain. The dashboard includes a Content Filtering category checker — under the content filtering settings, there is a tool where you can type in a URL and it reports the category Talos assigns and whether your current policy would block it. We typed in wstack.net, and the checker confirmed it firsthand: categorized under Advertisements, and matched by the blocked-category policy. That closed the loop. The HAR told us which host was dying; the Meraki checker told us why the firewall was killing it.

If your filtering platform is not Meraki, the principle is the same even though the screens differ — which brings us to the part that applies to everyone, not just Meraki shops.

The fix on Meraki: allowlist the domain, keep the policy

The clean fix does not require you to unblock the entire Advertisements category — which you almost certainly want to keep blocked. Meraki content filtering evaluates an allowlist that takes precedence over category blocks. Add the domain to the allowlist and that specific host is permitted even though its category remains blocked everywhere else.

The steps:

  1. In the Meraki dashboard, go to Security & SD-WAN → Content filtering.
  2. Find the URL allowlist (allowed URL patterns) section.
  3. Add *.wstack.net (the wildcard covers f.static.wstack.net and any sibling hosts on the same domain).
  4. Save. Per Cisco’s documentation, the allowlist overrides the category block, so Weave’s CDN is now reachable while your broader Advertisements policy is untouched.

Relaunch the Weave app. The CDN assets load, the SPA paints, and the login page appears as it should. No reboot, no reinstall, no policy-wide change. Because the allowlist is scoped to one domain, you are not weakening your filtering posture anywhere else — you are correcting a single false positive.

A note on what you are not doing: you are not “turning off security.” Allowlisting a known, legitimate vendor CDN that a clinical tool depends on is precisely the kind of deliberate, documented exception a well-run filtering policy is built to accommodate. The mistake would be to disable content filtering wholesale to make one app work. Keep the layered control; carve the one exception.

If you don’t use Meraki: check your own filtering platform

Cisco Talos is one threat-intelligence database, but it is not the only one, and a single domain can be categorized differently across vendors because each maintains its own independent URL database. If you run a different filtering or DNS-security platform and see the same blank-screen symptom for Weave, the diagnosis is identical — only the dashboard changes.

The general procedure on any platform:

  • Look up how your platform categorizes wstack.net using its own URL/category lookup tool. Do not assume it matches or differs from Talos; check it directly on the system that is actually doing the filtering.
  • Check whether that category is blocked in your active policy (Advertisements is a common culprit, but it could land elsewhere).
  • Add *.wstack.net to that platform’s allow/exception list. Most enterprise filtering products provide an allow/exception mechanism intended to take precedence over a category block — the same way Meraki’s allowlist does — but confirm the precedence behavior in your platform’s own documentation, since the details differ by vendor.

The takeaway is platform-agnostic: when a legitimate business app fails to load behind a content filter, identify the exact host that is being dropped, check how your filter categorizes it, and add a targeted allow exception rather than loosening the whole policy. The tool changes; the method does not.

Why this matters more on healthcare networks

This is not just a Weave story, and it is not just a Meraki story. It is a recurring pattern at the intersection of two things that are both more common in healthcare practices than almost anywhere else: aggressive content filtering and a growing stack of cloud-delivered clinical apps.

Small practices block broad categories — Advertisements, and often others — because it is good, affordable hygiene and it reduces both bandwidth waste and exposure. At the same time, the modern practice runs more browser-and-CDN-delivered software every year: communications platforms, scheduling, patient engagement, imaging viewers, billing portals. Every one of those apps depends on a CDN, and every CDN domain is one categorization miss away from being silently swept into a blocked category. The more you filter and the more SPAs you run, the more often these two realities collide.

The cost of not understanding this pattern is real: hours of misdirected troubleshooting (reinstalling the app, blaming the workstation, escalating to the vendor’s support queue), a frustrated front desk, and in the worst case a practice that quietly abandons a tool it is paying for because “it never worked.” None of that is necessary. The whole episode is a fifteen-minute diagnosis and a one-line fix once you recognize the fingerprint.

It also reinforces a principle we write about often: network segmentation and thoughtful network architecture are not “set and forget.” A filtering policy is a living thing that needs to account for the legitimate applications running on the network, and keeping it healthy is part of modern IT operations for a practice, not a one-time setup task.

An onboarding checklist for new cloud apps on filtered networks

The durable lesson is to stop discovering these blocks reactively, one frustrated user at a time, and start checking for them as a standard step whenever you bring a new app onto a filtered network. Here is the checklist we now run during onboarding — it generalizes well beyond Weave.

  1. Get the app’s network requirements before install day. Ask the vendor (or read their docs) for the full list of domains the app contacts — especially the CDN/asset domain, which is the one most likely to get filtered and the one vendors most often omit from their published requirements.
  2. Run each domain through your filter’s category checker. On Meraki, that is the Content Filtering checker; on other platforms, the equivalent URL-lookup tool. Flag anything that lands in a category you block (Advertisements, but watch the others too).
  3. Pre-allowlist the asset domains for known-good apps. If you support a tool across many sites, add its CDN domains to your standard allowlist template so the next install just works. For Weave, that means *.wstack.net.
  4. Make “test on the production network” part of go-live. Don’t validate only on a phone or an unfiltered admin laptop. Launch the app on the actual filtered network the staff will use, because that is where category blocks reveal themselves.
  5. Keep a documented exceptions list. Record every allowlist entry, the app it supports, and why — so the next technician (or the next you, a year from now) understands the exception and doesn’t “clean it up” and reintroduce the outage.
  6. When you find a miscategorization, report it upstream. Submitting a reclassification request to the categorization vendor — for Talos, via the Talos Reputation Center — fixes the root cause for everyone, not just your one site. Fixing it locally with an allowlist is the right immediate move; reporting it is the right long-term one.

This is the kind of operational discipline that separates “we got the app working eventually” from “the app worked on day one.” It costs a few minutes per onboarding and saves hours per incident. Reliable connectivity for the tools a practice actually uses — phones, scheduling, patient communication — is part of the same engineering mindset we bring to VoIP and call quality: the goal is software that simply works when staff sit down to use it.

The Byzantine takeaway

A blank screen with no error message is one of the most disorienting failures in IT precisely because the system gives you nothing to go on. But “no error” is itself a clue: it points away from the application and toward the network silently dropping something the application needs. For Weave on a Meraki network, that something is the f.static.wstack.net CDN, blocked because Talos categorizes wstack.net as Advertisements, and the symptom is an SPA that can’t load its own interface.

The method we used scales far beyond this one app: read the network with DevTools and a HAR, find the host that’s failing while its neighbors succeed, confirm the category on the firewall itself, and add a scoped allowlist exception rather than loosening the whole policy. That sequence will resolve a large share of “this app won’t load on our network” calls you will ever get.

We flagged this to Weave directly because we believe security is a team effort — the practices, the app vendors, the categorization providers, and the IT partners all share an interest in legitimate software loading cleanly on well-secured networks. Catching a false positive and routing it back to the source is part of that work.

Where to start

  • If Weave is blank right now on a Meraki network: add *.wstack.net to Security & SD-WAN → Content filtering → URL allowlist and relaunch. That is the whole fix.
  • If you run a different filter: look up how your platform categorizes wstack.net, check whether that category is blocked, and add a *.wstack.net allow exception.
  • Going forward: add asset-domain category checks to your new-app onboarding routine so the next install never surprises you.

Keeping the tools a practice depends on working cleanly on a properly secured network is exactly the kind of operational discipline that modern IT operations is built around — a standing layer of attention, not a one-time setup task.