wako specifics

What is unique to wako — how it stores add-ons, how it handles updates, what the player expects.

wako follows the same JSON contract as the broader media-add-on ecosystem, but it makes a few specific choices around storage, updates, and playback. None of them require a wako-only fork of your add-on — but knowing them helps you debug edge cases.

Installation flow

Users install an add-on by pasting its manifest URL inside the app, under Settings > Extensions > Install an add-on. wako accepts:

  • https://my-host.example/manifest.json — standard form.
  • http://192.168.1.42:7000/manifest.json — accepted for local development.

wako fetches the manifest once with cache-busting headers, validates its structure, and stores a normalized copy. Both the manifest URL and the manifest itself are persisted — wako never reaches out to upstream for the manifest on every cold start.

Add-on identity

Internally, wako stores every add-on under a composite ID: {manifest.id}:{hash(manifestUrl)}. This means two installs of the same add-on from different manifest URLs (typically different configurations) coexist as separate entries with independent settings.

For your add-on this has one consequence: pick a stable manifest.id and never change it. Users who update to a new version expect their per-add-on preferences (enabled, order, catalog visibility) to survive — the persisted ID is derived from manifest.id and the URL, not from the URL alone.

Automatic updates

wako re-fetches every installed manifest at most once every 24 hours. The fetch uses CDN-friendly caching: if your host returns the same ETag or Last-Modified as before, wako gets a fast 304 response.

Once fetched, wako compares the new manifest with the stored copy using a structural comparison — every field, not just version. So updates to catalogs, resources, or behavior hints are picked up even when authors forget to bump the version.

Users can force an immediate refresh from the add-on detail page; that refresh uses cache-busting headers to bypass any intermediate CDN.

i
Why not on every cold start?
Cold-start traffic is bursty. Hammering every add-on host every time a user opens wako would punish indie add-on authors with small free tiers. The 24-hour throttle is a pragmatic compromise — most manifests do not change daily.

Per-profile preferences

wako supports multiple user profiles on the same device. Each profile keeps its own preferences for:

  • Whether each add-on is enabled.
  • The order in which add-ons appear in the home and stream lists.
  • Per-catalog visibility on the home screen.

These preferences live entirely on the client — your add-on does not need to do anything specific. The same manifest URL serves every profile.

ID conventions

wako is built around IMDb IDs as the primary cross-add-on join key. Most internal flows (watchlist sync, episode progress, calendar, cross-add-on stream lookup) work on IMDb IDs. Your add-on benefits from following the convention:

FieldTypeDescription
Moviestt-prefixReturn tt0083658 as the meta ID. wako forwards this directly when asking for streams.
Seriestt-prefixReturn the show's IMDb ID for the series, and tt0903747:1:1 as the video ID for each episode.
AnimeanyAnime add-ons often use Kitsu, MAL, or AniList IDs. wako accepts custom prefixes — declare them in manifest.idPrefixes so wako knows to route those IDs back to you.
Custom catalogsanyYou can mint your own IDs for content that has no IMDb entry. wako will also call your meta endpoint for those IDs, so be ready to serve full meta detail too.

Player expectations

wako ships a single player used on phone and TV, backed by the platform's native media engine. The player supports:

  • Containers. MP4, MKV, WebM, M2TS, FLV, AVI, HLS (.m3u8), DASH (.mpd), progressive HTTP.
  • Video codecs. H.264, H.265/HEVC, AV1, VP9, MPEG-2. HDR10 and Dolby Vision when the device supports it.
  • Audio codecs. AAC, AC3, E-AC3, DTS, DTS-HD, TrueHD, Opus, FLAC. The player can pass-through to an AV receiver when configured.
  • Subtitles. SRT and VTT rendered as JS overlays; ASS/SSA, PGS, and embedded tracks rendered through the native player.
  • Range requests. Required for seeking — your stream host must support Range headers for MP4/MKV files.

Binge-watching

wako auto-plays the next episode when the current one finishes. To pick a stream for the next episode automatically, wako reuses the previous episode's bingeGroup. A series add-on that does not set bingeGroup forces the user back to the picker every episode — a poor experience for binge-watchers.

See the bingeGroup section for the exact semantics.

Language detection

wako parses your stream titles to detect audio languages — this powers the language picker, the "preferred language" auto- selection, and the language chips shown on each stream. Common cues wako recognises:

  • Full language names (English, Français…).
  • ISO-639 codes (EN, FR…).
  • Community tags (VOSTFR, VFF, VFQ, multi, DUAL…).

If your add-on knows the audio language, include it explicitly in the title — wako will pick it up and surface it accurately.

One add-on, three platforms

wako runs on iOS, Android, and Android TV with the same add-on infrastructure. The TV experience is lean-back: stream-list items get focused via D-pad, and your meta and poster choices affect how content reads from across the room. A poster that is fine on a phone can be unreadable on a 65-inch TV — favour high-contrast art and avoid tiny text in the poster itself.