Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Unraid Deck - A beautiful, native mobile client built for the new Unraid API

Featured Replies

Really nice app. For some reason, this doesn't show up when searching for 'unraid' in the App Store (or if it did, it wasn't at all visible from a simple search), and I just happened upon this when looking for something unrelated.

Anyhow, tried it out, works great except it won't browse shares / storage. Just hangs and then crashes. Unraid 7.2.4, no array, just ZFS pools, not sure if that makes a difference.

  • Author
20 hours ago, mb2unraid said:

Really nice app. For some reason, this doesn't show up when searching for 'unraid' in the App Store (or if it did, it wasn't at all visible from a simple search), and I just happened upon this when looking for something unrelated.

Anyhow, tried it out, works great except it won't browse shares / storage. Just hangs and then crashes. Unraid 7.2.4, no array, just ZFS pools, not sure if that makes a difference.

Thanks for trying it out, and thanks for the report!

Could you help me understand how to reproduce the crash?

For example:

- Which page were you opening when it happened? Shares or Storage?

- Does it hang immediately after entering that page, or only after tapping something?

- Does it happen every time?

- Which version of the app are you using?

- If possible, could you share a screenshot or short screen recording of the steps before it crashes?

Also, just to clarify: pool display is not supported at the moment, so ZFS pools may not show up in the app yet. That should be separate from the crash though — the app should not hang or crash, and I’ll look into adding a proper fallback once I can reproduce it.

3 hours ago, mccray said:

Thanks for trying it out, and thanks for the report!

Could you help me understand how to reproduce the crash?

For example:

- Which page were you opening when it happened? Shares or Storage?

- Does it hang immediately after entering that page, or only after tapping something?

- Does it happen every time?

- Which version of the app are you using?

- If possible, could you share a screenshot or short screen recording of the steps before it crashes?

Also, just to clarify: pool display is not supported at the moment, so ZFS pools may not show up in the app yet. That should be separate from the crash though — the app should not hang or crash, and I’ll look into adding a proper fallback once I can reproduce it.

Sure. It happens each time when browsing the Storage tab in the app. Or, at least it did until I check it today and suddenly it works. So these things go. It's previous behavior would be to stall when you tap Storage, it would hang for more than a minute, then crash. Anyway, I'm attaching a screenshot of what I used to see before the whole app would crash. I'll say the behavior when it's accessing storage info is slow, usually between 30s to a minute before unassigned devices and user shares appear. If you have a way to export a log, I can provide that too. I just downloaded the app from the App store yesterday, so it's whatever latest you've published.

urdeck_error.jpeg

Edited by mb2unraid

  • Author
9 hours ago, mb2unraid said:

Sure. It happens each time when browsing the Storage tab in the app. Or, at least it did until I check it today and suddenly it works. So these things go. It's previous behavior would be to stall when you tap Storage, it would hang for more than a minute, then crash. Anyway, I'm attaching a screenshot of what I used to see before the whole app would crash. I'll say the behavior when it's accessing storage info is slow, usually between 30s to a minute before unassigned devices and user shares appear. If you have a way to export a log, I can provide that too. I just downloaded the app from the App store yesterday, so it's whatever latest you've published.

urdeck_error.jpeg

Thanks, that helps. One more useful detail: roughly how many storage devices do you have attached? For example: number of ZFS pool devices, cache/pool devices, unassigned devices, and user shares.

The Storage tab currently asks the Unraid GraphQL API for array/storage, user shares, and physical disks in one request. Since you mentioned it can take 30-60 seconds before shares and unassigned devices appear, I’d like to check whether the delay is coming from the Unraid API response itself.

If you’re comfortable running a local test on your Unraid server, could you try this from a machine that can reach your Unraid server? Please do not share your API key. I only need the timing result and maybe the count of returned disks/shares.

UNRAID_URL="https://YOUR_UNRAID_HOST:PORT/graphql"
API_KEY="YOUR_API_KEY"

curl -sS -o storage-response.json \
  -w "\nHTTP %{http_code} total=%{time_total}s\n" \
  "$UNRAID_URL" \
  -H "content-type: application/json" \
  -H "x-api-key: $API_KEY" \
  --data '{"query":"query GetStorageData { array { state capacity { kilobytes { total used free } } parityCheckStatus { status progress speed duration date correcting paused running } parities { id name device status temp size type numReads numWrites numErrors isSpinning fsType color } disks { id name device status temp size fsSize fsUsed type numReads numWrites numErrors isSpinning fsType color transport rotational } caches { id name device status temp size fsSize fsUsed type numReads numWrites numErrors isSpinning fsType color transport rotational } boot { id name device status temp size fsSize fsUsed type numReads numWrites numErrors isSpinning fsType color transport rotational } } shares { id name comment used free size cache color include exclude allocator splitLevel } disks { id name device serialNum size temperature isSpinning type smartStatus } }"}'

If you’re using HTTPS with a self-signed certificate, add -k to the curl command temporarily.

UNRAID_URL="https://YOUR_UNRAID_HOST:PORT/graphql"
API_KEY="YOUR_API_KEY"

curl -k -sS -o storage-response.json \
  -w "\nHTTP %{http_code} total=%{time_total}s\n" \
  "$UNRAID_URL" \
  -H "content-type: application/json" \
  -H "x-api-key: $API_KEY" \
  --data '{"query":"query GetStorageData { array { state capacity { kilobytes { total used free } } parityCheckStatus { status progress speed duration date correcting paused running } parities { id name device status temp size type numReads numWrites numErrors isSpinning fsType color } disks { id name device status temp size fsSize fsUsed type numReads numWrites numErrors isSpinning fsType color transport rotational } caches { id name device status temp size fsSize fsUsed type numReads numWrites numErrors isSpinning fsType color transport rotational } boot { id name device status temp size fsSize fsUsed type numReads numWrites numErrors isSpinning fsType color transport rotational } } shares { id name comment used free size cache color include exclude allocator splitLevel } disks { id name device serialNum size temperature isSpinning type smartStatus } }"}'

If the curl request also takes 30-60 seconds, the slowdown is likely in the Unraid API/storage enumeration path rather than the app UI. If curl returns quickly but the app still stalls, that points me back to app-side parsing/rendering and I’ll investigate that path.

For the crash itself: I found a few issues while investigating and have made some adjustments. will be included in the next app update.

Sure. So the first result is accessed with a custom domain I've configured to access the server via Nginx through a Tailscale network. HTTPS enabled with a Let's Encrypt cert.

HTTP 504 total=60.647549s

Second result is just HTTP direct to the Tailscale IP for the server

HTTP 504 total=60.020259s

Final result via HTTP direct to the internal LAN IP from a local machine in my network

HTTP 200 total=0.022652s

Total shares and storage devices is 50. A lot, I know, I have a lot of storage devices. I decided to try using just the internal LAN IP in the app while in my home network and it won't load any storage info, but it won't crash. Just spins for a minute than reports "0 Shares." Interestingly, if I close the app entirely (swipe up and close it), then I open the app and attempt to access the Storage tab, it will spin for about minute and then report "0 Shares", but while it's doing that and I'm looking at the Unraid dashboard through the web admin, one or two CPU cores are pegged at 100% and won't stop until I force close the app again. It takes probably 30s to a minute before core utilization normalizes after closing the app.

It's consistent, I've watched it for about five minutes without using the app at all and CPU utilization doesn't do that until I open the app and browse to the 'Storage' tab.

Edited by mb2unraid

  • Author
4 hours ago, mb2unraid said:

Sure. So the first result is accessed with a custom domain I've configured to access the server via Nginx through a Tailscale network. HTTPS enabled with a Let's Encrypt cert.

HTTP 504 total=60.647549s

Second result is just HTTP direct to the Tailscale IP for the server

HTTP 504 total=60.020259s

Final result via HTTP direct to the internal LAN IP from a local machine in my network

HTTP 200 total=0.022652s

Total shares and storage devices is 50. A lot, I know, I have a lot of storage devices. I decided to try using just the internal LAN IP in the app while in my home network and it won't load any storage info, but it won't crash. Just spins for a minute than reports "0 Shares." Interestingly, if I close the app entirely (swipe up and close it), then I open the app and attempt to access the Storage tab, it will spin for about minute and then report "0 Shares", but while it's doing that and I'm looking at the Unraid dashboard through the web admin, one or two CPU cores are pegged at 100% and won't stop until I force close the app again. It takes probably 30s to a minute before core utilization normalizes after closing the app.

It's consistent, I've watched it for about five minutes without using the app at all and CPU utilization doesn't do that until I open the app and browse to the 'Storage' tab.

Thanks, this is very helpful.

One thing I’d like to confirm about the last result: was the LAN test HTTP 200 total=0.022652s) run immediately after the first two timed-out requests? I’m asking because once Unraid has already completed or partially warmed up the storage query, a second request can be much faster. I just want to make sure I’m reading the timing correctly.

On the app side, I’m going to review the Storage tab query path again and make whatever optimizations I can safely cover. I don’t personally have a setup with that many devices and shares, so it’s difficult for me to reproduce this exact case locally.

Would you be open to joining a TestFlight build to help verify targeted fixes? If so, please send me the email address you’d like to use for the invite. I’ll make some focused changes around the Storage tab and would really appreciate being able to validate them against your setup.

  • Author
4 hours ago, mb2unraid said:

Sure. So the first result is accessed with a custom domain I've configured to access the server via Nginx through a Tailscale network. HTTPS enabled with a Let's Encrypt cert.

HTTP 504 total=60.647549s

Second result is just HTTP direct to the Tailscale IP for the server

HTTP 504 total=60.020259s

Final result via HTTP direct to the internal LAN IP from a local machine in my network

HTTP 200 total=0.022652s

Total shares and storage devices is 50. A lot, I know, I have a lot of storage devices. I decided to try using just the internal LAN IP in the app while in my home network and it won't load any storage info, but it won't crash. Just spins for a minute than reports "0 Shares." Interestingly, if I close the app entirely (swipe up and close it), then I open the app and attempt to access the Storage tab, it will spin for about minute and then report "0 Shares", but while it's doing that and I'm looking at the Unraid dashboard through the web admin, one or two CPU cores are pegged at 100% and won't stop until I force close the app again. It takes probably 30s to a minute before core utilization normalizes after closing the app.

It's consistent, I've watched it for about five minutes without using the app at all and CPU utilization doesn't do that until I open the app and browse to the 'Storage' tab.

I’d also like to isolate whether the CPU spike is caused by this Storage GraphQL query itself, or by some other app-side behavior.

If you’re willing, could you try one “cold query” test?

  1. Before testing, please make sure the Storage tab in the app has not been opened for about 30 minutes.

  2. Also avoid manually running the Storage GraphQL curl query during that same period.

  3. While on your local LAN, run the curl command directly against the internal LAN IP.

  4. While the curl command is running, keep the Unraid WebUI Dashboard open and watch the CPU usage.

  5. Please check whether one or two CPU cores spike to 100%, similar to what you saw when opening the Storage tab in the app.

  6. Even if curl returns quickly, please keep watching CPU usage for another 1-2 minutes to see whether it stays elevated.

The goal is to separate two cases:

  • If the manual curl query also causes the CPU spike, then the issue is likely inside the Unraid API’s storage/share/device enumeration path.

  • If the manual curl query does not cause the CPU spike, but the app still does, then I’ll focus more on app-side behavior such as extra requests, retries, connection routing, or request cancellation.

Sorry the delay in response. To answer your first question, yes, I ran the direct to LAN IP query immediately after running the curl command against the domain and TS IP queries. I haven't touched the app or run the curl command in over a day. Just did so now using direct to LAN IP and the result is interesting, as this time it was not quick like it was last time. CPUs did spike, two of them and remained pegged for about 30s. And this time around, I got an error I didn't get before. Result below:


curl: (23) Failure writing output to destination, passed 160 returned 4294967295

HTTP 504 total=60.020533s

Open to a Test Flight, sure, I just need to send my email privately.

  • 2 weeks later...

@mccray

When will the notification plugin be added to the official repository?

  • Author
On 5/21/2026 at 8:57 PM, maTTi said:

@mccray

When will the notification plugin be added to the official repository?

I’m not sure yet how to get it added to the official repository.

I’ve already published a plugin support thread, and I probably need to look into the official submission process next.

  • 5 weeks later...

Lost connection to server and cannot reconnect.

Current settings-

IMG_0911.png

When I try to connect I get a network error Could not parse data to JSON format.

19 minutes ago, wgstarks said:

When I try to connect I get a network error Could not parse data to JSON format.

Nevermind. I got it. Had just copied the server address from my browser and pasted it in. Once I edited it to remove https//: and /Main it worked.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.