Open-source project
complexlogic/flex-launcher avatar
complexlogic/flex-launcher

Flex Launcher is a ten foot interface for a couch PC, and its author has moved on

A customizable HTPC application launcher for Windows and Linux

540 stars34 forksCUnlicense

At a glance

What is it?
Flex Launcher is a small C launcher for Windows and Linux that puts your applications behind a TV friendly menu you can drive with a remote or gamepad. The README states there are no feature releases planned and that development effort has moved to a successor project.
Who is it for?
Adopt Flex Launcher if you have a HTPC or a Raspberry Pi on a television and you want a launcher that needs neither keyboard nor mouse, and you are content with a menu defined entirely in an INI file. Do not adopt it if you need features that do not exist yet, because the README says no feature releases are planned and that the author's effort has moved to the Big Launcher project.
Can I use it commercially?
Yes. Unlicense is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 108 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A launcher built for the ten foot interface, not the desktop

Flex Launcher is described as a customizable application launcher and front end designed with a TV friendly 10 foot user interface, intending to mimic the look and feel of a streaming box or game console. It lets you launch applications on your HTPC or couch gaming PC entirely by use of a TV remote or a gamepad. No keyboard or mouse required.

That last sentence is the whole product definition, and it explains the size of the project. A launcher for a desktop has no reason to hide the mouse cursor, and no reason to treat the arrow keys as the primary navigation. Flex Launcher does, because the device it targets is a television with a sofa in front of it, and the person using it is holding a remote.

The technical shape follows from the same constraint. The primary language is C, the licence is the Unlicense, and the credits name SDL and its subprojects SDL_image and SDL_ttf, plus Nanosvg for SVG rendering and inih for the configuration parser. SDL is what gives it the input handling and rendering, and inih is what reads the INI file that defines the menus.

The primary language being C rather than C++ is a reasonable choice for something meant to run on a Raspberry Pi with limited resources, and it explains the SDL2 tag on the repository along with the video and frontend tags.

The homepage is complexlogic.github.io/flex-launcher, the repository is not archived, and the last push was on 2026-07-07.

The config file lookup order, and why the packaged config gets copied

Flex Launcher uses an INI file to configure the menus and settings, and on startup the program searches for a file named config.ini in four locations, in order.

First the current working directory. Second, the directory containing the flex-launcher executable. Third, on Linux only, ~/.config/flex-launcher. Fourth, on Linux only, /usr/share/flex-launcher.

That search order is why the installation instructions have a step most people skip. The Linux packages install a default config file and assets to /usr/share/flex-launcher, and the README strongly recommends not editing that file directly, because it will be overwritten if you upgrade to a later version of Flex Launcher. Instead you copy those files to your home directory and edit them there.

The copy is two commands.

bash
cp -r /usr/share/flex-launcher ~/.config
sed -i "s|/usr/share/flex-launcher|$HOME/.config/flex-launcher|g" ~/.config/flex-launcher/config.ini

The sed step matters as much as the copy. The default config refers to the assets by their installed absolute path, so without rewriting that path the launcher would read your edited copy and still look for images in the location that gets replaced on upgrade.

Once a config file sits in one of the four searched locations, the launcher can be started by double clicking the executable or adding it to autostart. If your config is in a non-standard location, you have to pass the path on the command line.

bash
flex-launcher -c /path/to/config.ini

The README also warns that the shipped default config is intended strictly for demonstration purposes, and that trying to start one of the applications may do nothing at all, because the install path differs on your system or the application is not installed.

Installing on Windows, Linux, and a Raspberry Pi

Executables are available for Windows 64 bit, Linux x86-64 and Raspberry Pi, and there is a compilation guide for building the program yourself.

On Windows the instruction is to download the win64 .zip from the latest release and extract it to a directory of your choice. The README says Flex Launcher should be run on an up-to-date Windows 10 system, or Windows 11.

Linux users get binary packages from the release page for APT and pacman based distributions. The APT package is compatible with Debian Bullseye and later, and Ubuntu 21.04 and later.

bash
wget https://github.com/complexlogic/flex-launcher/releases/download/v2.2/flex-launcher_2.2_amd64.deb
sudo apt install ./flex-launcher_2.2_amd64.deb

The pacman route uses a zstd package with a different naming convention.

bash
wget https://github.com/complexlogic/flex-launcher/releases/download/v2.2/flex-launcher-2.2-1-x86_64.pkg.tar.zst
sudo pacman -U flex-launcher-2.2-1-x86_64.pkg.tar.zst

And for the Raspberry Pi the package is the arm64 build, compatible with Raspbian Bullseye and later, 64 bit only.

bash
wget https://github.com/complexlogic/flex-launcher/releases/download/v2.2/flex-launcher_2.2_arm64.deb
sudo apt install ./flex-launcher_2.2_arm64.deb

Note the version in the URLs, v2.2, which matches the most recent release tag dated 2024-11-24. The Raspberry Pi package being 64 bit only is worth knowing before you plan a 32 bit image.

Remotes are not decoded here, gamepads are, but disabled

The controls section splits into two behaviours that are easy to conflate.

For a TV remote, Flex Launcher does not feature built-in decoding of IR or CEC signals. If you plan to use a TV remote, it is assumed that these signals are decoded by the OS or another program and mapped to keyboard presses, which can then be received by Flex Launcher.

So the remote support is a consequence of something else doing the work. Whatever converts the infrared or CEC signal into a key event is the piece you need, and Flex Launcher only sees the keyboard.

Gamepad controls are built-in to the program, but are disabled by default. To enable them you open your configuration file and, under the Gamepad section, change the Enabled setting from false to true. After that the gamepad controls should Just Work for most users, and if your gamepad is not recognised automatically, or you want to change the default controls, the documentation has a gamepad controls section.

The keyboard baseline is small. The arrow keys move the highlight cursor left and right, Enter selects the current entry, backspace goes back to the previous menu if applicable, and Esc quits the program.

That is a small set of inputs, and it is the direct consequence of the ten foot interface. There is no text entry, no search box, and no mouse handling to speak of, because a remote has none of those.

Debug mode, the log file location, and what it tells you

Flex Launcher has a debug mode, enabled with a single flag.

bash
flex-launcher -d

The output goes to a logfile named flex-launcher.log, in the same directory as flex-launcher.exe on Windows, and in ~/.local/share/flex-launcher on Linux.

The two paths differ because the two platforms have different conventions for application data, and it is worth knowing which one to look in before you conclude that nothing was written. On Windows the log lands next to the executable, which means if you installed the launcher in a directory you do not have write access to, the log will not appear there either.

The documentation list in the README shows where the rest of the detail lives. There is a configuration document with sections on configuring Flex Launcher and on gamepad controls, a general setup guide with separate Windows and Linux specific guides, and a compilation guide.

The repository layout backs this up: a docs/ directory holding those files, a config/ directory, an assets/ directory for the images and fonts the launcher draws, a src/ tree, a CMakeLists.txt for the build, a vcpkg.json, a CHANGELOG and an UNLICENSE file at the top level.

No feature releases are planned, and the successor project is named

This is the section an evaluator should read first, because it changes what Flex Launcher is.

The README says Flex Launcher has reached a mature state, and there are currently no feature releases planned for the future. The author has started a new HTPC launcher project, Big Launcher, which is similar in nature but aims to provide a more advanced, Smart TV-like user interface. Future development effort will be focused on that new project, while Flex Launcher will still be maintained for bugfixes and dependency updates.

So the state of the project is clear and unusual. There is a working, mature application. There are no planned features. There are bugfixes and dependency updates, and the last push was on 2026-07-07, with the newest tagged release being v2.2 from 2024-11-24 and v2.1 from 2023-01-07 before it.

That gap between the last release and the last commit tells you the maintenance is real but small. Fixes and dependency refreshes are landing; new behaviour is not.

For an adopter, the practical question is whether the feature set you need already exists. The menu system, the gamepad support, the remote-through-keyboard approach and the INI configuration are all there and working. Anything else is not coming, and if you need something more, Big Launcher is where the author says the work is going.

Where Flex Launcher is the wrong tool

Three cases, and the first is about scope rather than quality.

If you need a Smart TV style experience with richer navigation, live content and a modern look, this is the wrong project and the author says so. Big Launcher is the stated successor and has the author's development effort. Flex Launcher is deliberately simple, and its simplicity is a design property rather than an unfinished state.

The second is a living room where the remote does not already produce key presses. Flex Launcher does not decode IR or CEC itself, so something on the system has to do that translation. On a Raspberry Pi running a desktop, that is usually somebody else's job, and if you are planning a clean install with no extra software, the remote will not work until you add it.

The third is a multi-user or multi-machine setup where you want central management. The configuration is a single INI file on each machine, with no shared state and no remote configuration, so a dozen HTPCs in an office means a dozen config files to keep in step by hand. That is a reasonable trade for a personal media box and a poor one for a deployment.

One licensing note. The licence is the Unlicense, which is a public domain dedication, so there are no obligations to worry about in that direction. The credits do matter if you are redistributing a build, since SDL and its subprojects carry their own licences, and Nanosvg and inih are used as libraries inside the project rather than vendored, so their terms apply to the binaries you ship.

Editorial conclusion

Adopt Flex Launcher if you have a HTPC or a Raspberry Pi on a television and you want a launcher that needs neither keyboard nor mouse, and you are content with a menu defined entirely in an INI file. Do not adopt it if you need features that do not exist yet, because the README says no feature releases are planned and that the author's effort has moved to the Big Launcher project. Verify first which config path your install actually reads, since the Linux packages install a config under /usr/share/flex-launcher that is overwritten on upgrade, and copy it into your home directory before you edit anything.

Frequently asked questions

What is Flex Launcher?

It is a customizable application launcher and front end with a TV friendly 10 foot user interface, intended to mimic the look and feel of a streaming box or game console. It runs on Windows and Linux including Raspberry Pi, and can be driven entirely by a TV remote or a gamepad with no keyboard or mouse.

How do I install Flex Launcher on Debian or Ubuntu?

Download the .deb from the release page and install it locally, with wget followed by sudo apt install ./flex-launcher_2.2_amd64.deb. The package is compatible with Debian Bullseye and later and Ubuntu 21.04 and later.

Where does Flex Launcher look for its config.ini file?

On startup it searches the current working directory, then the directory containing the flex-launcher executable, then on Linux only ~/.config/flex-launcher, then /usr/share/flex-launcher. For a non-standard location you have to pass the path with flex-launcher -c /path/to/config.ini.

How do I enable gamepad controls in Flex Launcher?

Gamepad controls are built in but disabled by default. Open the configuration file and, under the Gamepad section, change the Enabled setting from false to true. If your gamepad is not recognised automatically, the configuration documentation covers changing the default controls.

Is Flex Launcher still being developed?

The README says Flex Launcher has reached a mature state with no feature releases planned, and that the author's development effort has moved to a new project called Big Launcher, while Flex Launcher is still maintained for bugfixes and dependency updates. The last push was on 2026-07-07 and the most recent release is v2.2.

Official sources

  1. complexlogic/flex-launcher on GitHub
  2. License: Unlicense
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/complexlogic-flex-launcher.svg)](https://hysenlabs.com/projects/complexlogic-flex-launcher)

Was this useful?