Skip to content

Azahar emulates Nintendo 3DS. It reads 7 files, none of them required: it starts games without them.

Run on its own, the app reads its files from this folder:

%APPDATA%/Azahar/

A user folder beside the executable is used instead when it exists.

Source: src/common/file_util.cpp:945-958, src/common/common_paths.h:24-25

About this profile
Detail Value
Type standalone + libretro
Classification Official port
Source https://github.com/azahar-emu/azahar
Version 2126.2, the tag at this revision
Revision azahar-emu/azahar@219d743a1e69
Profiled 2026-10-22
Profile YAML, JSON
Cores azahar, azahar-sa
Systems Nintendo 3DS
Data folder (Windows) %APPDATA%/Azahar/
Data folder (macOS) ~/Library/Application Support/Azahar/
Data folder (Linux) $XDG_DATA_HOME/azahar-emu/, else ~/.local/share/azahar-emu/
Data folder (Android) the folder picked in the setup wizard
Install this emulator's files

For Azahar inside RetroArch, Batocera or another setup. The installer finds your setup and its BIOS folder, then downloads only the files this emulator reads there and checks each one.

Open the Start menu. Type PowerShell and open it. Paste the line. Press Enter.

PowerShell
&([scriptblock]::Create((irm https://abdess.github.io/retrobios/i.ps1))) --emulator azahar
Technical notes

Successor to Citra (via Lime3DS). The libretro core lives in the same repository (src/citra_libretro) and is built with ENABLE_LIBRETRO, which forces the SDL2, Qt and web service frontends off. ref: CMakeLists.txt:40, CMakeLists.txt:109-111, CMakeLists.txt:165-187

The libretro core moves the user directory to <save_dir>/Azahar/, or to <system_dir>/Azahar/ when the frontend gives no save directory. The core option "Azahar Default" keeps the standalone data directory instead. ref: src/citra_libretro/core_settings.cpp:592-603, src/citra_libretro/core_settings.cpp:1048-1080, src/citra_libretro/environment.cpp:191-208

The core reports library_name "Azahar". ref: src/citra_libretro/environment.cpp:269

The standalone user directory is the one the data folder names per system, with citra-emu and lime3ds-emu (Citra and Lime3DS on Windows and macOS) kept as legacy locations. sysdata/, nand/ and sdmc/ sit under it. ref: src/common/common_paths.h:19-49, src/common/file_util.cpp:943-972, src/common/file_util.cpp:1023-1025

keys.txt has an AES-encrypted key blob compiled in, used when the file is absent. ENABLE_BUILTIN_KEYBLOB defaults to ON and is not among the options a libretro build forces off. ref: src/core/hw/aes/key.cpp:292-314, CMakeLists.txt:154, src/core/CMakeLists.txt:501-503

System archives (shared font, Mii data, country list, bad word list) are read from installed NAND titles. Open-source replacements embedded in the binary answer when the title is absent. ref: src/core/file_sys/archive_ncch.cpp:150-214, src/core/hle/service/apt/apt.cpp:211-276

boot9.bin and sector0x96.bin are defined but read by no code path. ref: src/common/common_paths.h:84-85

The .info declares no firmware.

7 files: 0 required, 7 optional. 2 have an HLE fallback.

In this collection: 7 in repo and 0 missing.

FileStatusHash

keys.txt

  • Path: Azahar/sysdata/keys.txt
  • Standalone path: sysdata/keys.txt, in the data folder
  • Read from: the save directory, not the BIOS directory (libretro build)
  • System: Nintendo 3DS
  • AES key slots, common keys and NFC secrets. Embedded encrypted blob used if missing: default_keys_enc, AES-CBC with a zero key and IV, the hashes are those of the decrypted text
Hashes and source
in repo HLE fallbackMD5 4812e96097b7

shared_font.bin

  • Path: Azahar/sysdata/shared_font.bin
  • Standalone path: sysdata/shared_font.bin, in the data folder
  • Read from: the save directory, not the BIOS directory (libretro build)
  • System: Nintendo 3DS
  • legacy path, tried when the shared font system archive fails to load
in repo HLE fallback-

seeddb.bin

  • Path: Azahar/sysdata/seeddb.bin
  • Standalone path: sysdata/seeddb.bin, in the data folder
  • Read from: the save directory, not the BIOS directory (libretro build)
  • System: Nintendo 3DS
  • game seed database for 9.6+ titles, an empty one is written if absent
Source
in repo-

otp.bin

  • Path: Azahar/sysdata/otp.bin
  • Standalone path: sysdata/otp.bin, in the data folder
  • Read from: the save directory, not the BIOS directory (libretro build)
  • System: Nintendo 3DS
  • console-unique OTP, AES-CBC decrypted with the keys.txt OTP key, then checked against the OTP magic and its SHA-256
in repo-

movable.sed

  • Path: Azahar/nand/private/movable.sed
  • Standalone path: nand/private/movable.sed, in the data folder
  • Read from: the save directory, not the BIOS directory (libretro build)
  • System: Nintendo 3DS
  • console-unique key seed, 288 bytes without the AES MAC block, 320 with it
Validation, source and failed check
  • On a failed signature check: warns and runs with the file
in repo-

SecureInfo_A

  • Path: Azahar/nand/rw/sys/SecureInfo_A
  • Standalone path: nand/rw/sys/SecureInfo_A, in the data folder
  • Read from: the save directory, not the BIOS directory (libretro build)
  • System: Nintendo 3DS
  • console serial and region. A failed signature is retried against every region
Validation, source and failed check
  • On a failed signature check: warns and runs with the file
in repo-

LocalFriendCodeSeed_B

  • Path: Azahar/nand/rw/sys/LocalFriendCodeSeed_B
  • Standalone path: nand/rw/sys/LocalFriendCodeSeed_B, in the data folder
  • Read from: the save directory, not the BIOS directory (libretro build)
  • System: Nintendo 3DS
  • friend code generation seed
Validation, source and failed check
  • On a failed signature check: warns and runs with the file
in repo-
.