[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80553":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":10,"rankLanguage":10,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},80553,"NanoApps","nfzerox\u002FNanoApps","nfzerox","NanoApps Beta lets you run a collection of, and build your own, homebrew apps on iPod nano 7th generation.","",null,"C",8,1,0,3,41.2,"MIT License",false,"main",[],"2026-06-12 04:01:29","# NanoApps\n\n**Run custom homebrew apps on iPod nano 7th generation.**\n\nNanoApps is an early developer preview for hobbyists and tinkerers who want to build and run custom apps for iPod nano 7th generation. This is the very beginning of custom apps on nano: it needs a lot more research and polish before it can become a daily-driver app platform, but early results are promising, allowing you to run basic versions of [Paint](screenshots\u002FNanoApps_Paint.png), [Notes](screenshots\u002FNanoApps_Notes.png), [WAV Player](screenshots\u002FNanoApps_WAV_Player.png), and [Homebrew Launcher](screenshots\u002FNanoApps_Launcher.png) on nano today. Contributions are very welcome; see [Contributing to NanoApps](#contributing-to-nanoapps), join the [iPod nano Hacking Discord](https:\u002F\u002Fdiscord.gg\u002F7PnGEXjW3X), and share what you build on [r\u002Fipod](https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fipod\u002F).\n\n\u003Cimg src=\"screenshots\u002FNanoApps_Overview.png\" width=\"100%\" alt=\"NanoApps running on iPod nano 7th generation\">\n\n## What Is Included\n\nNanoApps includes [a small C SDK](sdk\u002Fhb_sdk.h), [sample apps](apps), [a launcher infrastructure](apps\u002Flauncher\u002Flauncher.c), [a custom app bundle format](sdk\u002Fhb_app_loader.c), and [Linux\u002FRaspberry Pi tools](tools) for installing and launching apps over the custom SCSI command channel provided by [ipod_sun_untethered](https:\u002F\u002Fgithub.com\u002Fnfzerox\u002Fipod_sun_untethered\u002Freleases).\n\nThis developer preview includes sample apps like [Paint](apps\u002Fpaint\u002Fpaint.c), [Notes](apps\u002Fnotes\u002Fnotes.c), [WAV Player](apps\u002Fwav_player\u002Fwav_player.c), [API Tests](apps\u002Fapi_tests\u002Fapi_tests.c), [Clock](apps\u002Fclock\u002Fclock.c), [Homebrew Launcher](apps\u002Flauncher\u002Flauncher.c), [Multitouch Test](apps\u002Fmultitouch_test\u002Fmultitouch_test.c), [Hardware Button Test](apps\u002Fbutton_test\u002Fbutton_test.c), [Brightness Test](apps\u002Fbrightness_test\u002Fbrightness_test.c), [Filesystem Demos](apps\u002Ffs_ls\u002Ffs_ls.c), and [Font Test](apps\u002Ffont_test\u002Ffont_test.c).\n\nSupported iPod features so far include [accelerometer](sdk\u002Fhb_accel.c), [.wav audio playback (unstable)](sdk\u002Fhb_audio.c), [brightness](sdk\u002Fhb_brightness.c), [battery](sdk\u002Fhb_battery.c), [hardware buttons](sdk\u002Fhb_button.c), [clock](sdk\u002Fhb_rtc.c), [display](sdk\u002Fhb_mipi.c), [filesystem](sdk\u002Fhb_fs.c), [multitouch](sdk\u002Fhb_touch.c), and [settings](sdk\u002Fhb_settings.c). You need a Linux machine to use [the current SCSI workflow](tools). This is tested on Raspberry Pi. [Help is greatly appreciated](#contributing-to-nanoapps) porting SCSI support to Windows and Mac.\n\n## Getting Started\n\nYou need:\n\n- [iPod nano 7th generation](https:\u002F\u002Fwww.backmarket.com\u002Fen-us\u002Fsearch?q=iPod+nano+7)\n- [Raspberry Pi](https:\u002F\u002Fwww.raspberrypi.com) or another [Linux machine](https:\u002F\u002Fwww.debian.org)\n- A Windows PC or Mac for flashing iPod firmware\n\nInstall common packages on [Raspberry Pi OS](https:\u002F\u002Fwww.raspberrypi.com\u002Fsoftware\u002Foperating-systems\u002F) \u002F [Debian](https:\u002F\u002Fwww.debian.org):\n\n```sh\nsudo apt update\nsudo apt install -y build-essential gcc-arm-none-eabi make sg3-utils curl python3 unzip\n```\n\nClone NanoApps and enter the repo:\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002Fnfzerox\u002FNanoApps.git\ncd NanoApps\n```\n\n## 1. Flash ipod_sun_untethered\n\nThe SCSI command channel comes from ipod_sun_untethered. On a Windows PC, visit the [ipod_sun_untethered releases page](https:\u002F\u002Fgithub.com\u002Fnfzerox\u002Fipod_sun_untethered\u002Freleases) in your browser, download the IPSW for your iPod nano 7 model, and restore it with [iTunes](https:\u002F\u002Fwww.apple.com\u002Fitunes\u002F).\n\nRecommended restore path: restore the iPod using iTunes on Windows so the iPod is FAT32 formatted. Mac-formatted iPods can work, but writing to an HFS formatted iPod from Linux\u002FRaspberry Pi is experimental.\n\nKnown Issue: The SCSI command channel installed by ipod_sun_untethered can cause the iPod to panic and reboot when connected to iTunes, Apple Devices, or Finder. After restoring, disconnect the iPod from your Windows PC and connect it to your Raspberry Pi or a Linux machine.\n\nIf you need to sync music, restore to [stock OS](https:\u002F\u002Ftheapplewiki.com\u002Fwiki\u002FFirmware\u002FiPod#iPod_nano_(7th_generation)) from [DFU mode](https:\u002F\u002Ftheapplewiki.com\u002Fwiki\u002FDFU_Mode#iPod_nano_(7th_generation)), sync music, then Shift + Click \"Check for Update\" and choose the [ipod_sun_untethered](https:\u002F\u002Fgithub.com\u002Fnfzerox\u002Fipod_sun_untethered\u002Freleases) firmware. When working on homebrew apps, connect your iPod to your Raspberry Pi or Linux machine.\n\n## 2. Try Sample Apps\n\nConnect iPod to Raspberry Pi. Check the disk names:\n\n```sh\nlsblk\n```\n\nMost setups look like this:\n\n- iPod disk: `\u002Fdev\u002Fsda`\n- iPod data partition: `\u002Fdev\u002Fsda1`\n\nInstall all bundled apps to `\u002FApps` on the iPod:\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda IPOD_PARTITION=\u002Fdev\u002Fsda1 .\u002Ftools\u002Finstall_apps.sh\n```\n\nThis builds app bundles into `apps\u002Fout\u002FApps`, mounts the iPod partition, copies everything to `\u002FApps`, and unmounts it.\n\nBefore launching apps or using the filesystem API, eject the iPod so the iPod OS remounts its filesystem:\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Feject.sh\n```\n\nImportant: the filesystem API and the launcher only work on-device after the iPod has been ejected out of Connected mode.\n\nAfter exiting an app, you may have to tap the iPod screen once to see the normal OS recover.\n\n## 3. Homebrew Launcher\n\nYou can launch the Homebrew launcher directly over SCSI:\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_launcher.sh\n```\n\nOr install the temporary Podcasts hijack for the current boot. You may need to disconnect and reconnect your iPod, since this requires being in \"Connected\" mode.\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda IPOD_PARTITION=\u002Fdev\u002Fsda1 .\u002Ftools\u002Fhijack_podcasts.sh\n```\n\nAfter that, tap Podcasts on the iPod home screen to open Homebrew Launcher. The hook is RAM-only and is lost after reboot.\n\nMost sample apps can be quit through the volume keys or the Home button. After quitting a homebrew app, tap the display for OS UI to refresh. Launching apps through the Homebrew launcher is experimental and not fully stable. Apps may be more crash prone than running them directly through SCSI commands in [Developing Apps](#4-developing-apps). If an app was launched from Homebrew via the Podcasts hijack, quitting that app may panic and reboot the device.\n\n## 4. Developing Apps\n\nBuild and run one app directly by picking one of the commands.\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh notes\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh paint\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh wav_player\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh clock\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh api_tests\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh brightness_test\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh button_test\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh counter\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh font_test\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh fs_demo\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh fs_gui\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh fs_ls\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh fs_read\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh fs_test\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh fs_write\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh multitouch_test\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh music_remote\n```\n\nAdd a new app by copying an existing app folder:\n\n```sh\ncp -R apps\u002Fcounter apps\u002Fmy_app\nmv apps\u002Fmy_app\u002Fcounter.c apps\u002Fmy_app\u002Fmy_app.c\n```\n\nThen edit `apps\u002Fmy_app\u002FMakefile`:\n\n```make\nAPP_NAME := my_app\nSRCS     := my_app.c\ninclude ..\u002F..\u002Fsdk\u002Fhb_app.mk\n```\n\nBuild it:\n\n```sh\nmake -C apps\u002Fmy_app\n```\n\nRun it:\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh my_app\n```\n\n## 5. Debug Crashes\n\nApps can write breadcrumbs to the trace buffer:\n\n```c\nhb_trace_reset();\nhb_trace_log(\"BOOT\", 0, 0);\nhb_trace_log(\"STEP\", 1, 0);\n```\n\nAfter a crash\u002Freboot, dump the trace:\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Fdump_trace.sh\n```\n\nFor a quick build-run-trace cycle:\n\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Ftrace_crash.sh paint\n```\n\n## WAV Player\n\nTo use the WAV player, create a \u002FWAV folder on your iPod, copy .wav files over, and launch WAV Player from SCSI or Homebrew Launcher. Tap the \"USR\" tab to play your .wav files. You can also play sound effects from the system resources partition.\n```sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Feject.sh\nSCSI_DEV=\u002Fdev\u002Fsda .\u002Ftools\u002Frun_app.sh wav_player\n```\n\nWAV playback is still unreliable and uses workarounds; treat it as experimental.\n\n## App Bundle Format\n\nApps live in `\u002FApps`:\n\n```text\n\u002FApps\u002FPaint.app\u002F\n  Paint\n  Name.txt\n  Icon.bmp\n```\n\nThe executable is a flat binary built by `hb_app.mk`. `Name.txt` is optional and supplies the launcher display name. `Icon.bmp` is not yet supported, and reserved for upcoming launcher UI work.\n\n## Taking Screenshots\n\nThe SDK includes an experimental direct-MIPI app screenshot path for Home+Power screenshots of homebrew apps. It is off by default to avoid performance issues when running apps. To enable it, change `#define NANOAPPS_ENABLE_APP_SCREENSHOTS 0` to `#define NANOAPPS_ENABLE_APP_SCREENSHOTS 1` in [hb_screenshot.c](sdk\u002Fhb_screenshot.c).\n\nWhen enabled, Home+Power writes `\u002FappshotNNNN.bmp` using the app's SDK shadow framebuffer. The OS screenshot API is also available as `hb_screenshot_take()`. It can screenshot drawn by the OS underneath our custom apps as `\u002FscreenshotNNNN.bmp`.\n\n## Contributing to NanoApps\n\nGood places to start:\n\n- [Build more custom apps](#4-developing-apps) with new functionality. Implement your favorite app or game.\n- Improve the [homebrew apps](apps), [launcher UI](apps\u002Flauncher\u002Flauncher.c), and [font rendering](sdk\u002Fhb_font.c), possibly with [LVGL](https:\u002F\u002Flvgl.io\u002F).\n- Improve [gesture and multitouch support](sdk\u002Fhb_touch.c), for example event listening instead of polling.\n- Reverse engineer more OS APIs for the [homebrew SDK](sdk\u002Fhb_sdk.h) and improve SDK reliability.\n- Make [audio .wav playback](sdk\u002Fhb_audio.c) reliable without fragile workarounds.\n- Build more user-friendly installation methods, such as automatic untethered injection into Podcasts or iTunes U.\n- Add Windows and Mac development\u002Finstall support in addition to Linux.\n\n[Pull requests](https:\u002F\u002Fgithub.com\u002Fnfzerox\u002FNanoApps\u002Fpulls) are welcome. Fork it, play with it, and discuss with fellow hackers on the [iPod nano Hacking Discord](https:\u002F\u002Fdiscord.gg\u002F7PnGEXjW3X). If you make something cool, post it, share it on [r\u002Fipod](https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fipod\u002F) and social media.\n","NanoApps 是一个能够让第七代iPod nano运行自制应用程序的项目。它为爱好者和技术发烧友提供了初步的开发预览，支持使用C语言编写的应用程序，并包括了画图、记事本、WAV播放器和自制应用启动器等基本示例应用。该项目通过自定义SCSI命令通道与Linux或Raspberry Pi进行交互，以实现应用程序的安装和启动。目前支持iPod的各种硬件特性如加速度计、屏幕亮度调整、触摸屏等。NanoApps非常适合对老设备进行二次开发感兴趣的用户以及希望探索iPod nano潜力的技术爱好者。",2,"2026-06-11 04:01:13","CREATED_QUERY"]