20.0.0

From Nintendo Switch Brew
Jump to navigation Jump to search

The Switch 20.0.0 system update was released on April 30, 2025 (UTC). This Switch update was released for the following regions: ALL.

Security flaws fixed: <fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now>.

Change-log

Official ALL change-log:

  • The following icons for new features have been added to the HOME Menu:
  • Vitrual Game Card
  • Purchased Nintendo Switch digital software, DLC, and some free software, are now virtual game cards and displayed in a list in this menu.
  • You can virtually load and eject virtual game cards between up to two Nintendo Switch systems.
  • Virtual game cards can be lent to others in the same Nintendo Account family group. For more information, see Virtual Game Card Guide.
  • GameShare
  • Compatible software can be shared from a Nintendo Switch 2 system to other nearby system(s) to play together.
  • You can only play together via local wireless, and the Nintendo Switch 2 system must initiate GameShare.
  • This feature cannot be used between two Nintendo Switch, Nintendo Switch – OLED Model and/or Nintendo Switch Lite systems.
  • User-Verification Settings has been added under User > User Settings.
  • You can restrict access to the Virtual Game Card menu by requiring entry of a PIN or signing in to your Nintendo Account.
  • Online License Settings has been added.
  • When turned on, you can play downloaded software or DLC you've purchased while the system is connected to the internet, even if you don't have the virtual game card loaded.
  • For more information, please refer to the details about the option on the System Settings screen.
  • The Nintendo eShop and Nintendo Switch News icon colors on the HOME Menu have been changed.
  • Multiple save data can be selected and transferred at once in “Transfer Your Save Data” menu.
  • System Transfer to Nintendo Switch 2 has been added under System Settings > System.
  • You can perform a system transfer from your Nintendo Switch to Nintendo Switch 2 using local communication.
  •  For users that will lose access to their Nintendo Switch before receiving their Nintendo Switch 2, there is an option to upload system transfer data to a dedicated server which can then be retrieved on their Nintendo Switch 2. After you upload your system transfer data to the dedicated server, the Nintendo Switch system will be initialized to factory settings, so only perform this transfer if you’ll be able to complete the transfer on Nintendo Switch 2.
  • If you want to continue using your Nintendo Switch until you have a Nintendo Switch 2, we recommend completing the system transfer using local communication after you have acquired a Nintendo Switch 2 system.
  • An internet connection and Nintendo Account is required to complete both local and the server-based system transfer service.
  • For more information, see System Transfer from Nintendo Switch to Nintendo Switch 2.
  • The appearance of some user icons have been updated.
  • For detailed information on Nintendo Switch 2, see the Nintendo website.
  • Note that the use of “Primary Console” has been deprecated with the transition to virtual game cards, and “Pass-enabled console” will be used instead. On a console set as the “Pass-enabled console” for a user, all users on the console can access certain subscriptions or passes for some software. For more information, see How to Set or Change the Pass-Enabled Console for a Nintendo Account.

System Titles

  • The following new titles were added: 0100000000000859, 010000000000085C, 0100000000001048 (splay).
  • The following titles were updated:
    • Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.
    • SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, AvatarImage, LocalNews, UrlBlackList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, ControllerIcon, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.
    • Applets: qlaunch, auth, cabinet, controller, dataErase, error, netConnect, playerSelect, swkbd, miiEdit, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, "starter" application, myPage, maintenance.

NPDM changes (besides usual version-bump):

  • bluetooth: Name updated: bluetooth -> bluetooth.autog.
  • hid: Service access: added lm.
  • wlan: Service access: added erpt:c, pm:bm.
  • ns: Service access: added hid:sys, removed hid.
  • capsrv: Service access: added srepo:u.
  • erpt: Fac.FsAccessFlag updated: set bitmask 0x0000080000000000 (bit43).
  • pctl: MainThreadStackSize updated: 0x4000 -> 0x6000.
  • npns: Service server access: added npns:a. KernelCap HandleTableSize: updated HandleTableSize = 0x80 -> 0x100.
  • eclct: Service access: added pctl:s, pm:bm, srepo:a.
  • creport: Service access: removed fsp-srv. SVC access: removed CreateSession, AcceptSession, ReplyAndReceiveLight, ReplyAndReceive, ReplyAndReceiveWithUserBuffer, CreateEvent.
  • ro: Service access: removed csrng.
  • migration: Service access: added nifm:a, notif:s, pctl:s, removed nifm:s.
  • omm: Service access: added time:al.
  • cabinet: Service access: added bsd:a, removed bsd:u.
  • controller: Service access: added bsd:a, removed bsd:u, htcs.
  • dataErase: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.
  • error: Service access: added bsd:a, removed bsd:u.
  • playerSelect: Service access: added bsd:a, removed bsd:u.
  • swkbd: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.
  • overlayDisp: Service access: added bsd:a, removed bsd:u.
  • photoViewer: Service access: added bsd:a, htcs:sys, removed bsd:s, htcs.
  • LibAppletLns: Service access: added ns:sweb, removed ns:web.
  • myPage: Service access: added bsd:a, removed bsd:u.
  • maintenance: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.

RomFs changes:

  • CertStore: "/ssl_TrustedCerts.bdf" updated, "/ssl_TrustedCerts.Ounce.bdf" updated
  • ErrorMessage: updated
  • BrowserDll:
    • "/browser/effective_tld_names.dat" updated
    • "/browser/ErrorPageFilteringTemplate.html" updated
    • "/browser/ErrorPageSubFrameTemplate.html" updated
    • "/browser/ErrorPageTemplate.html" updated
    • "/browser/MediaControlsInline.css" updated
    • "/browser/MediaControlsInline.js" updated
    • "/browser/skin/" added
    • "/browser/Skin.dat" removed
    • "/browser/UserCss.dat" updated
    • "/buildinfo/buildinfo.dat" updated
    • "/gfxShader/BrowserOffscreenDrawer.bnsh" updated
    • "/gfxShader/MediaPlayerDrawer.bnsh" added
    • "/lyt/": Various data updated.
    • "/lyt/Browse/MouseEffect.arc" removed
    • "/lyt/MediaPlayer/MovieCanvasNative.arc" removed
    • "/message/": Various data updated.
    • "/message/labelConversionTable.json" added
    • "/nro/netfront/": Various data updated.
    • "/nro/netfront/core_2/" removed
    • "/nro/netfront/core_3/" added
    • "/shader/OceanShader.arc" updated
    • "/sound/cruiser.bfsar" updated
  • Help:
    • "/legallines.htdocs/img/immersion.png" removed
    • "/legallines.htdocs/index.html" updated
    • "/safe.htdocs/html/JPja/index.html" updated
    • "/safe.htdocs/html/JPja/page_02.html" updated
    • "/safe.htdocs/html/JPja/page_04.html" updated
    • "/safe.htdocs/html/KRko/index.html" updated
    • "/safe.htdocs/html/KRko/page_02.html" updated
    • "/safe.htdocs/html/KRko/page_04.html" updated
    • "/safe.htdocs/html/TWzh/index.html" updated
    • "/safe.htdocs/html/TWzh/page_02.html" updated
    • "/safe.htdocs/html/TWzh/page_04.html" updated
    • "/safe.htdocs/js/tapaction.js" updated
  • NgWord: updated
  • SystemVersion: All files updated.
  • AvatarImage:
    • "/chara/00000001.szs" updated
    • "/chara/00000002.szs" updated
    • "/chara/00000003.szs" updated
    • "/chara/00000004.szs" updated
    • "/chara/00000005.szs" updated
    • "/chara/00000006.szs" updated
    • "/chara/0000000A.szs" updated
    • "/chara/0000000B.szs" updated
    • "/chara/0000000D.szs" updated
    • "/chara/0000000E.szs" updated
    • "/chara/0000000F.szs" updated
    • "/chara/00000010.szs" updated
    • "/chara/00000011.szs" updated
    • "/chara/00000012.szs" updated
    • "/chara/00000034.szs" updated
    • "/chara/00000035.szs" updated
    • "/chara/00000036.szs" updated
    • "/DatabaseInfo.bin" updated
  • LocalNews: "/image/LnShopIntro/list.jpg" updated, "/image/LnShopIntro/main.jpg" updated, "/image/LnSupIntro/main_Terra.jpg" removed, "/message/CNzhT/" removed, "/message/revision.txt" updated
  • UrlBlackList: "/listLnsGlobal.txt" updated
  • FontNintendoExtension: "/nintendo_ext2_003.bfttf" updated
  • FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: All files updated.
  • ControllerIcon: "/lyt/ColorTable" updated
  • NgWord2: updated
  • RebootlessSystemUpdateVersion: All files updated.
  • qlaunch applet:
    • "/icon/hatena174.jpg" added
    • "/icon/hatena.jpg" updated
    • "/icon/NaIcon_ShareFrom_ForDemo.jpg" added
    • "/icon/NaIcon_ShareFrom_ForDemo.png" added
    • "/icon/NaIcon_ShareTo_ForDemo.jpg" added
    • "/icon/NaIcon_ShareTo_ForDemo.png" added
    • "/icon/SubstituteUserIcon.jpg" updated
    • "/lyt/": Various data updated.
    • "/lyt/DataTransfer.szs" added
    • "/lyt/Vgc.szs" added
    • "/message/": Various data updated.
    • "/message/CNzh/dataTransfer.msbt.szs" added
    • "/message/CNzh/splay.msbt.szs" added
    • "/message/CNzh/vgc.msbt.szs" added
    • "/message/CNzhT/" removed
    • "/message/EUde/dataTransfer.msbt.szs" added
    • "/message/EUde/splay.msbt.szs" added
    • "/message/EUde/vgc.msbt.szs" added
    • "/message/EUen/dataTransfer.msbt.szs" added
    • "/message/EUen/splay.msbt.szs" added
    • "/message/EUen/vgc.msbt.szs" added
    • "/message/EUes/dataTransfer.msbt.szs" added
    • "/message/EUes/splay.msbt.szs" added
    • "/message/EUes/vgc.msbt.szs" added
    • "/message/EUfr/dataTransfer.msbt.szs" added
    • "/message/EUfr/splay.msbt.szs" added
    • "/message/EUfr/vgc.msbt.szs" added
    • "/message/EUit/dataTransfer.msbt.szs" added
    • "/message/EUit/splay.msbt.szs" added
    • "/message/EUit/vgc.msbt.szs" added
    • "/message/EUnl/dataTransfer.msbt.szs" added
    • "/message/EUnl/splay.msbt.szs" added
    • "/message/EUnl/vgc.msbt.szs" added
    • "/message/EUpt/dataTransfer.msbt.szs" added
    • "/message/EUpt/splay.msbt.szs" added
    • "/message/EUpt/vgc.msbt.szs" added
    • "/message/EUru/dataTransfer.msbt.szs" added
    • "/message/EUru/splay.msbt.szs" added
    • "/message/EUru/vgc.msbt.szs" added
    • "/message/JPja/dataTransfer.msbt.szs" added
    • "/message/JPja/splay.msbt.szs" added
    • "/message/JPja/vgc.msbt.szs" added
    • "/message/KRko/dataTransfer.msbt.szs" added
    • "/message/KRko/splay.msbt.szs" added
    • "/message/KRko/vgc.msbt.szs" added
    • "/message/TWzh/dataTransfer.msbt.szs" added
    • "/message/TWzh/splay.msbt.szs" added
    • "/message/TWzh/vgc.msbt.szs" added
    • "/message/USen/dataTransfer.msbt.szs" added
    • "/message/USen/splay.msbt.szs" added
    • "/message/USen/vgc.msbt.szs" added
    • "/message/USes/dataTransfer.msbt.szs" added
    • "/message/USes/splay.msbt.szs" added
    • "/message/USes/vgc.msbt.szs" added
    • "/message/USfr/dataTransfer.msbt.szs" added
    • "/message/USfr/splay.msbt.szs" added
    • "/message/USfr/vgc.msbt.szs" added
    • "/message/USpt/dataTransfer.msbt.szs" added
    • "/message/USpt/splay.msbt.szs" added
    • "/message/USpt/vgc.msbt.szs" added
    • "/sound/qlaunch_action.bksnd" updated
    • "/sound/qlaunch.bfsar" updated
    • "/texture/IcoPctl.bntx" removed
  • auth applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/auth_action.bksnd" updated
    • "/sound/auth.bfsar" updated
    • "/sound/auth_module.bksnd" updated
  • cabinet applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/cabinet_action.bksnd" updated
    • "/sound/cabinet.bfsar" updated
  • controller applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/controller_action.bksnd" updated
    • "/sound/controller.bfsar" updated
    • "/sound/controller_module.bksnd" updated
  • dataErase applet:
    • "/icon/" added
    • "/lyt/": Various data updated.
    • "/lyt/hatena.jpg" removed
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/dataErase_action.bksnd" updated
    • "/sound/dataErase.bfsar" updated
  • error applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/error_action.bksnd" updated
    • "/sound/error.bfsar" updated
    • "/texture/IcoPctl.bntx" removed
  • netConnect applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/netConnect_action.bksnd" updated
    • "/sound/netConnect.bfsar" updated
  • playerSelect applet:
    • "/lyt/": Various data updated.
    • "/lyt/Pin.szs" added
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/playerSelect_action.bksnd" updated
    • "/sound/playerSelect.bfsar" updated
    • "/sound/playerSelect_module.bksnd" updated
  • swkbd applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/swkbd_action.bksnd" updated
    • "/sound/swkbd.bfsar" updated
  • LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth: All files updated.
  • overlayDisp applet:
    • "/icon/hatena174.jpg" added
    • "/icon/hatena.jpg" removed
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/batteryIn.raw" updated
    • "/sound/batteryOut.raw" updated
    • "/sound/infoAlarm.raw" updated
    • "/sound/infoCapture.raw" updated
    • "/sound/infoLHub.raw" added
    • "/sound/infoPtcl.raw" added
    • "/sound/infoReactionError.raw" updated
    • "/sound/overlayDisp_action.bksnd" updated
  • photoViewer applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/photoViewer_action.bksnd" updated
    • "/sound/photoViewer.bfsar" updated
  • "starter" application:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/starter_action.bksnd" updated
    • "/sound/starter.bfsar" updated
  • myPage applet:
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/myPage_action.bksnd" updated
    • "/sound/myPage.bfsar" updated
    • "/sound/myPage_module.bksnd" updated
  • maintenance applet:
    • "/common/shader/VarietyOceanShader_Nx.arc.szs" updated
    • "/lyt/": Various data updated.
    • "/message/": Various data updated.
    • "/message/CNzhT/" removed
    • "/sound/maintenance_action.bksnd" updated
    • "/sound/maintenance.bfsar" updated

BootImagePackages

RomFs changes: all files updated.

Using updated master-key: master_key_13 (previously master_key_12). See NCA for the KeyGeneration listing.

The anti-downgrade fuses were updated.

Kernel

  • No/minimal compiler update
  • Inverted boolean(s) in system control/targetsystem logic
    • All KTargetSystem fields have inverted meaning
    • KTargetSystem "is present" bool is now inverted
    • MersenneTwister "is initialized" bool is now inverted
  • KPageTable::ChangeProperties now does a data synchronization barrier after calling the set-attrs lambda
  • KPageTableImpl::MergePages now takes an argument for a callback to call after updating page table PTE entries.
    • All callers on NX are KPageTable::NoteUpdated
    • This causes TLB entries to be flushed/etc every time an entry is written instead of once at the end.
    • The callback is passed the disable-merge software-reserved bits from the entry, but this appears unused on NX.
      • This is probably for something in the Switch2 kernel/ifdef'd out.
  • KAddressSpaceInfo::GetBegin now takes a size as a third argument; this is unused on NX.
  • KAddressSpaceInfo::GetSize now performs more complicated logic based on the input type.
    • If address space not CreateProcessFlag_AddressSpace32BitWithoutAlias then the size is returned directly.
    • Otherwise:
      • If the type is Heap, it returns the requested size + the alias size.
      • If the type is Alias, it returns 0.
    • KProcess::InitializeByParam now sets m_max_process_memory to KAddressSpaceInfo::GetSize(..., Type_Heap) instead of getting the page table's heap size.
    • KPageTableBase::InitializeForProcess has simpler calculation of region extents for 32BitWithoutAlias now.
  • KPageTableBase::MapPageGroup_ now checks if the input permission has the execute bit set, and invalidates instruction cache if so.
    • This fixes a correctness bug; this was used to map pages as ReadExecute by JIT svcs, so stale instruction cache could result before.
    • KPageTableBase::UnmapPageGroup also now invalidates instruction cache after unmapping, if the memory had the execute bit set.
  • KSecureSystemResource now has better checking for the case where resource limit is nullptr.
    • This is impossible on NX.
    • This includes checks in GetUsed/TotalUserPhysicalMemorySize
    • KSecureSystemResource::Destroy now checks before calling ReleaseLimit
  • KPageTableBase::SetProcessMemoryPermission changes:
    • Function now uses PageTableOperation_ChangePermsAndRefresh instead of _ChangePermsAndRefreshAndFlushDataCache when the execute permission is set.
    • Data cache store + instruction cache invalidate is now done before operating instead of after
    • instruction cache invalidate is done after memory block manager is updated.
  • El0SynchronousExceptionHandler now always does tlbi vae1 instead of doing that or tlbi aside1 depending on status bits.
  • El1SynchronousExceptionHandler now always does tlbi vaae1 instead of doing that or tlbi vmalle1 depending on status bits.
    • NOTE: The checks Nintendo did previously have been bugged for many years and did not work.
    • These checks were fixed to actually work now.
  • UserspaceAccess changes:
    • UserspaceAccess functions are now all called through helper functions, which directly call UserspaceAccess::*
      • This is probably "UserspaceAccessChecked", and likely for parity with the supervisor mode access function they added in 19.0.0.
    • UserspaceAccess functions which previously had no callers have been deleted.
      • This includes UserspaceAccess::ClearUserMemory*.
  • HandleException changes:
    • After checking for thread termination, fixup is done on esr_el1/ec values.
      • If esr_ec is 0x20 or 0x24 (DataAbortEl0/InstructionAbortEl0):
        • If esr_el1 & 0x43F == 0x410 then pc is treated as 0
        • Otherwise, if pc is a kernel address, then esr_el1 has the ISFC bits set to hardcoded-value 4.
    • This is also done in ReturnFromException
  • Kernel::InitializeResourceManagers now initializes the managers in a different order.
  • KPageTableBase::FindFreeArea now uses a helper to compute the start and end of the guarded region to generate an address within.
    • The same logic is used (without helper, possibly inlined) in KMemoryBlockManager::FindFreeArea.

See Also

System update report(s):


Nintendo Switch System Versions
1.0.0
2.0.02.1.02.2.02.3.0
3.0.03.0.13.0.2
4.0.04.0.14.1.0
5.0.05.0.15.0.25.1.0
6.0.06.0.16.1.06.2.0
7.0.07.0.1
8.0.08.0.18.1.08.1.1
9.0.09.0.19.1.09.2.0
10.0.010.0.110.0.210.0.310.0.410.1.010.1.110.2.0
11.0.011.0.1
12.0.012.0.112.0.212.0.312.1.0
13.0.013.1.013.2.013.2.1
14.0.014.1.014.1.114.1.2
15.0.015.0.1
16.0.016.0.116.0.216.0.316.1.0
17.0.017.0.1
18.0.018.0.118.1.0
19.0.019.0.1
20.0.0