Contributing
How this wiki is maintained, what is still open, and how the settings in the code are checked against the settings in the wiki.
Principles
- The code is the source of truth, not anyone’s memory: the settings definitions in
App/Shared/Views/Settings/SettingsGuide.swift(SettingsGuide.all) and the explanatory texts inApp/Shared/Localizable.xcstrings(settings.info.*,settings.*). Default values come from the*Preferencefiles andUserDefaultskeys. If something isn’t in the code, it isn’t in the wiki – it goes on the “Open” list instead. - Version: branch
release-1.0.2(commitda66e128, 15.10.2026), inventoryDocs/release-1.0.2/neu-in-1.0.2.md. When the app changes, read the new version first, then update the wiki. - Language: standard German with Swiss spelling (ss instead of ß), informal “du”, short sentences, no technical term without an explanation (see Glossary).
- Neutral: no provider names, no real channel names (examples use made-up channels such as “Nordkanal” and “Sportwelt”), no prices, no statements about the trial or subscription terms, no marketing claims (“lag-free”, “better than”). No figures from the rulebook that the app doesn’t display itself.
- Images only from the new design:
Docs/release-1.0.2/screens/design-4/anddesign-settings/in the source code, copied toimages/withtools/bilder_102.py(the script also adds the numbered markers on the remote and the player; the key is on the page). No new hand-made screenshots.
How a setting is laid out
Every setting appears exactly once, on the sub-page for its section, with an invisible anchor directly below the heading:
### Name as shown in the app (English name)
<!-- setting: bereich.schlüssel -->
- **Where:** section · platforms
- **What it does:** 2–3 sentences, the app’s explanatory sentence in «guillemets»
- **Default:** backed up by the code
- **Options:** advantage and disadvantage for each option
- **When to change:** …
- **What it costs:** battery, delay behind live, data usage, storage
- **Works together with:** links
The <!-- setting: … --> anchor carries the key from SettingsGuide.swift. The check below counts these anchors.
Links and anchors
Forgejo builds heading anchors like this: lower case, every run of characters that are not a letter, digit or underscore becomes one hyphen, and there are no hyphens at the start or end. Umlauts are kept. Example: “Reserve gegen Aussetzer (Reserve against dropouts)” → #reserve-gegen-aussetzer-reserve-against-dropouts. Page links have no .md and take the form [Text](Seitenname#anker) (page name and anchor).
Checking before you push
The wiki repo contains two scripts under tools/:
NEVERLAG_SRC=~/neverlag-wiki-src python3 tools/check_settings.py --table # 81 = 81, none duplicated
python3 tools/check_links.py # pages, anchors, images
check_settings.py --table regenerates the comparison list below. Both must run without findings. Then commit and git push origin main; the page count can be confirmed via the API: GET /api/v1/repos/haris/Neverlag/wiki/pages.
Changing a page
- Bring the source copy to the version you want (
git -C ~/neverlag-wiki-src checkout <tag>). - Read the app’s explanatory text (
settings.info.<id>inLocalizable.xcstrings) and find the default value in the code. - Change the page; the setting’s name exactly as in the app, with the English name in brackets.
- Run the check scripts, commit with a meaningful message, push.
- Anything that can’t be backed up: add it here under “Open” – don’t guess.
Open
Points that the sources couldn’t settle clearly, or where sources contradict each other. Whoever clears one up adds the answer and strikes the point.
- Scope of the FAQ: the brief mentions 27 questions;
Web/src/i18n/faq/de.tscontains 34. The wiki includes all 34. - Does 4K come back by itself? The website FAQ (“Does 4K come back by itself?”, “Why am I suddenly on 1080p?”, “… when my provider throttles?”) describes an automatic return after a few minutes. The 1.0.2 rulebook says “Never step up automatically”; the lower level applies per channel for at most 30 minutes, and you can go back up at any time with the button. The wiki follows the rulebook; the website texts would need updating.
- Website FAQ “most stable player” names other players; the wiki leaves the names out.
- Autoplay: available since 1.0.2 (“Play next episode automatically”, Settings → Playback). Done.
- Preferred audio language: there is no fixed preference (“always German”). Since 1.0.2, Neverlag remembers the audio language you chose last; you can view and reset it under “Remembered Audio Language” (Settings → Picture & Sound).
- Continue watching for recordings: a saved position for recordings isn’t documented in the texts (only for movies and series). Not claimed.
- Number of settings: in the
release-1.0.2version (15.10.2026),SettingsGuide.allcontains 81 entries in eleven sections; the wiki lists each exactly once (table below). The code is what counts; older overviews with 61 or 64 entries are out of date. - Android / Fire TV: the column in Platform differences is based on
Docs/android-parity.md(each row dated there), not on running the app. Parental controls, NAS, sending pairing, the first-launch notice, rating/feedback and the tour are listed there as missing or still to follow; the new features from 1.0.2 (profiles, remote, source chain, archive as a library, keywords, new settings) aren’t listed there at all yet. - Device measurements, Picture II: according to the report, three decisions remain open until measurements have been taken on a real iPhone: keeping “120 Hz for video”, the final standard mode, and the default for motion smoothing. The wiki gives today’s default values (on / off).
- Apple TV 4K with HDR: the website FAQ mentions dropped frames with 4K HDR as a known limitation (“we’re working on it”). Whether the “New renderer” solves this in 1.0.2 isn’t documented as complete in the reports.
- Reserve caps per device (85 s on iPhone and Apple TV 4K, 60 s on Apple TV HD, 40 s when memory is tight) come from the Package 2a report; the app shows the achievable value itself. Check again for new device classes.
- Images: since 1.0.2, the images come from
Docs/release-1.0.2/screens/design-4/anddesign-settings/(scripttools/bilder_102.py). There are no captures there for the initial “Your profile” setup, the language choice on first launch, timeshift on iPhone/iPad or the network test; those pages do without or show the closest related image. - Mac jump bar: its behaviour on the Mac (a bar with start/end, or a simple list) varies with the window size; the wiki only describes it roughly.
- Prices: deliberately not in the wiki, even where the website gives them. The wiki does mention the trial (7 days), because the app shows it that way itself.
- Source of the wiki: so far the wiki is maintained directly in the wiki repo. The rule “
Docs/wiki/in the source code → Forgejo wiki → help on the website”, with a mirroring script, is still to come. - Translations: since 16 October 2026 the pages under
en/,fr/andit/match the German pages (1.0.2). Whoever changes a German page updates the three languages in the same commit; anchors stay German. - Cut without a frozen frame: that Neverlag continues packet-accurately after a brief connection drop is proven on the test bench; according to the report, measurement on a real device is still outstanding.
Comparison: settings in the code vs. in the wiki
Version release-1.0.2 (15.10.2026): 81 settings in the code, 81 in the wiki, each exactly once. Generated with tools/check_settings.py --table.
| No. | Key in the code | Section | Name in the app | Wiki page | Status |
|---|---|---|---|---|---|
| 1 | provider.addXtream | provider | Add Xtream account … | Settings → Providers & Content | ✓ |
| 2 | provider.addM3U | provider | Add M3U playlist … | Settings → Providers & Content | ✓ |
| 3 | provider.sendQR | provider | Send to Apple TV (scan QR code) … | Settings → Providers & Content | ✓ |
| 4 | provider.refreshInterval | provider | Refresh automatically | Settings → Providers & Content | ✓ |
| 5 | provider.refreshCatalog | provider | Refresh catalogue now | Settings → Providers & Content | ✓ |
| 6 | provider.refreshEPG | guide | Refresh EPG now | Settings → TV Guide | ✓ |
| 7 | provider.loadDetails | provider | Load movie details | Settings → Providers & Content | ✓ |
| 8 | provider.manageGroups | provider | Manage groups & reload … | Settings → Providers & Content | ✓ |
| 9 | provider.sendToTV | provider | Send to Apple TV … | Settings → Providers & Content | ✓ |
| 10 | provider.remove | provider | Remove provider | Settings → Providers & Content | ✓ |
| 11 | categories.show | provider | Show categories | Settings → Providers & Content | ✓ |
| 12 | categories.manage | provider | Manage categories | Settings → Providers & Content | ✓ |
| 13 | categories.sortAZ | provider | Sort alphabetically (A–Z) | Settings → Providers & Content | ✓ |
| 14 | categories.reset | provider | Reset | Settings → Providers & Content | ✓ |
| 15 | backup.export | provider | Export backup… | Settings → Providers & Content | ✓ |
| 16 | backup.import | provider | Import backup… | Settings → Providers & Content | ✓ |
| 17 | tags.manage | guide | Manage tags … | Settings → TV Guide | ✓ |
| 18 | epg.assignment | guide | EPG mapping … | Settings → TV Guide | ✓ |
| 19 | appearance | general | Appearance | Settings → General | ✓ |
| 20 | renderer | advanced | New renderer | Settings → Advanced | ✓ |
| 21 | startQuality | pictureSound | Preferred startup quality | Settings → Picture & Sound | ✓ |
| 22 | frameTiming | pictureSound | Frame pacing | Settings → Picture & Sound | ✓ |
| 23 | matchFrameRate | pictureSound | Match refresh rate to programme | Settings → Picture & Sound | ✓ |
| 24 | highRefreshRate | pictureSound | 120 Hz for video | Settings → Picture & Sound | ✓ |
| 25 | motionSmoothing | pictureSound | Motion smoothing | Settings → Picture & Sound | ✓ |
| 26 | audioLanguage | pictureSound | Remembered Audio Language | Settings → Picture & Sound | ✓ |
| 27 | timeshift.disk | playback | Timeshift on disk | Settings → Playback | ✓ |
| 28 | timeshift.window | playback | Rewind window | Settings → Playback | ✓ |
| 29 | leadHold | playback | Buffer before first picture | Settings → Playback | ✓ |
| 30 | reserve | playback | Reserve against dropouts | Settings → Playback | ✓ |
| 31 | autoplayNextEpisode | playback | Play next episode automatically | Settings → Playback | ✓ |
| 32 | lastChannelOnLaunch | playback | Play last channel on launch | Settings → Playback | ✓ |
| 33 | autoSourceSwitch | playback | Switch to another source automatically on failure | Settings → Playback | ✓ |
| 34 | relay | advanced | Playback through local receiver | Settings → Advanced | ✓ |
| 35 | relay.adaptiveRate | advanced | Adapt playback to the connection | Settings → Advanced | ✓ |
| 36 | relay.controller | advanced | Controller decides | Settings → Advanced | ✓ |
| 37 | recordings.destination | recordings | Recording destination | Settings → Recordings | ✓ |
| 38 | recordings.chooseFolder | recordings | Choose folder … | Settings → Recordings | ✓ |
| 39 | recordings.defaultFolder | recordings | Use default folder | Settings → Recordings | ✓ |
| 40 | recordings.nasSetup | recordings | Set up network storage … | Settings → Recordings | ✓ |
| 41 | recordings.nasTransfer | recordings | Send to Apple TV … | Settings → Recordings | ✓ |
| 42 | recordings.paddingBefore | recordings | Pre-roll | Settings → Recordings | ✓ |
| 43 | recordings.paddingAfter | recordings | Post-roll | Settings → Recordings | ✓ |
| 44 | profiles.add | profiles | Add profile | Settings → Profiles & Parental Controls | ✓ |
| 45 | profiles.switch | profiles | Switch profile | Settings → Profiles & Parental Controls | ✓ |
| 46 | profiles.isChild | profiles | Child profile | Settings → Profiles & Parental Controls | ✓ |
| 47 | profiles.requiresPIN | profiles | Protect with PIN | Settings → Profiles & Parental Controls | ✓ |
| 48 | profiles.allowLive | profiles | Live categories | Settings → Profiles & Parental Controls | ✓ |
| 49 | profiles.allowVOD | profiles | Movie categories | Settings → Profiles & Parental Controls | ✓ |
| 50 | profiles.allowSeries | profiles | Series categories | Settings → Profiles & Parental Controls | ✓ |
| 51 | profiles.blockChannels | profiles | Hidden channels | Settings → Profiles & Parental Controls | ✓ |
| 52 | profiles.unblockAll | profiles | Show all channels again | Settings → Profiles & Parental Controls | ✓ |
| 53 | profiles.unlockContent | profiles | Unlock content | Settings → Profiles & Parental Controls | ✓ |
| 54 | profiles.delete | profiles | Delete profile… | Settings → Profiles & Parental Controls | ✓ |
| 55 | profiles.setPIN | profiles | Set PIN… | Settings → Profiles & Parental Controls | ✓ |
| 56 | profiles.changePIN | profiles | Change PIN… | Settings → Profiles & Parental Controls | ✓ |
| 57 | profiles.removePIN | profiles | Remove PIN | Settings → Profiles & Parental Controls | ✓ |
| 58 | profiles.settingsPIN | profiles | Protect settings with PIN | Settings → Profiles & Parental Controls | ✓ |
| 59 | profiles.relock | profiles | Lock again now | Settings → Profiles & Parental Controls | ✓ |
| 60 | subscription.start | subscription | Start subscription | Settings → Subscription | ✓ |
| 61 | subscription.manage | subscription | Manage subscription | Settings → Subscription | ✓ |
| 62 | subscription.restore | subscription | Restore purchase | Settings → Subscription | ✓ |
| 63 | subscription.terms | about | Terms of Use | Settings → About Neverlag | ✓ |
| 64 | diagnostics.overview | advanced | Diagnostics & status | Settings → Advanced | ✓ |
| 65 | diagnostics.history | advanced | History | Settings → Advanced | ✓ |
| 66 | diagnostics.networkTest | advanced | Network test | Settings → Advanced | ✓ |
| 67 | diagnostics.journalShare | advanced | Share journal | Settings → Advanced | ✓ |
| 68 | diagnostics.journalDelete | advanced | Delete journal | Settings → Advanced | ✓ |
| 69 | remote.open | remote | Open remote | Settings → Remote | ✓ |
| 70 | remote.pair | remote | Pair Apple TV | Settings → Remote | ✓ |
| 71 | remote.pairTV | remote | Pair iPhone | Settings → Remote | ✓ |
| 72 | remote.devices | remote | Paired devices | Settings → Remote | ✓ |
| 73 | language | general | Language | Settings → General | ✓ |
| 74 | about.tour | general | Tour of the app | Settings → General | ✓ |
| 75 | about.hints | general | Show hints | Settings → General | ✓ |
| 76 | about.hintsReset | general | Reset all hints | Settings → General | ✓ |
| 77 | about.notice | about | Player, not a provider — the notice | Settings → About Neverlag | ✓ |
| 78 | about.rate | about | Rate Neverlag | Settings → About Neverlag | ✓ |
| 79 | about.feedback | about | Send feedback | Settings → About Neverlag | ✓ |
| 80 | about.privacyPolicy | about | Privacy policy | Settings → About Neverlag | ✓ |
| 81 | about.licenses | about | Open source licenses | Settings → About Neverlag | ✓ |