One thing I've wanted for a while now is a lightweight collection of desktop applications. Since my preference is for cross-platform software, it would be nice to work with applications that don't lock you into a particular system. So, you could use them with X or Wayland or nano-x or even in framebuffer mode. Operating systems like XFDOS showed you can put together a desktop collection that not only works on Linux or Windows but would even port to platforms like FreeDOS.

The average post on desktop software typically considers XFCE or LXQT lightweight and most people often prefer the larger GUIs such as Qt or GTK+. I'd like to see an alternative that uses more minimal GUIs. TinyCore Linux does a nice job of using FLTK programs. EDE (Equinox Desktop Environment) was an interesting concept but their separate theme library meant FLTK programs needed to be forked to support their themes. There are few enough FLTK programs out there, so wanting forks of them just made it harder to find programs for that desktop.

I've looked at various lightweight GUIs and graphics libraries and the best candidates in my opinion are FLTK, SDL and Raylib. nuklear seems like it would be a great option, but there aren't a lot of useful desktop style programs written for it. I also noticed some annoying screen effects on one of the platforms it supported when I was using the scroll bars. Fox Toolkit was popular at one point. However, the API wasn't stable and some programs were built for one version while others worked on a different one. That decreased the total number of programs that were usable. I feel FLTK is better supported and has a more stable API than Fox Toolkit. Some systems use older versions of GTK such as GTK 1.2 or GTK 2. Amigo Linux had a great collection of working GTK 1.2 applications. The main drawback to GTK 1.2 is lack of internationalization support. I'd be very curious to hear if other projects are still trying to keep these options alive and if so, what applications are working with these GUI toolkits.

FLTK is already a cross-platform library. With the nano-x backend, it can work on any platform nano-x can support. With the update to version 1.4, FLTK made it easier to work on backend support. I've been attempting to get a SDL2 backend working with FLTK. That would allow it to work anywhere SDL2 can including in framebuffer mode.

SDL is highly portable. Unfortunately, applications for it might target 1.2.x or 2 or now even 3. I'm trying to update applications so they'll work on later versions of SDL without losing the flexibility of working on older ones as well. SDL is a graphics library. It's hard to find good support for GUI applications using it. I've tried several GUI libraries built on SDL. None of them are exactly what I'm looking for. Plus, very few have any desktop style applications built with them. PDCurses has a SDL2 backend. It had a SDL backend and I worked on adding SDL2 and SDL_ttf support. So, if you don't mind the look of text user interface style programs, you can run ncurses/PDCurses compatible applications using SDL and PDCurses.

Raylib with RayGUI is a newer alternative than the others. It's used more for games than desktop applications. However, it has a lot of potential.

With portability goals and minimal GUI libraries in mind, let's talk about what types of applications you can find that would work on a system like this. First, there are enough command line applications using ncurses that you could probably do most things you want to do on a desktop. However, it would be nice to have more options than just the ones you could also currently run in console mode.

With SDL, there's support for reader software like sdlbook and bard. The sdlbook program uses the mupdf library and djvulibre as backends and can support any format those libraries do. The bard program is a minimal ebook reader with text-to-speech support using flite. I have been experimenting with a fork of the last GPL'd version of mupdf. While it does not offer ebook or HTML support, it does offer a stable API. I've added cbr support and modified cbz support using SumatraPDF's LGL'd unarr library. I added SVG support with nanosvg. I'm working on adding support for other graphics such as GIF using stb. So with these programs, there's good coverage for reader applications.

While mupdf can be used to view graphics, I also like picaxo which can support any image format that SDL_image can handle including SVG. Another lightweight viewer is Perigee slideshow which can let you see several graphics in a sequence using slideshow transitions. While it already has a Win32 front end, I created a cross-platform GUI front end for it using FLTK. It's nice to be able to do more than view graphics in a desktop environment. The grafx2 and lodepaint programs seem like great options for editing graphics. Tuxpaint could be another alternative. Personally, I really like I.mage. While there was some work done to add SDL support to the GUI library I.mage uses, it was never completed. I don't think SDL alone is enough to replace the Win32 or GTK backends but FLTK might be able to do the job. I'd love to see some interest in trying to get I.mage working with FLTK. While there are other graphics editors out there that work in lightweight environments, those are the ones I found most promising.

Audio is harder to find support for. The flsox program is a cute, lightweight, FLTK based application. It can play and record audio, but it would be nice to have a decent audio editor. I have several command line wave utilities I've been experimenting with. One used conio to draw the waveform. I added support to use SDL in place of conio on systems where conio wasn't readily available. Fox Toolkit had a nice audio editor called Rezound, but that would require using yet another GUI library. So, the best option I've been able to find to date is apcstudio. It uses FLTK. I found the original source code rather unstable on many platforms but I switched around some of the C++ types to ones that were more readily available cross-platform and it seems more stable now. The one drawback I noticed is that it only displays one waveform which works fine for mono formats but not for waveforms with right and left channels. I was wondering if a command line tool could be used to split the waveform into right and left channel waveforms and then each could be edited separately. Then, a command line tool could reintegrate them again afterwards. It would be nice to try to get apcstudio debugged and see if people think there are any features missing that might be easy to add. It's easier to find audio playback software than audio editing software. Programs like Timidity++ and Milkytracker are nice options to have. Multimedia players are also easy to find for lightweight desktops. Some have versions that run in framebuffer. I happen to really like the flvlc and flxine front ends to popular multimedia libraries.

Other useful desktop applications usually include a calculator like flcalc and a calendar or pim like fltdj. xdiskusage is a nice FLTK based GUI front end for du. diffh gives a graphical view of diff that's viewable in many browsers. I typically don't use file managers but I prefer the two pane variety if I do use one. The SDL based fm program offers a nice, cross-platform portable file manager.

The biggest gap is office suite style software such as a word processor and spreadsheet. While there are some ncurses based spreadsheets, the FLTK based sprsht program makes a nice alternative to console applications. There are some FLTK based editors and even a few SDL ones. I personally prefer using a programming editor over a word processor. Many programming editors support custom extensions. I use SciTE with lua scripting and its ability to execute external applications. I've been able to incorporate hunspell for spell checking into customizable programming editors such as SciTE. Unfortunately, SciTE requires a heavyweight GUI. It could be built with an older version of GTK but that would require adding another GUI to my list of desktop GUI libraries to support. I've looked for options that also use the scintilla editing widget. The best alternative I could find was Fxite (which would require Fox Toolkit) or textadept which can be built with pdcurses. The fldev program is a lightweight FLTK based programming editor. It's no replacement for SciTE but it was able to work as a GUI front end to gdb at one point. It would be nice to restore that functionality in a cross-platform compatible way. The wordgrinder program is console based but seems to be the most word processor like of various text user interface options. If one wanted to incorporate the TV libraries, there are even more console based text editor applications that could be potential options. I still haven't come up with a clear solution. Would be interested to hear what others would think could make a suitable lightweight GUI editor/word processor.

Communications programs are another key area. There is also a huge gap for lightweight GUI alternatives in this space. There are mail clients like FLTK based FlMail and hermail. I happen to be a big fan of Sylpheed. To get it working in a more lightweight environment would involve using an older version of GTK. An option that has a lot of potential is to get the FLTK based Postoffice program working again. Maybe a command line or library based (possibly curl) implementation of SMTP and POP3 could be added to the Postoffice program. I have been able to get it to build on later versions of FLTK and worked on trying to make the interface more stable. The main thing missing at this point is to make the mail protocols more up-to-date and cross-platform portable. There are several very popular ncurses based email clients as well. Browser options include Netrider, Fifth, D+ and Dillo. While none of these is a perfect solution, they do give some minimal browsing support. A SDL based Gemini browser could also make a useful option. There is a very nice FLTK based RSS reader. However, it's just a reader and requires another program like curl to download the RSS feeds and make them available. Putty has command line options for ssh and sftp.

Have I forgotten anything? What else would a good lightweight desktop require? Is anyone besides me interested in a lightweight desktop like this? Feel free to continue this discussion on Mastodon: https://fosstodon.org/@lmemsm I'd love to get a project going to provide an ultra lightweight, highly portable desktop alternative that's not tied down to any particular display server, windowing systems or operating system. If anyone wants to test out some of these applications or brainstorm how to improve them, please let me know.
I've been using SDL for a long while now. The newest version of SDL 3 will require migrating from SDL 2 versions. Like the switch from 1.2.15 to 2, it will once again break backward compatibility. It will remove support for several older platforms and change the API. The good news is that SDL 3 will have a compatibility layer much sooner than SDL 2 did. I'm still patching some of the SDL 1.2.15 programs I use so that they'll work with either SDL 2 or SDL 1.2.15. In my experiences with it so far, patching seems to work better than using the compatibility layer for SDL 1.2 support. SDL 3 will make more use of the GPU and modern graphics libraries and drivers. From what I've read, it'll introduce a new, portable shader language. So, you may now need more than just a C compiler to write programs. I prefer working with a minimal number of languages and compilers and am not looking forward to some of the new changes SDL 3 may bring. This leaves me wondering if I should seek another graphics/GUI library for more of my development.

I've looked into GUIs, TUIs and graphics libraries in the past and I really wasn't thrilled with most of the options out there. Besides SDL, Raylib seems very promising. It doesn't have the variety of FLOSS applications SDL seems to though. Using OpenGL directly can be just as problematic as SDL because its API keeps changing as well. So, GLFW may not be a great strategy either if the OpenGL compatibility it makes accessible has a changing API. Nano-X seems fairly stable and works on a variety of operating systems. Allegro is often used for applications similar to those created by SDL. However, differences between the versions it supports and what platforms those versions offer is also noticeable. I often use pdcurses with an SDL backend, but pdcursesmod works very well on Windows using Win32 and can also support console mode in Windows and BSD-curses and ncurses offers some benefits over pdcurses on POSIX systems. So, while I've found pdcurses built with SDL highly portable and useful (I even added SDL 2 and SDL2_ttf support), programs that build with pdcurses should port easily to other libraries that don't require SDL.

There are some platforms that only work with SDL 1.2.x and are not supported by later versions of SDL. The same will most likely be true for SDL 2 compared to the latest version of SDL 3. I'm wondering if I should keep using and patching the current SDL 2 and 1.2.15 libraries I've been working with or just make the switch to a new library. I'm also wondering if other developers are in the same situation, trying to determine whether to continue with what they have or port what they can to yet another graphics library or a later version of SDL. If there's interest from other developers in continuing to use older versions of SDL because of platforms they supported or portability issues, it would be nice to collaborate in continuing to maintain these libraries. It's easier to find security issues and bugs when there are a group of users rather than just one programmer using it.

I am currently working on backporting the latest SDL 2 helper libraries so that as many as possible work with SDL 1.2.15. That way SDL 1.2.15 can make use of newer features like loading and rendering SVG images, better utf-8 support, etc. I have a patched version of SDL2_ttf that adds functionality needed for sdl_unifontview to work properly. I've also been adding an alternative build system that doesn't require GNU autotools or cmake. It instead uses CDetect and make.

As one of the earlier contributors to MinGW, I use the original MinGW port to Windows and try to avoid the hostile fork of MinGW whenever possible. Unfortunately, many libraries do not maintain compatibility with the original MinGW compiler. The newer the libraries are, the less compatible they typically are. So, while SDL 1.2.15 is no problem to build with MinGW. SDL 2.26.5 is a nightmare. I'm currently looking into some issues related to building it with the original MinGW now. I maintain my own version of w32api based on the last public domain release and have been trying to add enough functionality to it to compile many of the more modern standard FLOSS libraries. I also built SDL 2 on AIX at one point to experiment with running SDL applications on AIX via X-forwarding. So, I have patches for that as well.

I've started a thread on Mastodon:
https://fosstodon.org/@lmemsm/110413981373101611
Would be very interested to hear how others are dealing with the SDL upgrade path and whether they will be upgrading, staying with what they have or seeking other libraries. If anyone's considering the route of maintaining older libraries, I'd be very interested in sharing resources and patches.

Raylib

Jan. 20th, 2022 02:21 pm
I've covered programs designed with lightweight GUIs and text user interface libraries such as SDL, FLTK and pdcurses in previous posts. Another interesting and promising cross-platform lightweight screen library is raylib. There's a GUI for it called raygui. There's even a cross-platform audio library called raudio. Programs written with raylib have been ported to several computers including Linux, Windows and Mac. It can be used to write programs for mobile devices. The audio library works on multiple platforms including mobile devices as well.

You can find raylib and several helpful libraries you can use with it at:
https://github.com/raysan5

I haven't had a chance to check out many of the programs that are built with raylib. However, you can find a group of example games at:
https://github.com/raysan5/raylib-games
I've been trying to find a decent jigsaw puzzle game written in C. There is a photo puzzle game for raylib at:
https://github.com/klaytonkowalski/game-photo-puzzle

There's also an experimental GUI editor here:
https://github.com/Demizdor/experimental-raygui-editor

I'll add other interesting raylib examples as I find them. Feel free to share you're own as well.

April 2026

S M T W T F S
   1234
567891011
121314151617 18
19202122232425
2627282930  

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 26th, 2026 09:39 pm
Powered by Dreamwidth Studios