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:
Open TCP port 8477 in your provider's firewall (security group, cloud console or panel) and in the server's own firewall. On Ubuntu with iptables that's the pair of commands in Part 6; with ufw it's sudo ufw allow 8477/tcp.
YOUR_PUBLIC_IP means your server's address, whatever it is. If you reach it by hostname, use that instead.
Any Linux host with Docker works, ARM or x86.
Two placeholders appear in commands, highlighted in yellow. Replace them after pasting, before pressing Return:
YOUR_EMAIL: the email you sign up to Oracle with
YOUR_PUBLIC_IP: your server's address (Oracle users get it in Part 4)
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.
Use a real credit or debit card (prepaid and virtual cards are rejected). Nothing is charged on the free tier.
Enter your billing address exactly as it appears on your bank statement.
If verification fails: try a private browser window, a different email, a different card, and turn off adblockers and VPNs.
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
Oracle dashboard → Create a VM instance. Name: trellis.
Change shape → Ampere → click the arrow next to VM.Standard.A1.Flex to expand the row → OCPUs 2, memory 12 → Select shape
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.
Add SSH keys → Upload public key files → drag in id_ed25519.pub from the Finder window.
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 IP → Update.
5Open port 8477 (Oracle firewall)
Instance page → Networking tab → click the Subnet link.
Security tab → Default Security List for vcn-…
Security rules → Add 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.
Add Ingress Rules.
6Connect and update
Connect (type yes at the host prompt, then your key passphrase):
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
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
On any phone or computer, open http://YOUR_PUBLIC_IP:8477 (your real address, keep the :8477).
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
In the Trellis admin, add each addon by its manifest URL, the same URL you'd paste into Stremio.
Trellis reads the manifest and lists every catalogue the addon offers. Each enabled catalogue becomes one shelf that Strand can see.
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 .strandfile (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.
Settings → Media Servers → Add 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
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.
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.
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
Trellis doesn't cache. A shelf shows whatever the addon returns at that moment, so there's nothing to refresh on the server side.
Shelves are the addon's catalogues. Nothing is imported, and there's no library task to wait for.
Catalogue order comes from the addon. Trellis passes it through as-is. If a shelf's order looks wrong, that's set in the addon's own configuration.
13If something goes wrong
A shelf is selectable but shows nothing: the catalogue is probably returning no items. Check it in the addon before looking anywhere else.
The server dot isn't green: recheck the URL includes :8477, that the port is open in both firewalls, and that docker ps shows Trellis up.
You'd rather go back: turn the old addons back on under Settings → Addons, or open your .strand backup to restore everything at once.
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
On Oracle's free tier: one A1.Flex instance at max 2 OCPUs / 12 GB, max 200 GB storage, no extra instances or volumes.
Monthly, on the server:
Terminal · on the server
sudo apt update && sudo apt upgrade -y
Reboot if it asks; Trellis comes back by itself.
Note: Oracle's policy allows it to stop Always Free servers it considers idle. If yours is ever affected, Oracle emails first and the server is stopped, not deleted.
Don't run do-release-upgrade (major Ubuntu version jumps); regular updates are all you need.
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.