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.

  • 4 weeks later...

Does it make sense to create some api templates for unraid to get quicker onboarded?

Also, by chance, would you be willing to give another discount key. I saw the one from the initial post which is expired now.

  • 2 weeks later...
  • Author
On 7/19/2026 at 12:19 AM, chrneu said:

Does it make sense to create some api templates for unraid to get quicker onboarded?

Also, by chance, would you be willing to give another discount key. I saw the one from the initial post which is expired now.

Sorry for the late reply. I haven’t been very active in the community for a while.

Thanks for the suggestion!

Regarding the discount code, unfortunately there aren’t any active ones at the moment, so I’m sorry you missed the previous one.

As for API templates, they’re actually already built into the app. When creating an API key, Unraid Deck can generate an app-specific API key from a template with a single tap, so you don’t need to configure the permissions manually.

I also have a setup guide that walks through the whole process:

https://unraid.mccray.app/blog/unraid-deck-guide/

I also agree that the onboarding process can still be improved. I’ll continue looking for ways to simplify the setup and make getting started even easier.

Thanks again for the suggestion!

Edited by mccray

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

@mccray

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

Just a quick update: it’s now available in the official Community Applications repository.

Simply search for “Unraid Deck” in the Apps tab and install it directly.

  • Author
On 6/23/2026 at 5:47 AM, wgstarks said:

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.

Sorry for missing your original post.

I’m glad you were able to figure it out yourself!

Regarding this issue, I’ll try to improve the server address validation and make the error message clearer in a future update, so other users won’t get confused by the same situation.

Thanks for taking the time to share the solution and your feedback!

It's a slick looking app, but overall I haven't found it particularly useful. There's two areas that fall short - I have no server control. There's docker/VM controls to start/stop, but I cannot start/stop the array, or reboot the server, or other fundamental server controls.

Secondly, and more importantly, I have two drives in my cache pool that currently have issues, generating CRC errors, and the second has some errors present, so the cache pool is currently degraded. There is absolutely NO indication on this app that ANYTHING is wrong. Literally everything is showing green, every drive in the cache pool is showing status as "OK". There's no more detail of a drive beyond the very brief overview of "status" which is apparently meaningless, temperature, reads/writes etc, type, size, all rather useless info. What use is this app if something as important as hardware failure/issues goes unreported?

  • Author
17 hours ago, maccas.pro said:

It's a slick looking app, but overall I haven't found it particularly useful. There's two areas that fall short - I have no server control. There's docker/VM controls to start/stop, but I cannot start/stop the array, or reboot the server, or other fundamental server controls.

Secondly, and more importantly, I have two drives in my cache pool that currently have issues, generating CRC errors, and the second has some errors present, so the cache pool is currently degraded. There is absolutely NO indication on this app that ANYTHING is wrong. Literally everything is showing green, every drive in the cache pool is showing status as "OK". There's no more detail of a drive beyond the very brief overview of "status" which is apparently meaningless, temperature, reads/writes etc, type, size, all rather useless info. What use is this app if something as important as hardware failure/issues goes unreported?

Thanks for taking the time to write such detailed feedback. I really appreciate it.

Regarding the server controls, I actually experimented with the Unraid API quite a bit. While there are API endpoints for some operations, I found them to be unreliable in practice. For example, stopping the array would often work, but starting it again was inconsistent. Because of that, I decided not to expose those controls in the app—I don’t want to ship features that I can’t rely on.

As for the cache pool health, I completely understand your concern. At the moment, Unraid Deck displays the storage information provided by the Unraid API. Unfortunately, the API doesn’t expose enough low-level information for me to reliably detect conditions like a degraded cache pool or CRC errors.

I’ll continue following the progress of the official Unraid API, and if support for this information is added, I’ll be happy to bring it into the app.

Thanks again for the feedback. Comments like yours help me prioritize what to improve next.

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.