Trusted Software Excellence across Desktop and Embedded
Take a glance at the areas of expertise where KDAB excels ranging from swift troubleshooting, ongoing consulting and training to multi-year, large-scale software development projects.
Find out why customers from innovative industries rely on our extensive expertise, including Medical, Biotech, Science, Renewable Energy, Transportation, Mobility, Aviation, Automation, Electronics, Agriculture and Defense.
High-quality Embedded Engineering across the Stack
To successfully develop an embedded device that meets your expectations regarding quality, budget and time to market, all parts of the project need to fit perfectly together.
Learn more about KDAB's expertise in embedded software development.
Where the capabilities of modern mobile devices or web browsers fall short, KDAB engineers help you expertly architect and build high-functioning desktop and workstation applications.
Extensible, Safety-compliant Software for the Medical Sector
Create intelligent, patient-focused medical software and devices and stay ahead with technology that adapts to your needs.
KDAB offers you expertise in developing a broad spectrum of clinical and home-healthcare devices, including but not limited to, internal imaging systems, robotic surgery devices, ventilators and non-invasive monitoring systems.
Building digital dashboards and cockpits with fluid animations and gesture-controlled touchscreens is a big challenge.
In over two decades of developing intricate UI solutions for cars, trucks, tractors, scooters, ships, airplanes and more, the KDAB team has gained market leading expertise in this realm.
Build on Advanced Expertise when creating Modern UIs
KDAB assists you in the creation of user-friendly interfaces designed specifically for industrial process control, manufacturing, and fabrication.
Our specialties encompass the custom design and development of HMIs, enabling product accessibility from embedded systems, remote desktops, and mobile devices on the move.
Legacy software is a growing but often ignored problem across all industries. KDAB helps you elevate your aging code base to meet the dynamic needs of the future.
Whether you want to migrate from an old to a modern GUI toolkit, update to a more recent version, or modernize your code base, you can rely on over 25 years of modernization experience.
KDAB offers a wide range of services to address your software needs including consulting, development, workshops and training tailored to your requirements.
Our expertise spans cross-platform desktop, embedded and 3D application development, using the proven technologies for the job.
When working with KDAB, the first-ever Qt consultancy, you benefit from a deep understanding of Qt internals, that allows us to provide effective solutions, irrespective of the depth or scale of your Qt project.
Qt Services include developing applications, building runtimes, mixing native and web technologies, solving performance issues, and porting problems.
KDAB helps create commercial, scientific or industrial desktop applications from scratch, or update its code or framework to benefit from modern features.
Discover clean, efficient solutions that precisely meet your requirements.
Boost your team's programming skills with in-depth, constantly updated, hands-on training courses delivered by active software engineers who love to teach and share their knowledge.
Our courses cover Modern C++, Qt/QML, Rust, 3D programming, Debugging, Profiling and more.
The collective expertise of KDAB's engineering team is at your disposal to help you choose the software stack for your project or master domain-specific challenges.
Our particular focus is on software technologies you use for cross-platform applications or for embedded devices.
Since 1999, KDAB has been the largest independent Qt consultancy worldwide and today is a Qt Platinum partner. Our experts can help you with any aspect of software development with Qt and QML.
KDAB specializes in Modern C++ development, with a focus on desktop applications, GUI, embedded software, and operating systems.
Our experts are industry-recognized contributors and trainers, leveraging C++'s power and relevance across these domains to deliver high-quality software solutions.
KDAB can guide you incorporating Rust into your project, from as overlapping element to your existing C++ codebase to a complete replacement of your legacy code.
Unique Expertise for Desktop and Embedded Platforms
Whether you are using Linux, Windows, MacOS, Android, iOS or real-time OS, KDAB helps you create performance optimized applications on your preferred platform.
If you are planning to create projects with Slint, a lightweight alternative to standard GUI frameworks especially on low-end hardware, you can rely on the expertise of KDAB being one of the earliest adopters and official service partner of Slint.
KDAB has deep expertise in embedded systems, which coupled with Flutter proficiency, allows us to provide comprehensive support throughout the software development lifecycle.
Our engineers are constantly contributing to the Flutter ecosystem, for example by developing flutter-pi, one of the most used embedders.
KDAB invests significant time in exploring new software technologies to maintain its position as software authority. Benefit from this research and incorporate it eventually into your own project.
Start here to browse infos on the KDAB website(s) and take advantage of useful developer resources like blogs, publications and videos about Qt, C++, Rust, 3D technologies like OpenGL and Vulkan, the KDAB developer tools and more.
The KDAB Youtube channel has become a go-to source for developers looking for high-quality tutorial and information material around software development with Qt/QML, C++, Rust and other technologies.
Click to navigate the all KDAB videos directly on this website.
In over 25 years KDAB has served hundreds of customers from various industries, many of them having become long-term customers who value our unique expertise and dedication.
Learn more about KDAB as a company, understand why we are considered a trusted partner by many and explore project examples in which we have proven to be the right supplier.
The KDAB Group is a globally recognized provider for software consulting, development and training, specializing in embedded devices and complex cross-platform desktop applications.
Read more about the history, the values, the team and the founder of the company.
When working with KDAB you can expect quality software and the desired business outcomes thanks to decades of experience gathered in hundreds of projects of different sizes in various industries.
Have a look at selected examples where KDAB has helped customers to succeed with their projects.
KDAB is committed to developing high-quality and high-performance software, and helping other developers deliver to the same high standards.
We create software with pride to improve your engineering and your business, making your products more resilient and maintainable with better performance.
KDAB has been the first certified Qt consulting and software development company in the world, and continues to deliver quality processes that meet or exceed the highest expectations.
In KDAB we value practical software development experience and skills higher than academic degrees. We strive to ensure equal treatment of all our employees regardless of age, ethnicity, gender, sexual orientation, nationality.
Interested? Read more about working at KDAB and how to apply for a job in software engineering or business administration.
In a recent email, KDABian Leon Matthes highlighted some of his go-to command line tools for everyday use on Unix. His recommendations sparked a lively exchange among our colleagues, each sharing their own favorite utilities.
Many of these tools offer efficient alternatives to standard Unix programs, speeding up the workflow or otherwise enriching the development experience.
This article aims to serve as a resource for the wider community, encouraging others to explore these tools and upgrade their command line setup for improved productivity.
The following common Unix tools are listed in this document, with their alternatives specified in their respective sections:
Additionally, there are some tools here that do not replace common programs, but are extremely useful when working in a shell environment. These are broken into two broad categories:
Many of these tools can be considered examples of the “rewrite it in Rust” approach (RIIR), which in this document will be denoted with Ferris the crab: 🦀
Finally, there is a bonus Rust crate listed at the end that is helpful for writing CLI programs of your own.
Note: for scripting, stick with standard Unix tools, as they’re more widely distributed and will work in most other Unix environments. The tools in this article are meant to improve quality of life working within your own shell environment on a daily basis.
autojump is an alternative to cd, invoked with the command j. It jumps to what it determines to be the best fit for whatever directory name you give it. For example, j cxx-qt will change directory to the cxx-qt directory, even if it’s nested several levels deep from the current working directory.
If autojump doesn’t prioritize a directory correctly, its priority weight can be increased or decreased. j -i XXX will increase the priority weight of the current working directory by XXX, while j -d XXX will do the opposite and decrease the weight accordingly.
autojump also supports opening a file browser at a matched location rather than cd'ing into it, by invoking jo rather than j.
Unfortunately, autojump has not been in active development for the past two years, and can break in some environments. The next tool, zoxide, will be more reliable if autojump breaks for you.
zoxide is a similar program to autojump, actually drawing inspiration from it. Invoked with the command z, it remembers paths that have been visited in the past and matches the best fitting directory. The tool also supports interactive selection of the correct match via the zi command, which uses the tool fzf for fuzzy finding. fzf is listed later in this article.
zoxide can also be used the same way as plain cd, and can target absolute and relative paths. It can be configured to be invoked from the j and ji commands, or even cd to fully replace the cd command.
Finally, it is implemented in Rust, resulting in better performance than autojump.
lsd is a more feature-rich version of ls, including colors, icons, tree-view, additional formatting, and more. It is also highly configurable through a yaml config file.
eza is a small, fast ls rewrite that knows about symlinks, extended attributes, and git, and has support for hyperlinks. Similar to lsd, it supports colors and icons, which are configurable with a yaml config file.
This project has several clients written in different languages. The most mature client is an npm package.
tldr is an alternative to using man for most common use cases. It is a collection of pages that provides brief descriptions and usage examples for loads of programs, standard Unix and otherwise. It’s much faster if you don’t need to read about every option in detail in order to find the correct way to invoke a command or select the proper option quickly.
For example, if the man page for tar is too long to read when looking for the right option to do something, simply running tldr tar will show a list of examples that will usually have the options you need.
cheat.sh and its associated shellscript cht.sh, provide access to a superpowered aggregation of cheatsheets for programming languages and CLI tools, including tldr pages and other sources.
It has a great system for querying cheatsheets, and you don’t even need to install a tool (though you can), as the query response can be retrieved by curl. It’s also usable inside editors, for easy referencing while programming.
The cheatsheet sources also include StackOverflow answers, which allow for flexible usage like so:
$ cht.sh js parse json
A nice way to use cheat.sh without installing anything is to put the following function in your .bashrc or .zshrc:
function cheat() {
if ! curl -s "cheat.sh/${*//\ /+}"; then
echo "Failed to get the cheatsheet" >&2
return 1
fi
}
While it is not as powerful as find, it is designed to be faster and more user-friendly for the majority of find's use cases.
No more find -name .rs -- just use fd .rs and you’re good to go.
fd is super fast and will search through your entire filesystem in a matter of seconds (Leon recorded 1.4s on his machine with 177GB of files).
By default, fd will not include any hidden files that are ignored by .gitignore, which is very useful as it doesn’t give you any random junk in your build directory and speeds up the search even further.
Use --hidden and --no-ignore (or -H and -I, respectively) to search for everything.
fzf is a fuzzy-finder that can match files, command history, processes, hostnames, bookmarks, git commits, and more, with interactive selection. It’s also usable as a vim or neovim plugin.
ripgrep (rg as a command) provides an incredibly fast grep alternative with a simpler interface.
Did you ever have to wait for grep to finish searching a directory or had to look up the right options for specific usage? Well, no more! Ripgrep will search the contents of large build directories within milliseconds.
Just running rg Q_PROPERTY will search through the entire current directory if you don’t pipe something into it, which is very convenient and the way it should have been in the first place. The output is also a lot friendlier and easier to read.
Like fd, use --hidden and --no-ignore to search in hidden and ignored directories/files.
bat, written by the creator of fd, is a superpowered Rust rewrite of cat. It provides syntax highlighting, line numbers, support for displaying non-printable characters, support for showing multiple files at once, and pipes to less by default for large output. It can also be integrated with fzf, find, fd, ripgrep (rg), git show, git diff, man, and more. A tool you'll read about later in this document, delta, uses bat as a dependency to display diffs.
diff-so-fancy is an alternative to vanilla git diff that improves readability, with better formatting, colors, and highlighting. Configure git to use diffsofancy as its pager, and git diff will provide the more readable diffsofancy output.
delta is an alternative to diffsofancy that's written in Rust. It includes additional features, like line numbers, syntax highlighting, side-by-side, improved navigation between files in large diffs, hyperlinked commit hashes, improvements for display of git blame and merge conflicts, and the ability to syntax-highlight grep output. delta uses bat under the hood and, as such, they can share color themes.
starship is a prompt written in Rust, which can be used with a number of popular shells including bash, zsh, fish, and even Windows shells like cmd and PowerShell.
The prompt is both stylish and informative, providing information like git branch, versioning, and more in the prompt itself. It also indicates the time length of command execution, whenever the run lasts for more than a few seconds -- very helpful for gauging the duration of a build. This prompt should be utilized with a NerdFont for icon support.
Starship is also extremely configurable, so any details can be omitted or added; the look and feel of the prompt can be completely customized, etc.
zsh prompts & plugins
Some shell users argue that switching from bash is definitely worthwhile, with zsh being the favorite choice for many. It’s highly configurable and has a rich plugin ecosystem.
oh-my-zsh is a zsh framework that makes completions, searching in history, the prompt, etc., much nicer than the defaults. It can, of course, be tweaked much further from there. If you find oh-my-zsh to be a bit bloated, there are more lightweight alternatives such as ZimFW or Zinit.
Some zsh plugins can also serve as alternatives to previously mentioned tools. There are quite a few useful plugins listed here (they should work with any plugin manager): https://github.com/unixorn/awesome-zsh-plugins.
topgrade is a tool which conveniently updates several package managers with one command.
Just run topgrade and every package manager under the sun will be updated, one after the other. This even includes flatpaks and updates to your systems package manager, very convenient.
direnv is an extension for several common Unix shells, focused on environment management. More specifically, it is intended to unclutter .profile and export different environment variables depending on the current directory.
On each prompt, it checks for the existence of a .envrc file in the current directory, otherwise looking for .env, and loads or unloads environment variables accordingly. It’s a single executable and very fast.
direnv is also extensible with bash files in .config.
blobdrop enables drag-n-drop of files from a terminal window, which can be very convenient when using the command line as a file browser. It was written by fellow kdabian Magnus Gross
bonus is not quite a tool, but a Rust crate used frequently for writing CLI tools, called clap.
clap is used in the codebases of a majority of the Rust tools in this document, as it’s incredibly useful. It’s the reason most Rust CLI tools have great UX.
Using the derive feature, you can simply mark up a struct of data you need from your command line arguments and clap will generate a beautiful and convenient CLI interface for you. Just take a look at the derive documentation to get an idea of what this looks like.
Other Tools
We hope these tools can improve your workflow, as they certainly make our lives on the command line far more enjoyable.
If you have any additions to this list, feel free to discuss them in the comments.
Good overview! This list covers most of the tools I use on a regular basis.
Here are a few more TUI tools:
ncdu, as regular du is way too slow, especially on network drives (recent ncdu versions can run with multiple threads). Written in Zig.
yazi, a terminal file manager (Rust). I used to use ranger (Python), but yazi is much faster, and has better out of the box support for image previews.
batman, a shell script to combine bat and man. Supports fzf for searching man pages, and syntax highlighting for man pages. You may have alluded to it when mentioning bat.
Some that I don't use often but that I know about:
btop is like htop but even more customizable
lazygit is a recent addition to my list, it seems quite useful for browsing git history, interactive rebases, replacing add -p, etc.
Something I am really missing in a company setting with petabytes of data and very complex folder structures is a shell history feature that remembers the directory a command was ran in, so that it may be found later. Being able to expand a history entry cd ../subdir to cd /very/very/long/path/to/a/deep/folder/hierarchy/subdir would be nice. I'll look into the alternatives cd tools, but my point still stands for other commands, such as cp, etc. Any suggestions?
28 - Nov - 2024
Leon Matthes
Hi @MayeulC,
thank you for sharing your own suggestions.
Regarding the working directory in the history, I know that fish-shell prioritizes commands that were run in the cwd when suggesting commands from the history. Though I think that is not quite what you're looking for.
After a bit of googling, it seems that fish unfortunately doesn't store the cwd itself (see: https://github.com/fish-shell/fish-shell/issues/120 ).
However, a comment on that issue suggests Atuin ( https://github.com/atuinsh/atuin ), which does store the cwd per command. So that should be able to do what you want.
Note that I have not used Atuin yet. I would be interested in how well it works, please let me know if you try it.
Kind Regards,
Leon
15 - Dec - 2024
Camille
atuin is actually even better than just remembering cwd .. it has the capability to store command history in a database accessible from any machine you install it on (and log in from) and thus search command history for session/directory/global/host.
note that while atuin does have its hosted option, you can easily install a self-hosted option for yourself.
9 - Dec - 2024
Francois Charron
gdu is mostly ncdu written in go and waaaay faster.
Our hands-on Modern C++ training courses are designed to quickly familiarize newcomers with the language. They also update professional C++ developers on the latest changes in the language and standard library introduced in recent C++ editions.
4 Comments
28 - Nov - 2024
MayeulC
Good overview! This list covers most of the tools I use on a regular basis.
Here are a few more TUI tools:
Some that I don't use often but that I know about:
Something I am really missing in a company setting with petabytes of data and very complex folder structures is a shell history feature that remembers the directory a command was ran in, so that it may be found later. Being able to expand a history entry
cd ../subdir
tocd /very/very/long/path/to/a/deep/folder/hierarchy/subdir
would be nice. I'll look into the alternatives cd tools, but my point still stands for other commands, such as cp, etc. Any suggestions?28 - Nov - 2024
Leon Matthes
Hi @MayeulC, thank you for sharing your own suggestions.
Regarding the working directory in the history, I know that fish-shell prioritizes commands that were run in the cwd when suggesting commands from the history. Though I think that is not quite what you're looking for.
After a bit of googling, it seems that fish unfortunately doesn't store the cwd itself (see: https://github.com/fish-shell/fish-shell/issues/120 ). However, a comment on that issue suggests Atuin ( https://github.com/atuinsh/atuin ), which does store the cwd per command. So that should be able to do what you want. Note that I have not used Atuin yet. I would be interested in how well it works, please let me know if you try it.
Kind Regards, Leon
15 - Dec - 2024
Camille
atuin is actually even better than just remembering cwd .. it has the capability to store command history in a database accessible from any machine you install it on (and log in from) and thus search command history for session/directory/global/host.
note that while atuin does have its hosted option, you can easily install a self-hosted option for yourself.
9 - Dec - 2024
Francois Charron
gdu is mostly ncdu written in go and waaaay faster.