Strand community guide

Move your Strand addons to a cloud Trellis server

One set of addons, configured once, shared by every device you sign into Strand on (iPhone, iPad, Mac and Apple TV), working at home and away with a single URL. The server runs Trellis, which lets Stremio addons speak to any Jellyfin client. Every command below has a Copy button: tap it, paste into Terminal, press Return.

Why bother

Without a server, every device carries its own copy of your addons, and reconfiguring one means reconfiguring all of them. With Trellis, Strand reads your catalogues from your server the way it reads a Jellyfin library. Change an addon once, every device follows. And because the server lives in the cloud rather than your house, there's no local-vs-remote split: the same address works everywhere, so Strand's Remote URL stays empty and there's no VPN to toggle.

Read this first

There is no migration assistant for TrellisStrand's "Move Addons" flow targets Remux. With Trellis you add your addons in the Trellis admin, then point each shelf at its new catalogue by hand in Strand. On a large custom layout that last part takes real time; it is the longest step here by some margin.

What you get in exchange is a simpler server. Trellis exposes each addon catalogue directly to Strand as a shelf. There's no library import, no collections to build, no scheduled refresh, and nothing to wait for once it's running.

Already have a VPS? Skip to Part 7

Parts 1 to 5 are Oracle-specific: the account, the instance, and Oracle's own firewall. If you're bringing your own server, go straight to Part 7 (Docker), or Part 8 (Trellis) if Docker is already installed.

Two things from the skipped parts still apply:

Any Linux host with Docker works, ARM or x86.

Two placeholders appear in commands, highlighted in yellow. Replace them after pasting, before pressing Return:

Time: 45–60 minutes for the server, plus possible waiting for Oracle capacity, plus however long your layout takes to re-point.

1Oracle account (skip if you have a VPS)

Oracle's free tier is genuinely free: 2 ARM cores, 12 GB RAM, 200 GB disk. The trade-off is that sign-up can be finicky.

  1. Go to oracle.com/cloud/free and click Start for free.
  2. Use a real credit or debit card (prepaid and virtual cards are rejected). Nothing is charged on the free tier.
  3. Enter your billing address exactly as it appears on your bank statement.
  4. If verification fails: try a private browser window, a different email, a different card, and turn off adblockers and VPNs.
  5. After sign-up, note your Cloud Account Name. Future logins at cloud.oracle.com: Cloud Account Name, then email and password. Save all three in a password manager.

2SSH key (on your Mac)

Open Terminal: press Cmd + Space, type Terminal, press Return. Then:

Terminal
ssh-keygen -t ed25519 -C "YOUR_EMAIL"

Press Enter to accept the default location, then set a passphrase. To make the key file visible for uploading later: in Finder press Cmd + Shift + G, type ~/.ssh, press Enter. Keep that window open; the file you need is id_ed25519.pub.

3Create the server

  1. Oracle dashboard → Create a VM instance. Name: trellis.
  2. Scroll to Image and shape:
    • Change image → Ubuntu → Canonical Ubuntu 24.04 → Select image
    • Change shapeAmpere → click the arrow next to VM.Standard.A1.Flex to expand the row → OCPUs 2, memory 12 → Select shape
  3. Networking (may be labelled Primary VNIC): Create new virtual cloud network, Create new public subnet, and make sure Assign a public IPv4 address is ticked.
  4. Add SSH keys → Upload public key files → drag in id_ed25519.pub from the Finder window.
  5. Storage → custom boot volume → size 200, performance 120.
  6. Review (Ubuntu 24.04, A1.Flex 2/12, 200GB, key listed), ignore the cost estimate, Create.
Never go above 2 OCPUs / 12 GB / 200 GBThat is the free limit. The availability domain (AD-1/2/3) makes no difference to cost.
"Out of capacity" error, very commonIn order: switch Availability Domain (AD-2, AD-3) under Placement and Create again · drop to 1 OCPU / 6 GB and resize later (instance → Edit → shape → 2/12, one reboot) · retry every few hours for a few days.

4Public IP

On the instance page, copy the Public IPv4 address; this is YOUR_PUBLIC_IP everywhere below.

If it shows a dash: Networking tab → zoom the browser out (Cmd and minus) and scroll to Attached VNICs → click the VNIC name → IPv4 Addresses → three-dot menu on the private IP → Edit → Public IP Type: Ephemeral Public IPUpdate.

5Open port 8477 (Oracle firewall)

  1. Instance page → Networking tab → click the Subnet link.
  2. Security tab → Default Security List for vcn-…
  3. Security rulesAdd Ingress Rules: Source Type CIDR · Source CIDR 0.0.0.0/0 · IP Protocol TCP · Source Port Range blank · Destination Port Range 8477 · Description trellis.
  4. Add Ingress Rules.

6Connect and update

Connect (type yes at the host prompt, then your key passphrase):

Terminal
ssh ubuntu@YOUR_PUBLIC_IP

Apply updates, then reboot:

Terminal · on the server
sudo apt update && sudo apt upgrade -y && sudo reboot

Wait a minute, connect again with the ssh command above, then open the port in the server's own firewall. This one applies to every host, Oracle or not:

Terminal · on the server
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 8477 -j ACCEPT
sudo netfilter-persistent save

7Docker

Terminal · on the server
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu
exit

Reconnect (the permission change needs a fresh login), then confirm:

Terminal
ssh ubuntu@YOUR_PUBLIC_IP
Terminal · on the server
docker compose version

8Trellis

One paste sets up and starts everything:

Terminal · on the server
mkdir -p ~/trellis && cd ~/trellis
cat > docker-compose.yml << 'YML'
services:
  trellis:
    image: ghcr.io/lpierpoint/trellis:latest
    container_name: trellis
    restart: unless-stopped
    ports:
      - "8477:8477"
    volumes:
      - trellis-config:/config

volumes:
  trellis-config:
YML
docker compose up -d
docker logs trellis

The log should end by telling you setup is required.

Keep the named volumeTrellis runs as uid 10001 inside the container, and a fresh named volume inherits the right ownership on its own. Swapping trellis-config:/config for a host path like ./config:/config keeps the host directory's ownership instead, and fails on first run. If you do want the config as a file on the host, create it with mkdir -p ./config && sudo chown 10001:10001 ./config first.

9Create the admin login

  1. On any phone or computer, open http://YOUR_PUBLIC_IP:8477 (your real address, keep the :8477).
  2. Create the admin account: a username and a long, unique password. This login faces the whole internet, and it's what Strand signs in with.

Trellis refuses every other route until this account exists, so nothing is exposed before you set it. Do it as your first action anyway.

Page won't load? Recheck Part 5 saved, and run docker logs trellis on the server.

10Add your addons

  1. In the Trellis admin, add each addon by its manifest URL, the same URL you'd paste into Stremio.
  2. Trellis reads the manifest and lists every catalogue the addon offers. Each enabled catalogue becomes one shelf that Strand can see.
  3. The admin shows a count when it's done, along the lines of 253 of 254 showing as shelves.

Your addon's own settings still live with the addon, not with Trellis. Configure it there and Trellis follows.

11The Strand side

Back up first. Settings → Share Setup, include everything, and save the .strand file (not the link; a real setup exceeds a link's length limit) somewhere you'll find it: Files on iPhone or iPad, anywhere on a Mac. That file is a complete snapshot of your addons, shelves and servers; opening it puts everything back.

  1. Settings → Media ServersAdd a Server → the manual form (not Plex or Emby Connect):
    • Server URL: http://YOUR_PUBLIC_IP:8477; leaving off the :8477 is the most common mistake
    • Remote URL: leave blank; the server isn't in your house, so one URL works everywhere
    • Username / Password: the Trellis admin login from Part 9
    • Display Name: anything you like
  2. Save. The dot beside the server shows whether this device can reach it; you want green. Trellis presents itself as Jellyfin, so there's no Trellis option to pick.
  3. Point your shelves at it. For each shelf, edit its source and choose the matching catalogue from your Trellis server. New shelves are added the same way.
On re-pointing a large layoutCatalogue names carry the addon's own naming, so they won't match your shelf titles exactly. Work through one group at a time and check the home screen as you go. If a shelf has several sources, each one is chosen separately. Don't delete shelves you plan to keep — a deleted Strand shelf loses its title, artwork, order and home position. Re-point it instead.
  1. When your home screen looks right, turn off the addons you've replaced under Settings → Addons. They're switched off, not deleted, and any of them turns back on with one tap.

12Worth knowing

13If something goes wrong

14Handy commands (run in ~/trellis on the server)

Back up your addons and routing
docker run --rm -v trellis_trellis-config:/c -v "$PWD":/out alpine \
  tar czf /out/trellis-config.tar.gz -C /c .
Stop Trellis
docker compose stop
Start it again
docker compose start
Update Trellis
docker compose pull && docker compose up -d
Logs
docker logs trellis
Full reset · wipes all Trellis data
cd ~/trellis && docker compose down -v && docker compose up -d

15Keeping it running

Terminal · on the server
sudo apt update && sudo apt upgrade -y

16Optional: SSH shortcut on your Mac

Terminal · on your Mac
cat >> ~/.ssh/config << 'CFG'
Host oracle
  HostName YOUR_PUBLIC_IP
  User ubuntu
CFG

From then on ssh oracle connects.

Disclaimer. This is an unofficial community guide, written and shared by a Strand user. It is not made, reviewed, or endorsed by Strand, Trellis, Oracle, or Cloudflare, and no affiliation with any of them is implied. Follow it at your own risk: you are responsible for your own server, its security, and any addons you configure on it. Nothing here is guaranteed to stay accurate as these products change. If something breaks, the guide's rollback steps and your .strand backup are your safety net.