Setting up the TV guide on Xbox: EPG and XMLTV
A guide URL is often 200 characters of query string. There is exactly one place you should be entering that, and it is not a games console.
Paste a typical XMLTV URL into a text editor and count it. Most run past 100 characters and plenty past 200, because they carry a token, a region code and a format parameter. Entering one of those on a console, one character at a time, through an on-screen grid, is a bad way to spend an evening.
So the guide is set up where there is a keyboard, and the console reads the result. The app says so on the screen itself: changes sync to this Xbox automatically.
The two ways to have a guide
Two modes, answering different questions.
Per-country is the one to start with. You pick the countries you watch and you get maintained guides for them. Nothing to paste, nothing to keep working. If your playlist has no guide data of its own, this is the whole answer.
Global is for when you have your own XMLTV files, usually because your provider publishes one that matches their channel ids exactly. You add up to 15 URLs, each up to 2048 characters, and they are merged.
You are in one mode or the other. The ceiling is 15 rather than unbounded because every URL is a file somebody's device has to download and parse before the guide is usable, and a household that adds 40 of them has built a slow guide rather than a complete one.
Per-country mode has a similar brake: turn on more than 5 countries and the app warns you before it saves. Each country is another grabber shard, and the cost is not obvious at the moment you tick the box.
Who downloads the file
Your devices do. Not our servers.
That sentence appears on the settings screen in almost exactly those words, and it is a design rule rather than a limitation. A user-supplied URL is never fetched server side. In practice your guide provider sees requests from your home connection, a URL carrying a private token stays between you and them, and a guide host that blocks datacentre ranges still works for you.
The five file shapes accepted:
.xml plain XMLTV
.xmltv plain XMLTV, alternate extension
.gz gzip
.zip zip
.xz xz
Compressed is normal and usually preferable. A national guide can be tens of megabytes as plain XML and a fraction of that gzipped. The container is decided by reading the file's leading bytes rather than trusting its extension, so a mislabelled file still opens. If a compressed guide arrives and half your channels are missing, the file may have been truncated rather than malformed, which has a specific signature: a guide that stops halfway covers it.
Guides break in ways that are hard to see
A fixture pack of 51 real-world guide files turned up 3 parser faults, and all 3 had the same shape: one bad byte, and an entire provider's guide is gone. An unescaped ampersand in a programme title. A file declaring UTF-8 while carrying Latin-1 bytes. A stray control character in the middle of a description.
All 3 are now repaired rather than fatal, and the repairs are counted, so a guide that needed patching says so instead of quietly working. The reason to mention it here is that "my guide is empty" is almost never a setting you got wrong. It is usually the file.
The other half of "almost never a setting" is the clock, and this is the part I did not expect. I went back to the format's own definition to check what a timestamp with no timezone means, assuming the answer would be "undefined". It is not. The documentation says UTC is assumed. In practice a generator that omits the offset is nearly always publishing local wall clock, so the specification and the files in the wild disagree, and a guide can sit exactly one or two hours out while every byte of it is correct. Why guide times are wrong is worth reading before you conclude your provider publishes the schedule an hour late.
Where the guide shows up on the console
Inside Live TV, not as its own screen. Tune a channel, open the schedule layer, and the shoulder buttons move you a day at a time. A watches whatever is selected; B closes the layer and leaves you on the channel.
The standalone Guide destination in the navigation is still a placeholder. That is the honest state of it, not something you failed to find.
If the guide is configured and the console shows nothing, establish first whether it is a configuration problem or a data problem: an empty guide walks that separation, and what XMLTV is explains what the file is supposed to contain.
What this article measured21 claims, each with the evidence behind it
| Claim | Evidence | Counted |
|---|---|---|
| Guide files are downloaded by your devices, not by our servers. The setting screen states this to the user rather than leaving it as an implementation detail. | n = 1 | Aug 31, 2026 |
| A global-mode guide accepts at most 15 source URLs, each up to 2048 characters, and the cap is enforced on both the client and the server. | n = 1 | Aug 31, 2026 |
| Enabling more than 5 countries in per-country mode raises a load warning before the save, because each one adds a grabber shard to fetch. | n = 1 | Aug 31, 2026 |
| Five file shapes are accepted for a guide source: .xml, .xmltv, .gz, .zip and .xz. | n = 1 | Aug 31, 2026 |
| Three parser faults, each of which could lose an entire provider's guide over one bad byte, were found by a fixture pack and fixed: an unescaped ampersand, UTF-8 declared over Latin-1 bytes, and a stray control character. | n = 51 | Aug 16, 2026 |
| The container is decided by reading the file's leading bytes rather than trusting its extension, with four shapes recognised by magic number and anything else treated as uncompressed. | n = 4 | Sep 1, 2026 |
| Decompression is bounded twice: an absolute ceiling of 2 GiB of output and a ratio cap of 400 to 1 against the compressed bytes actually received. | n = 2 | Sep 1, 2026 |
| A guide is treated as untrusted input: document type definitions are ignored, the external resolver is null, and entity expansion is capped at zero characters. | n = 3 | Sep 1, 2026 |
| Eleven limits bound a parse: depth 32, text 64 KB, description 4 KB, title 1 KB, 15 credits, 6 categories, 8 alternate names, batches of 512 channels and 2,000 programmes, and a 6 hour programme duration ceiling. | n = 11 | Sep 1, 2026 |
| The title cap exists because a programme may legally carry one title per language, and a guide emitting forty of them would otherwise concatenate all forty into one stored title. | n = 1 | Sep 1, 2026 |
| Programmes outside the retention window are dropped while parsing rather than stored and pruned later, with a default of 8 days forward and 1 back, clamped to 14 and 7. | n = 1 | Sep 1, 2026 |
| A parse returns seven fields including how many entries it dropped and both compressed and uncompressed byte counts, so a truncated file is distinguishable from a merely filtered one. | n = 7 | Sep 1, 2026 |
| Guide ingestion distinguishes eight failure kinds, keeping a decompression limit and a security limit separate from an ordinary network failure. | n = 8 | Sep 1, 2026 |
| A guide timestamp with no explicit timezone is not undefined: the format's own documentation says UTC is assumed.xmltv.dtd, date field documentation, verbatim: "You can also append a timezone to the end; if no explicit timezone is given, UTC is assumed." | Specification | Not applicable |
| A manual guide correction is stored at profile level against a source-free channel key, so one correction covers every provider carrying that channel. | n = 1 | Sep 1, 2026 |
| The two guide modes are a closed pair named in the view model as global and per-country, not a free-form setting. | n = 2 | Sep 1, 2026 |
| The guide cache is one of the first things released when the console reports memory pressure, which is described as frequent on the older hardware. | n = 1 | Sep 1, 2026 |
| The console shows 7 guide rows against the desktop's 12, from the same view model with a per-platform template. | n = 2 | Sep 1, 2026 |
| The console's schedule layer advertises exactly 3 buttons, which is what it handles: watch, close, and a day step on the shoulder buttons. | n = 3 | Sep 1, 2026 |
| A guide URL is accepted up to 2048 characters, which is why the ceiling on how many you can add is 15 rather than a length limit. | n = 1 | Sep 1, 2026 |
| On the console the schedule is a layer inside Live TV rather than a separate destination. The standalone Guide entry in app navigation is still a placeholder screen. | n = 1 | Aug 31, 2026 |