Skip to content

Repository files navigation

Stremlist

Stremlist OG Image

Stremlist is a Stremio addon that turns your IMDb watchlist into a Stremio catalog, so you can browse your saved movies and TV shows directly inside Stremio.

Features

  • Browse IMDb watchlist items in Stremio
  • Supports one or multiple IMDb watchlists
  • Supports sorting by title, year, complete release date, rating, runtime, and random order
  • Filter by genre or decade, or choose a sort directly from Stremio's Discover genre dropdown (one option at a time)
  • Combine genre, decade, maximum runtime and minimum IMDb rating in each catalog configuration
  • Search your configured lists from Stremio search
  • Optional extra home catalogs: 90 min or less, Top rated, and Shuffle
  • Optional Rating Poster Database (RPDB) poster support via API key
  • Simple install flow through a hosted configuration UI
  • Cache-first watchlist serving with periodic auto-refresh and a manual "Refresh now" control
  • Lightweight backend with Supabase for user configuration and Cloudflare R2 for watchlist caching
  • Monorepo architecture with Turborepo (apps + packages)

Reinstall an existing addon to load the new dropdown options. Selecting a genre or decade preserves the configured sort; selecting a sort temporarily overrides it. Saved filters always apply together, including to search and extra catalogs. The dropdown adds one further filter or overrides the sort; None clears only that temporary selection. Extra catalogs reuse the original list and cache.

Release Year sorts by the IMDb year; Release Date sorts by the complete date returned by IMDb (which may differ from the original release year). Incomplete dates sort last, without inventing a day or month. Refresh an older cache to populate release dates. Date-added sorting uses IMDb list order. Shuffle stays stable within a cache generation so scrolling does not repeat items. Popularity is not offered: the tested IMDb meterRanking field reported an entitlement denial.

Apply supabase/migrations/20260914230000_catalog_settings.sql before deploying this version. The new JSON column defaults to an empty configuration. Older clients that omit these settings preserve them; sending an empty object clears them. Reinstall after enabling/disabling extra catalogs or adding search support; changing only saved filters does not require reinstalling.

Monorepo Structure

This repository follows the Turborepo recommended structure:

.
├── apps
│   ├── backend      # Hono API + Stremio addon endpoints
│   └── frontend     # Vite/React configuration UI
├── packages
│   └── shared       # Shared types/constants used by apps
├── turbo.json
└── pnpm-workspace.yaml

Deployment Architecture

  • Frontend and backend are deployed on Vercel
  • Backend serves Stremio addon endpoints and configuration flow
  • Supabase stores user configuration
  • Cloudflare R2 stores gzip-compressed watchlist cache objects

Getting Started

Prerequisites

  • Node.js 24+ for development with Portless (.node-version)
  • pnpm 10+

Install

pnpm install

Run in Development

Decrypt the backend environment first (see below), then run:

pnpm dev             # both apps through Portless
pnpm dev:tailnet     # both apps; share the frontend over Tailscale HTTPS
pnpm dev:backend     # backend only
pnpm dev:frontend    # frontend only (requires a running backend)
pnpm exec portless list

Portless 0.15.6 is pinned as a dev dependency. In the main checkout, the local names are https://stremlist.localhost and https://api.stremlist.localhost. Linked worktrees receive a branch prefix; use the printed URLs or pnpm exec portless list instead of hardcoding them. A previously configured proxy port (such as 1355) appears in these URLs too.

For access from another tailnet device, open the Tailscale URL printed for the frontend. The browser uses /api on that same origin, and Vite forwards requests to the matching worktree's backend. Stremio install links and configure redirects use that origin too. No machine-specific browser API URL is needed.

See the Portless development guide for first-run setup, HTTPS, environment overrides, plain-port fallback, and cleanup.

Decrypt environment files

The repo stores encrypted env files as apps/backend/.env.enc and apps/frontend/.env.enc. Decrypt them with SOPS and an age private key that matches a recipient in .sops.yaml.

  1. Install sops.
  2. Give SOPS your age private key. Use one of these options:
export SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/keys.txt"
# or:
export SOPS_AGE_KEY="AGE-SECRET-..."

On macOS, SOPS also reads ~/Library/Application Support/sops/age/keys.txt if you do not set those variables.

  1. Decrypt into local .env files (gitignored):
sops decrypt apps/backend/.env.enc > apps/backend/.env
sops decrypt apps/frontend/.env.enc > apps/frontend/.env

Do not commit the decrypted .env files.

Build and Quality Commands

From repository root:

pnpm build
pnpm typecheck
pnpm lint
pnpm test
pnpm format
pnpm format:check

Using the Addon

Public/Hosted Instance

  1. Open Stremio -> Addons
  2. Click Add Addon URL
  3. Enter: [YOUR_DEPLOYED_BACKEND_URL]/manifest.json
  4. Configure with your IMDb watchlist details (single or multiple watchlists)
  5. (Optional) Add your RPDB API key on the configure page to use rating posters

Local Instance

  1. Start backend (or full dev stack)
  2. In Stremio -> Addons -> Add Addon URL
  3. Enter:
http://localhost:7001/manifest.json

Backend Environment Variables

Set backend env vars in apps/backend/.env.

Variable Required Description Default
PORT No Backend HTTP port 7001
FRONTEND_URL No URL used for /:userId/configure redirect https://stremlist.com
SUPABASE_URL Yes Supabase project URL -
SUPABASE_SERVICE_ROLE_KEY Yes Supabase service role key -
R2_ACCOUNT_ID Yes Cloudflare account ID used by the R2 S3 endpoint -
R2_ACCESS_KEY_ID Yes Bucket-scoped R2 API token access key -
R2_SECRET_ACCESS_KEY Yes Bucket-scoped R2 API token secret -
R2_BUCKET Yes Private R2 cache bucket name -
CACHE_TTL_MINUTES No How long a cached watchlist is served before it is refreshed on the next request 30
REFRESH_COOLDOWN_SECONDS No Minimum time between manual "Refresh now" requests per user 60
RESEND_API_KEY No Resend API key for newsletter subscription endpoint -
RESEND_AUDIENCE_ID No Resend audience ID for newsletter subscription endpoint -

Type Generation

To regenerate shared Supabase types:

pnpm generate:types

This updates packages/shared/src/database.types.ts.

The production R2 rollout and cleanup procedure is documented in docs/r2-cache-migration.md.

License

ISC

Disclaimer

This project is not affiliated with IMDb or Stremio.

About

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages