WikiFlip
June 30, 2026 ยท View on GitHub
WikiFlip is a Flipper Zero FAP application that provides an offline cybersecurity dictionary. Version 1.3 uses static C data, so it builds without microSD parsing, external files, or network access at runtime.
English is the default language. Spanish is available from the in-app Settings menu.
Content
WikiFlip includes 100 terms in English and the same 100 terms in Spanish:
Protocols 12
OWASP Top 10:2025 10
NIST 10
CVE 12
Blue Team 12
Red Team 12
Threat Intelligence 10
Hardware Hacking 12
ISO 10
Settings Language selector
The OWASP category includes the full OWASP Top 10:2025:
A01:2025 - Broken Access Control
A02:2025 - Security Misconfiguration
A03:2025 - Software Supply Chain Failures
A04:2025 - Cryptographic Failures
A05:2025 - Injection
A06:2025 - Insecure Design
A07:2025 - Authentication Failures
A08:2025 - Software or Data Integrity Failures
A09:2025 - Security Logging and Alerting Failures
A10:2025 - Mishandling of Exceptional Conditions
Architecture
WikiFlipApp
Gui*
ViewDispatcher*
Submenu* categories_menu
Submenu* terms_menu
Submenu* settings_menu
Widget* definition_widget
FuriString* definition_buffer
WikiFlipLanguage language
WikiFlipCategory* current_category
The GUI uses ViewDispatcher with four views:
WikiFlipViewCategories -> main category submenu
WikiFlipViewTerms -> term submenu for selected category
WikiFlipViewSettings -> language selector submenu
WikiFlipViewDefinition -> scrollable definition widget
Long definitions are rendered with widget_add_text_scroll_element(). D-pad Up/Down provides native vertical scrolling.
Navigation
Open app
-> Categories
OK: open category terms
Settings: open language selector
Back: exit
-> Settings
OK: choose English or Spanish
Back: return to categories
-> Terms
OK: open definition
Back: return to categories
-> Definition
Up/Down: scroll
Back: return to terms
Adding Terms
- Open
wikiflip.c. - Find the target category arrays for both languages:
static const WikiFlipTerm wikiflip_red_team_terms_en[] = {
{
.title = "C2",
.definition = "Definition...",
},
};
static const WikiFlipTerm wikiflip_red_team_terms_es[] = {
{
.title = "C2",
.definition = "Definicion...",
},
};
- Add the matching entry to both arrays:
{
.title = "New Term",
.definition =
"Long technical definition. Use \\n\\n for paragraph breaks "
"and adjacent string literals to keep the source readable.",
},
WIKIFLIP_ARRAY_SIZE() calculates the term count at compile time.
Adding Categories
- Create one array per language:
static const WikiFlipTerm wikiflip_forensics_terms_en[] = {
{
.title = "Timeline",
.definition = "Chronological sequence of events used in forensic analysis.",
},
};
- Register the English category in
wikiflip_categories_en[]and the Spanish category inwikiflip_categories_es[]:
{
.name = "Forensics",
.terms = wikiflip_forensics_terms_en,
.term_count = WIKIFLIP_ARRAY_SIZE(wikiflip_forensics_terms_en),
},
Building With uFBT
From the project root:
ufbt
Expected output:
dist/wikiflip.fap
Install and launch on a USB-connected Flipper:
ufbt launch
Building Inside Firmware
Copy the project into applications_user for official firmware, Momentum, or another FBT-compatible fork:
Copy-Item -Recurse "C:\Users\R0G3R\Documents\Tools\Flipper Zero\WikiFlip" "C:\path\firmware\applications_user\WikiFlip"
Build:
.\fbt.cmd build APPSRC=applications_user\WikiFlip
Launch:
.\fbt.cmd launch APPSRC=applications_user\WikiFlip
Build by App ID:
.\fbt.cmd fap_wikiflip
Icon
The FAP icon is:
images/wikiflip_10px.png
It is a 10x10 px, 1-bit PNG with a compact book silhouette and WF lettering.
Flipper Lab Submission
Flipper Lab apps are published through the official flipperdevices/flipper-application-catalog repository. See:
docs/flipper_lab_submission.md
Catalog manifest template:
docs/manifest.yml.example
Memory Lifecycle
Allocation:
malloc(WikiFlipApp)
furi_record_open(RECORD_GUI)
view_dispatcher_alloc()
submenu_alloc()
submenu_alloc(settings_menu)
widget_alloc()
furi_string_alloc()
view_dispatcher_add_view()
view_dispatcher_attach_to_gui()
Free:
view_dispatcher_remove_view()
widget_free()
submenu_free(settings_menu)
submenu_free()
view_dispatcher_free()
furi_string_free()
furi_record_close(RECORD_GUI)
free(WikiFlipApp)
This order prevents the dispatcher from retaining references to already-freed views.