<-- Back to main page

Utkirna v1.0.0

Posted on 04/11/2023 12:52:28 AM GMT


This is the initial release of Utkirna, a cross-platform application heavily inspired from Win32DiskImager that lets you to write a raw disk image to a removable device or backup a removable device to a raw image file. It is useful for preparing bootable drives with "dd like" images for PC, SBC and embedded development boards as well for backing up such drives. Utkirna means "engraved" in Sanskrit.

The reason of its creation

I always wanted to created this sort of application for a long time, perhaps ever since balenaEtcher was a thing as I hated the idea of an electron app which basically mimicks what dd command does while consuming unnecessary amount of memory for doing such a simple task. I am aware that people don't like using dd due to screwing things up easier, but this certainly was not the way. Suprisingly, there are not other cross-platform applications which does similar job to my knowledge even till this day. The only application that I know that was similar to balenaEtcher is Win32DiskImager which obvious by its name, is only for Windows. Hence, this started my interest to develop similar cross-platform application which isn't made using dreaded electron.


Earlier on, I was planning to use C with Nuklear (for the UI) for the development. However, as I started experimenting with Go, I realised that it would be more sensible to use this language for desktop applications due to its simplicity yet not losing a lot of performance compared to C. And after discovering about Fyne a fantastic GUI toolkit, this pretty much sealed the deal for me.

To have some kind of idea on how these type of applications worked (on the basis of how it read or write a disk or a raw image file), Win32DiskImager greatly helped me and even clarified me on what sort of libraries would I require to accomplish this task. The only real issue I had was to implement my own Windows interfaces for some IOCTL and FSCTL operations (which is done through DeviceIoControl) as Go didn't have native support for those (which I am going to upstream someday) but it really wasn't hard to do so.


In the current state, the program supports:

Installation & Usage

Go to the Github repository for further instructions.