Shadowrocket Subscription Update Guide: Manual Refresh, Update on Open, and Troubleshooting

Learn how to refresh subscriptions manually, enable updates when opening the app, and troubleshoot failures caused by invalid links, network issues, or unrecognized content.

At a glance

If you already have your own subscription, refresh it manually in Home and confirm the list is current. Then go to Settings → Subscribe and turn on Update on Open. If an update fails, first check whether the request reached the subscription URL, then whether the response can be parsed. Subscription refreshes, connection tests, and Config updates are separate tasks. This guide covers the process in order: update, verify, and troubleshoot.

What a subscription update does: refreshes the list, not the app

A Shadowrocket subscription update rereads a subscription URL you already have and updates the corresponding group of connection entries in Home. If the remote service changes a name, address, port, or other connection setting, refresh the subscription to see those changes locally. This guide assumes you already have a service provider and subscription of your own.

Read the subscription URL Request remote content Parse connection entries Update the local list

Two separate conditions must be met: the content must be retrieved, and the entries must be parsed. A successful network request that returns a login page is not a valid subscription. Likewise, an updated list does not mean every connection in it will work. Connection availability also depends on the remote service, authentication settings, and your current network.

Manual refresh: check the URL, then verify the group

When importing for the first time or troubleshooting an update, start with a manual refresh. You can inspect the result immediately instead of waiting for an automatic trigger. Before refreshing, note the target group’s name, its current number of entries, and one connection you plan to verify. Use these details for comparison; there’s no need to record or share subscription credentials.

  1. Confirm the subscription type

    Go to Home and find the existing subscription group. To add one for the first time, tap “+” in the upper-right corner of Home, then choose Type → Subscribe, enter your own subscription URL, and save. A single shared connection link is not a subscription list that can be refreshed.

  2. Check the full URL

    Open the subscription’s edit screen and check the URL. Make sure all query parameters are present and that no leading or trailing spaces, line breaks, or explanatory text were copied with it. Check only your own URL, and don’t post the complete address in a public discussion.

  3. Pull down to refresh the list

    Return to Home, pull down on the list, and release to refresh the subscription. Wait for the operation to finish and check for an error message. If you have multiple subscriptions, check the result for each target group separately.

  4. Check the update result

    Compare the target group’s name and entry count, and look for any known changes. If a specific connection was changed remotely, open its details and verify the address or port before testing the connection.

The example below shows the structure of a URL and cannot be used to connect. token is a query parameter; actual URLs may use different parameter names or include credentials in the path. Don’t replace fields in your own URL based on this example.

https://example.com/sub?token=xxxx

Update on Open: configure it in Subscribe

After a manual refresh succeeds, go to Settings → Subscribe → Update on Open and turn on updates when opening the app. This setting triggers a subscription fetch when you open the app; it is not a scheduled background task that runs at fixed intervals. Keeping a connection running without opening the app does not mean the subscription has refreshed.

Update on Open and On Demand serve different purposes. The former controls when subscriptions are fetched; the latter triggers connections on demand. Changing Settings → On Demand won’t fix a subscription URL or replace a list refresh. You don’t need to adjust both settings while troubleshooting a subscription.

Action or settingTriggerWhat to check
Pull down to refresh in HomeManual actionThe message for this attempt, the target group, and known entry changes
Update on OpenTriggered when opening the appThe actual fetch result, not just whether the setting is on
On DemandTriggered by connection conditionsConnection status; not evidence of a subscription update

In short: enable automatic updates after a successful manual refresh

First get one repeatable, successful manual refresh, then enable Update on Open. If a problem comes up later, you can tell whether the URL became invalid or the automatic trigger didn’t complete, without changing several settings at once.

Troubleshooting failed updates: check the link, network, and content separately

First, note the full message shown on screen, then check the three causes below. Wording may vary by system language or request stage. An error is a clue, not proof on its own that a subscription has expired.

Error: Failed to load subscription

Cause and solution: This is a general subscription loading error. It may indicate an authorization issue, a failed request, or an unexpected response format. First confirm with your own service provider that the URL is valid, then check network access and the response content separately.

Error: The request timed out.

Cause and solution: The request didn’t complete within the allotted time. The issue may involve your current network, the request path, or the subscription server’s response. Try a manual refresh over both Wi-Fi and cellular, and compare the results.

Error: A server with the specified hostname could not be found.

Cause and solution: The hostname in the subscription URL could not be resolved. Check that the domain was copied in full, then try a different network. If the domain has changed, confirm the current URL with your own service provider.

First: The link is invalid or its authorization has changed

After a provider resets credentials, an old URL may remain in Home but no longer return content. If the request returns HTTP 401 or 403, check authorization and access restrictions first. For 404, check whether the path has changed. These status codes don’t by themselves identify a specific account issue; consider them alongside your own service details.

Second: The network can’t reach the server, or the request path is failing

If Wi-Fi fails but cellular works, first investigate what differs between the two network environments instead of rebuilding the subscription. Compare the results after switching networks, then check whether your current connection affects the request. Proxy, Direct, Config, and Scene under Global Routing are routing modes. Changing them may affect network access, but won’t change whether your subscription credentials are valid.

Third: The response content can’t be recognized

HTTP 200 means the request received a successful response; it doesn’t guarantee the content is a valid connection list. The server may return a login page, maintenance notice, or other text. A page displaying in a browser doesn’t prove Shadowrocket can parse it as a subscription.

The list looks unchanged after refreshing: verify entry details

A subscription may refresh successfully and still look exactly the same if nothing changed remotely. Conversely, the entry count can stay the same even when the update succeeds, because server addresses, ports, or authentication settings may have changed. To verify an update, check an entry known to have changed rather than relying on the list length.

What you seeWhat to checkNext step
Names and entry count are unchangedWhether anything actually changed remotely, and whether you’re viewing the right groupCheck the details of a connection known to have changed
The list changed, but connections failRemote availability, authentication settings, and your current networkTroubleshoot the connections instead of repeatedly refreshing the list
Only some entries are missingThe number of entries returned, their format, and whether all parameters are presentAsk your own service provider whether the missing entries should still be included
The old content is still there after opening the appWhether Update on Open is enabled and whether the request completedRefresh manually once and note the message

For example, if the remote service explicitly says a connection’s port changed from 443 to 8443, check that entry’s port after refreshing rather than just its name. These numbers illustrate how to verify a change; they aren’t recommended ports for any existing connection. Actual settings must match your own configuration.

Before reporting an issue: preserve the details, hide credentials

If the issue persists after these comparisons, prepare a concise troubleshooting report. Include enough detail to distinguish between content that couldn’t be retrieved and content that was retrieved but couldn’t be parsed, while keeping the full subscription URL private. Credentials may appear in the query parameters or the path, so don’t just redact a field named token.

Verify the official App Store listing