It’s called the duckyPad Pro but I don’t think it has anything to do with the Ducky keyboard brand. This little thing looks really cool. Quick! Someone tell me why it is junk before I spend the $80. @ToyKeeper ?
I find the biggest drawback with my macropad is the availability of relegendable keycaps. I see sterile keycaps on Instagram etc and can’t believe that people are able to memorise the keys for a single layer, let alone multiple layers.
I’m aware companies offer custom printing services ($:money_mouth_face: or you can print your own (difficult), I just wish there were nicer quality options for the ones that take printed legends.
I use one of the inexpensive YMDK 9 key pads, it’s quite good for what I want.
Printed legends would definitely be the most efficient. I think it’s cool that the LCD on this device can display the mapping of the keys though. Did you see that in one of the pics?
If that can be programmed to change for each layer it seems like a pretty killer feature.
I have a PCPanel device which is essentially a 4-knob USB volume mixer for Windows and I can’t remember which knob does what on the two different layers I created. I remember what is included, just not which is which. Problem is I mostly just use the one knob so it isn’t often that I need to know the others. You can find out just by using the knobs of course…I really need to laminate a legend for it though.
Yes forgot to mention that in my original reply, that does look good!
Suspect your solution of a printed and laminated legend might be an idea I “borrow”.
You have summoned me from a deep slumber. What is your heart’s desire? Do you seek fame, riches, immortality? Or perhaps … *reads scrollback* … a little ducky? ![]()
Seems like an odd choice, but I’m not here to kink-shame.
I guess the question is… what exactly do you want to do that you couldn’t do with your existing hardware? Could you accomplish the same things by adding some free software?
I’ve had pretty good results improving old legacy keyboards with a remapper like Kanata or Kmonad. Or there are automation tools like AutoHotKey or Autokey. Sometimes I get what I need by adding features to my window manager, or sometimes I write little automation tools for X11, and the combination is far more powerful than a macro pad. But that’s pretty environment-specific. Or there are a ton of other options.
For macro type stuff, I keep a few macro or launcher keys for a very small number of things I use the most often, but otherwise I find it easier to remember the keys by using regular letters and stuff, instead of macro keys. Like, on one keyboard I have 12 macro keys but I only really use 4 of them. Beyond that, it rarely seems worth even reaching that far when I could just press a modifier (like Alt or Fn) and a regular key, and the regular key solution makes things easier to remember since the letter matches the function. Like, if I want keys for “create desktop”, “delete desktop”, “(un)maximize window”, and “(un)stick window”, I could assign them to Macro 5/6/7/8, but I’d probably forget which was which. However, if I assign them to Gui+c, Gui+d, Gui+m, and Gui+s, it’s easy.
With layers or chords, you can define all sorts of extra keys. Like, press two keys at the same time, and they can behave as if you had a completely different key there. For a simple example, one of my keyboards has Insert and Delete right next to each other, and I’d never need to press those at the same time… so I configured it so if I press them together, it functions as “paste”. Or if I press Home and End at the same time, it opens a terminal.
Sticking to a standard physical layout also makes life easier while using a notebook. Custom hardware isn’t always an option, and if I rely on it, it gets annoying to not have it… but if I run Kanata on my notebook, it ends up working almost exactly the same as my custom keyboards.
Anyway, look at what you want to accomplish, and what solutions are available, and then maybe it’ll be more clear whether you need to buy something or if a cheaper solution might be more practical.
Are you familiar with that novelty account on reddit /u/*uckswithducks? I’m still not sure to what extent they were serious haha.
Wow thanks for the thoughtful write-up.
Yea I agree that for basic OS actions like window management that macros don’t make a lot of sense as macros. What excites me about macros is creating a button press for actions that don’t have OS-level shortcuts already.
I could have a macro to change power profiles, kill a specific task that I know hangs regularly, or maybe exit a discord session channel so I don’t need to bring the app to the forefront after a call ends.
The challenge is making shortcuts that you’ll actually use and remembering where they are. This device can display a legend on it’s little screen so maybe that would be enough. As I wrote this up though, I’m wondering if there is any reason someone hasn’t made a touchscreen macropad yet? Obviously you’d lose tactile buttons but button labels would become so easy to handle.
Edit: Alas, I have no original ideas it seems: Streamdeck Alternative - Infinitedeck !
You could make macros for those things without extra hardware, no? I don’t know what OS or interface you’re using, but most have the ability to map arbitrary keys to arbitrary actions.
For example, I have 12 macro keys, like M1 to M12. Then in my ~/bin/local/ directory I have scripts for each, like ~/bin/local/m7 for macro 7. The contents can be anything. To make it more versatile, there are also variants for key combos like Shift+M7 or Ctrl+Alt+M7, and they each call their corresponding script. The script contents can be absolutely anything.
And they don’t have to be just the macro keys… it can be others, too. Like, I have 16 different flavors of the “printscreen” key, for every possible combination of modifier.
For the sake of easier maintenance and configuration, those scripts are typically just symlinks to other scripts. And a simple ls -l shows me what the current mappings are. So I can see, for example, that ~/bin/local/m1 is a symlink to myterm, a script which makes a new instance of my favorite terminal. And m9 is a link to xtype-1-word, which picks a random word from a dictionary file and generates the keyboard events to type that word as if I had pressed the keys myself. If I press it a few times, it goes “shrewish Jacobian overestimated tawnier foreman overdraft malpractice”. There’s another one which rapidly types out and activates a brand new shell config, so when I log into a fresh VM or something, I can press a single key and get my shell configured how I like, even if the new host has no network access.
To add another layer on top, it’s really simple to monitor which window is currently focused, and it can rearrange symlinks based on what the window is. So the macro keys can change depending on the current window. It just needs a set of profiles containing files (or symlinks) to remap, whenever it detects a suitable window change.
But I haven’t really found the per-window stuff very useful. Because, as you say, it’s hard to remember what they are. And it’s usually much easier to just press whatever key the macro was going to press for me. However, it can at least be useful for stuff where the same key does the same function in different programs, by simulating different keypresses per program.
The difficulty of implementation also varies a lot per OS and per interface. Like, it’s super-easy-barely-an-inconvenience on X11 with Sawfish, but it’d be a lot harder in Windows, and some of this stuff is literally impossible in Wayland because these features are explicitly banned as “security risks”. So YMMV.
The display in that thing looks pretty cool. I have a soft spot for little external displays, and would love to have one to display my todo list and “F***ometer” program. But for now, I’m still using an ancient 20x4 text serial LCD.
Actually this is part of the reason I wanted your opinion about this product. It makes some claims about being better than QMK/VIA and I remembered that you use QMK so you might be able to speak to whether or not this is primarily marketing or not.
They claim:
Compared to QMK/VIA, you get:
- Much Longer Macros
- Entire Bee Movie in one macro? Sure thing!
- Over 3700 macros total
- Advanced Interactive Scripting
- Variables, conditions, loops, functions, etc.
- Reading Buttons
- Print to OLED screen
- Change RGB Color
- Randomization
- How about a fully functional Pong game? [code]
- SD Card Storage
- Fast Configuration / Backup / Deployment
- No sketchy drivers or apps
- No recompiling
While QMK/VIA are great for regular keyboards, they are very limited at even the basics of input automations.
duckyScript is a no-brainer for power users with more demanding scripting needs.
As far as why separate hardwware, I think part of it is that I don’t want a bigger keyboard and would rather have a separate board that I can put away when I’m not using it. I like 75% keyboard width. Plus, this one has that nice little screen so I don’t have to memorize my macro layers.
Currently I’m on Windows 11 which promised better scheduling for my 12700k processor which has big.LITTLE architecture. Soon I’m probably going to start dual-booting Linux though–Microsoft apparently plans to shove that Recall spyware junk down their user’s throats.
And
m9is a link toxtype-1-word, which picks a random word from a dictionary file and generates the keyboard events to type that word as if I had pressed the keys myself. If I press it a few times, it goes “shrewish Jacobian overestimated tawnier foreman overdraft malpractice”.
Pardon my ignorance but what is this used for?
I have a soft spot for little external displays, and would love to have one to display my todo list and “F***ometer” program.
I need this too. I use Google Keep to make checklists and then I forget to look at the checklists
. Out of sight out of mind unfortunately. Still useful for stuff I’m sure I won’t remember later like book recommendations and stuff.
Yeah, if you want your keyboard to type out a very long string with a single keypress, I think there’s a limit to the string length in VIA, since it stores all the config in eeprom and there just isn’t much space there. If I recall correctly you can do much longer macros in QMK, but then you’d have to reflash the firmware if you wanted to change the config. And though QMK (with XAP) can do pretty advanced stuff with scripting and host communication, it’s not very practical and it requires writing a lot of your own custom code. And I don’t recall it having any support for SD cards.
But the times when those features are needed, and must be in the hardware instead of the software, seem pretty rare. Like, I had a hotkey to type out my shell config for easy setup on QA test hosts where I’d install the OS, connect once or twice over a serial console, and then reinstall the OS for another test. But even then, I didn’t physically connect my keyboard to the test host. I used a little script on my computer to generate keyboard events. It wasn’t built into my keyboard.
Not much need for it, I guess, when I had the full power of a computer, where scripting and storage capabilities were basically unlimited.
However, if I was using a host OS like Windows, where these features aren’t so easily available, maybe I’d want a keyboard with that stuff built in so I could work around the limitations of the computer.
I’ve mostly been using 65% keyboard layouts. I have one 75%, but it has so many keys I don’t even know what to do with all of them. That’s how I ended up with more macro keys than I can find uses for.
So I use a 65% core layout… with some optional extra bits for hardware with extra keys. And in that small layout, I have room for a bunch of layers, locks, chords, macros, multifunction keys, etc. None of the extra layers are anywhere near full, so I still have room to expand if I need to. But I haven’t needed to.
When I got a 75% board, it had all these extra keys so I tried to find uses for them. I don’t need dedicated keys for F1 to F12, because I barely ever use any of those. So I set them up as wildcards of sorts, assignable to whatever. M1 to M12, plus modifier-key variants of each. That gives me a total of 60 keys which are easy to activate with either a single keypress or a pair (like Shift+M7), and if I want, it also allows for chords like M1+M2 hit at the same time. I guess that brings the total up to 73 which could be accessed with a quick key or two. And that’s without even getting into layers or multifunction keys (press or hold or double press to do different things).
The amount of possibilities is huge.
Basically… you already know from Anduril what can be done with a single button. Now imagine what can be done with 70 or 80 buttons. It’s really hard to run out of possibilities, even with a “small” keyboard like 65% or 75%.
Yeah, that could be nice. Especially when there are a lot of keys and they maybe change depending on the current app. A cheatsheet would be handy sometimes.
Mostly, I was just trying to fill space on my keyboard. I had extra keys and was having a hard time thinking of genuinely useful functions to assign to them. Because a 75% keyboard has a lot of keys.
So I ended up making keys like “type a random word for me”, which can be handy for generating passwords. But in practice, hitting the “random word” button 6 times isn’t much better than just hitting the “new terminal” button and typing 6w<Tab><Enter> to run the “6words” script, maybe hitting <Up> and <Enter> a few times to get a combination I like, and pasting it into a form.
So mostly it’s just for amusement. It’s kind of entertaining to hit a key a few times and see it write random stuff like…
Miltonic chastity invigorating skyjacked marmoset womenfolk
Pretty strong password… and easier to remember than N]vs}~M|/7%9'K'~FpY, which is what happens if I hold down my “Any” key.
I have a whole different solution for stuff like that.
The browser extension I’m working on makes it easy to make checklists and stuff – tracking and organizing any notes or todo lists you feel like writing down while browsing.
For example, I set up a retro gaming thingy – pretty much all the games ever made in cartridge form before 2005 or so, all in one convenient little box. The retro gaming scene, and related products, have been pretty hot lately. But that begs the question… what to play? So I went to wikipedia to look up what was good or noteworthy each year. They have a series of articles, one per year, for “19XX in Video Gaming”. I went through them and opened one tab for each year. Then from each of those, I opened a tab for each game which looked maybe worth trying. And as I went along, I unloaded the tabs so it wouldn’t take a ton of RAM, and I organized them into a tree.
Now I have a big organized nested list of stuff to play any time I feel the urge, complete with wiki pages just a keypress away. And when I actually decide to boot one up, I’ll generally also open its page on retroachievements, to see what kinds of fun extra challenges there are. It provides new ways to play old games. Plus a place to write my thoughts about each one after playing it, or maybe take notes on what I need to remember during quests, or what I was trying to do before I stopped for the day, and easily attach more tabs for maps or walkthroughs or whatever. And it’s all just waiting in a little corner of my sidebar.
But I use the same system for all sorts of other stuff. It’s like a cross between a todo list, a mind map, a bookmark manager, a tab manager, a note-taking app, a browser session manager, and a sync and backup tool…
… but it’ll be a while before I’m ready to publish the first release. Like, I haven’t even started on the server yet. It’ll allow automatic real-time-ish sync between browsers, even between Chrome and Firefox and Edge and Vivaldi and … stuff. But I haven’t written that part yet.
The reason this appeals to me is that I could theoretically set it up once and I’d never have to configure it again even if I reinstalled the OS.
However, if I was using a host OS like Windows, where these features aren’t so easily available, maybe I’d want a keyboard with that stuff built in so I could work around the limitations of the computer.
Yea it can be annoying to find the OS is missing functionality that seems like it should be baked in. This does lead to me finding some pretty cool stuff sometimes though. “Czkawka” GitHub - qarmin/czkawka: Multi functional app to find duplicates, empty folders, similar images etc. That being said, in the future I picture myself only using Windows for compatibility reasons when all else fails.
I used a 65% for years, and then I got a job where I learned to use the F-keys a lot, partly because I work with an IBM AS400 terminal where they are used extensively, and partly because I just got used to using ALT-F4 to close windows, F5 to refresh, etc. I think some games also map things to the F-keys by default.
Haha no kidding, 73 is way too many macros! I would never remember them. I guess you don’t mind using modifier keys? I hate modifier keys because of my experience with the 65% keyboard and needing an extra keypress to access anything on the F-row. In computing, any time I can reduce the number of clicks or key-presses needed for an action I do it.
Heh, you could give yourself the username, “TalksInCode” and then proceed to drive people crazy chatting in games with that button. Some of the words would be accidentally in-context with what was being said in chat and they’d be convinced it wasn’t random ![]()
I take it you haven’t moved to a password manager yet? I use KeePass with the KeePass XC app. Most of my passwords are horrific now but I don’t need to remember them.
Ohhh like a custom arcade cabinet? Do tell! ![]()
Well, I hope that when you eventually finish it I’ll see it because that sounds very useful. Is there separation between to-do lists and mind-maps? What I do in Google Keep now is sometimes I’ll have an idea (like for story writing) and I’ll do a short synopsis and label it Story Idea: XYZ, but then they take up space in my Lists area and makes it less efficient to find things. I end up archiving brainstorm ideas and “eventually” checklists to try and keep the other checklists findable.
Yeah, that would be pretty nice, especially if you change hosts a lot. But usually I don’t really have to worry about OS configuration much… because when I get a new box, I just svn checkout my config and get all the settings I’ve accumulated over the years. And occasionally svn up to update whatever host I’m using.
Nice thing about text files and shell scripts and stuff – you solve a problem once and it typically stays solved basically forever. There’s no need to keep re-solving it every few years while desktop GUIs and front ends churn.
Neat. I haven’t heard of that one before, and I’ve been meaning to look for new tools sometime to detect similar images. Will have to try it.
For most stuff, I just use “find” or zsh built-in functions to find things, or use “jdupes” for duplicate file detection and removal. Have been using jdupes (and before that, fdupes) for ages… usually via a tiny wrapper script…
#!/bin/sh
# jdupes-auto-rm: delete duplicate files automatically
jdupes --recurse --delete --noprompt .
Or sometimes I have it keep dupes but hardlink them together so they only take as much space on disk as one copy.
jdupes -r --linkhard . > jdupes.out
Handy little thing.
I’ve been using a password vault since before KeePass existed. Originally just gpg and a text file and a couple short shell scripts (like one would decrypt to ramdisk, edit, re-encrypt to file, delete ramdisk), but it has evolved over time. The “pass” program in a ramdisk works pretty well with some extras like “tomb” for double encrypted storage (encrypted files in an encrypted mini-filesystem) and “oathtool” for 2fa and “git” for revision control and “dmenu” and “xclip” and “xdotool” and some pinentry thingies and ssh and … etc. With 1000+ accounts, each having a different email and different password and often extra stuff like 2fa, a vault is kind of a necessity.
Travelling for work with admin access to millions of accounts and banking stuff also made it necessary to be extra careful – like removing everything possible before travelling, using an encrypted disk, and throwing away the key such that I’d be unable to access it until after arriving at my destination… so if the company notebook got taken in transit, at least I’d have time to expire all the keys before anyone could decrypt it. Kind of a pain to do twice for each trip, but good standard practice for safety.
Nothing that fancy. Someone gave me a raspberry pi they didn’t want, and I wasn’t sure what to do with it since it’s so underpowered, but then I discovered Batocera Linux and set that up. Now it’s a pretty sweet retro game console.
But people have also been really into handheld gaming thingies lately, like I’ve seen the Miyoo Mini Plus on sale for as little as $30, or there are nicer ones like the Retroid Pocket 5. It’s a pretty sizable industry.
I find the handheld ones hurt my thumbs though, and a little screen isn’t as nice as a big screen, so I just use my favorite controller with the living room TV… and some CRT or LCD shaders to make it look more like the original hardware.
It’s all one big tree, similar to how a computer’s filesystem is one big tree. Stuff is organized into leaves and branches similar to files and directories, except smaller. Each item is a single link, and/or a single line of text, optionally with a longer note attached (but not long… maybe a paragraph). The structure is otherwise entirely up to the user.
However, by default, each browser window’s sidepanel only shows that window’s branch instead of the entire tree. So it narrows the scope and reduces clutter on a per-window basis. If you have a “Flashlights” window, for example, the sidepanel only shows the tabs from that window, and notes related to that window.
Or click a button and it’ll show the full tree instead. Handy if you want to re-open a saved window, or do some larger scale tree organization.
Items are nested, so if you just don’t want to see a list for a while, collapse its branch. That reduces the entire sub-tree to a single line. I’m pondering whether to add a snooze button, too… which would make an item or branch disappear temporarily (or maybe just go extra dim) until its timer goes off. If you aren’t going to have time for a particular project for a while, snooze it for a month or two. I did this in my todo list program, but I’m not yet sure if it’s a good idea here or not.
As a general guideline, it’s probably simplest and most effective to just keep the most important, most time sensitive items near the top. And when something is done or cancelled, move it to a separate branch down below, or archive it. At least, that’s what works for me.
It’s a little different than traditional checklists though… because most of the items are browser tabs, with the tree built naturally through the process of browsing. Items either get deleted when you close the tab (assuming there’s no note or other metadata attached), or you can unload the tab to save it for later. And for most people, most of the tabs will be unloaded most of the time… so they’re as lightweight as bookmarks.
Once I get close to a first release, I’ll have to make some videos and extensive documentation with screenshots showing how stuff works.
For writing story ideas though, I’d recommend a simple text editor and regular filesystem tools, so you can have space to write free-form text. The tab outliner is meant for organizing nested things which each fit on one line, and maybe taking short notes while you browse, not for writing a book. You could outline a book in it, and export it to plain text when you’re ready to actually write it… but I wouldn’t recommend it for the bulk of the writing process.
That’s a fantastic selling point for text-based interfaces! It reminds me of this time back in college when I was using registry tweaks in Windows to add buttons to the gui so I could perform operations without taking my hand off the mouse. I showed a classmate of mine who was on Linux what I was doing and he said he was in the process of making sure his hands didn’t have to leave the keyboard. I’ve definitely come around to his way of thinking more as time has gone on.
I googled jdupes and found a page full of memes as the top result lol. But I did get to the repo from there. So this is an OS-agnostic duplicate file finder that is strictly for pure dupes. The ability to replace duplicates with links is pretty interesting. On Windows, that type of functionality is not typically user-facing is it? Meaning, typically the user does not deal with file links outside of the windows shortcut?
-L --link-hard hard link all duplicate files without prompting
Windows allows a maximum of 1023 hard links per file
Ah gotcha. I just associate password managers with character-soup passwords and you had mentioned using passphrases made up of random words. Sounds like your overall approach is more secure–you’re basically “driving stick” for password management
I used to use jailbroken PSP - only one analog stick but the face buttons were nice and soft. I picked up a PS Vita when it came out and immediately resold it. Tiny clicky buttons are the gateway to suffering lol. Someday I’ll have to get into retro gaming–just need to finish up this Steam backlog real quick ![]()
Oh so it is visually similar to a file structure? I was picturing something that spread out in 2D space on an infinite plane, kind of like a database schema with notes being visible on the nodes. What you’re working on sounds superior for most things but wouldn’t really do what I was imagining for brainstorming when writing. I would definitely use what you’re working on though. Sometimes I save entire browser sessions into a bookmark folder because those tabs represent a line of reasoning and a headspace for what I was working on.
I like the idea of being able to snooze branches of the tree btw ![]()
Yeah, it’s definitely a very different way to use computers. I’ve gone months at a time without even touching a mouse… though I suppose that depends on how you define “mouse”. I have keys built into my keyboard to control the mouse cursor, so not sure if that counts.
Interesting. I’ve never tried searching for it. I just apt install jdupes while setting up a new computer.
Ah, different types of links. There are at least three kinds:
-
Windows shortcut: A file specific to some of Windows’ user interface programs. It’s just a regular file with a
.lnkextension, and a binary internal format. It contains a few bits of data, including the full path (including drive letter) of another file. When some windows programs see this, they read it and then operate instead on the other file it’s linked to, if it exists. Changing drive letters breaks these links. -
A symlink: A unix concept similar to a shortcut, but implemented in a cleaner, more convenient way. Symlinks “just work” automatically without any special support from the user-level programs, because it’s implemented at a kernel / filesystem level. Internally, it’s just a text file containing a path to another file, which can be an absolute or relative path, and the symlink doesn’t need any special extension. Programs can detect this if they want to, but if they don’t care, the kernel will take care of the redirect automatically. Standard practice uses relative links whenever possible, which makes the links keep working even when drives get moved around, or even inside of nested virtual machines.
-
Hard link: Filesystems have file names and file extents. The name (directory entry, or “hardlink”) points to an extent (the actual contents of the file). There can be more than one hardlink to the same file content. (technically, “extent” is the wrong word, but that doesn’t matter right now)
I’m simplifying things a bit, but… let’s say there’s a warehouse which holds stuff. And you have an address book. You write in it, “Flashlight Warehouse: 123 Main St.”. The address book entry is like a filename, and the warehouse is like a file extent. But then you also write, “Bob’s Wonder Emporium: 123 Main St.”. You have created another entry which refers to the same building. Then you erase the entry for “Flashlight Warehouse”. The building itself has not changed. Those address book entries, basically, are hardlinks. You can point as many as you like to the same building.
A symlink is like you set up a tiny little shack across the street from the warehouse. Instead of having a door, the shack has a magic portal. If you walk through the portal, it sends you through some other door instead. In this case, the portal is configured to send you to “Flashlight Warehouse across the street”. If you know how to check for the presence of portals, you can detect this and handle it differently, but if you don’t know or don’t care, it “just works” and takes you to the warehouse even though you went to a different address.
Additionally, if aliens scoop up the warehouse and the magic portal and drop them on another continent, the portal still works. Because it’s pointing “to the warehouse across the street”, and doesn’t care what continent it is on.
A Windows shortcut is like another shack. But it doesn’t have a portal. If you go inside, it has some knick-knacks and a table. On the table is a barcode. If you have a compatible barcode reader, you can read it and it gives you a readout of “Flashlight Warehouse, Main St., Cityname, Statename, Postal Code, Country Name, Planet Earth”. So you can then look up that address and go to it. But if aliens move stuff to another continent again, the address in the barcode is wrong and leads to an empty crater where the warehouse used to be.
It’ll be easier if I post an example. It’s a little difficult to post shots of a real session, because people tend to have stuff in their browser session which is fairly personal or maybe involves controversial topics which aren’t welcome on the forum, so… I made a screenshot of something fairly benign, a “videos” window on the living room television computer. Mostly just keeping track of some anime which is still in progress:
This pic shows a few things…
This browser window has 5 open tabs, displayed across the top in the tab bar. The current tab is for a “Reincarnated as a Slime” anime. It’s expected to continue airing sometime but no date has been set. So I noted it in my list as “2026 maybe?”.
Along the left side is an early prototype of the tree style tab outliner. It’s in “Window” mode, so it only shows the tabs in the current window. Clicking that changes to “Session” mode, which shows the full session tree.
It’s showing a window node called “Videos”. It has the same 5 tabs open, in the same order, but they are spread out through a larger structured tree of links and notes. Of those 5, 3 are directly visible in the tree, shown in brighter text colors, while 2 open tabs are hidden in a collapsed branch called “Favorite channels”, which has 2 of its 7 collapsed nodes open as tabs.
White text indicates an open tab, and bold white means it’s the current or “active” tab.
Grey text indicates a saved tab which isn’t open right now. It works kind of like a bookmark, or kind of like an even lighter-weight version of a “discarded” tab. Clicking it causes the tab to re-open at the same position, and then the row changes to a brighter color.
Green indicates text notes. It’s bright if it contains or is attached to an open tab, or dark otherwise.
Tab nodes are created in the tree automatically while you browse, including info about the tree structure, so the tree mostly builds itself and related links automatically get grouped together in a nested structure. Then to save them as unloaded tabs, the user can press a key (like Alt+U) to unload a tab and keep it in the tree. Or if the tab contains anything interesting, like a note, it’ll be saved automatically even if the user closes it with Ctrl+W or the tab’s “X” button.
The bright blue row and grey area underneath is the keyboard cursor. The blue row is the cursor location, and the grey area below is everything contained within that node. This particular row also has a paperclip icon to indicate there’s a “long note” attached. The note contents are shown at the bottom of the window.
Toward the top right of the sidepanel is a weird little widget which says “U E M D” in colorful lettering. This pops up when the mouse cursor is hovering over a row in the tree, and gives the user some context-sensitive buttons to do things to that node. The letters stand for “Unload”, “Edit”, “Mark”, and “Delete”, and the colors match the colors the tree uses for each. The letters are chosen based on the user’s keybindings for each function… so, like, ‘e’ edits the current node and ‘m’ marks it for batch processing.
At the bottom of the window are more buttons, some of which work. The “Notes” button is pressed, which is why there’s a widget above it to show the contents of the highlighted node’s note text. The “Backup” and “Options” buttons also work, but the others don’t yet. Their functions are not set in stone.
Although not shown, if you move the nodes around in the tree, they get re-ordered in the tab bar too… and vice-versa. This works on entire branches, not just individual tabs, so if you drag a tab from one window to another, it’ll move all its children with it too. Or you can mark a bunch of nodes or branches and paste them somewhere else, which moves them as a batch… like mark some in one window, change windows, then paste, and it’ll move them to the new window.
There are also a bunch of other functions which didn’t fit into the screenshot, like the ability to load and save entire windows. Closing a window causes it to be saved in the tree but marked as “unloaded”, with each previously-open tab marked as “was loaded”. Double click a saved window node, and it re-opens in the same size and position as before, with each “was loaded” tab opened again.
It’s mostly meant to be used via keyboard. Here’s a short animation showing some basic tree organization using mark/paste and simple adjustments on a contrived tree.

So far, I’ve tried it with up to about 10,000 nodes in the tree and, even on a really cheap budget PC, it runs fine. I’ve been testing mostly on Firefox, because it runs a lot slower, so if I get things working well there, I can be pretty confident it’ll be fine on Chrome-based browsers too.
I haven’t even started on the server yet. Once that is ready, it’ll sync the tree real-time-ish between multiple browsers, even if they’re not the same type of browser. Like, automatic sync between Firefox, Chrome, Edge, Vivaldi, Brave, etc. Same session tree, but each browser can have different windows and/or different sets of tabs open. And if you don’t have a connection to the server, no problem… it’ll just save a transaction log and sync changes whenever you get a connection again.
Aaaaanyway, that’s probably way more detail than you wanted. ![]()
Windows Shortcut
Huh, I was not aware that programs had to specifically support .lnk files. TheMoreYouKnow.jpg
symlink
I may be missing a crucial concept on this one. If it’s technically just a text path underneath, how can it survive a file being moved to a different spot? Surely even a relative path breaks if you change the file’s relative position in the file structure?
hardlink
So if the OS is keeping an address to the actual file and there’s only on true copy, there could be 30 hard links but the file only takes up the space once. Regardless of which “copy” is deleted, the OS should retain the file until the last one right?
This one is interesting to me because I didn’t know you could manually force this process. I would have thought either it would be automatic or unavailable completely.
This project is awesome! Thanks for taking the time to write it up. You could probably kickstarter this TBH. Or maybe I’m just biased.
I love my Firefox so glad to see it working in there so far. BTW what browser do you use most often now? I understand that Chrome doesn’t fully support Ublock Origin anymore.
At first I was a little lost looking at just the screenshot, bu that animation brought it to life. I recognized similar design language to your BLF theme, I could see myself using this.
Symlinks break pretty easily. You can even create a link to a file which doesn’t exist. But at least it’s less prone to breaking when it uses a relative path.
Like, if you have “file1.txt” and a link called “file2.txt” which points to “file1.txt” in the same directory, you can move the entire directory anywhere you want and the link will still work. But if “file2.txt” is a link to “J:\Projects\MyProject\file1.txt” and you move the directory or move the disk to a different computer or something… the link won’t work any more.
Yes, it keeps the hardlinked file contents until it’s completely unlinked. This is why the standard C library calls the “delete a file” function unlink(). If I recall correctly, it’s part of the posix standard, and part of the C standard before that. Just normal unix stuff which has been exposed to the user and in common use since … I dunno, the 1970s probably? As far as I can tell, it pre-dates DOS and Windows by quite a bit, going back to the early days of unix. So maybe even the late 1960s.
But DOS didn’t have hardlinks. It used a really primitive filesystem with no reference counting. And Windows inherited that. Windows didn’t get hardlinks until NT, and it doesn’t use standard APIs for it or make them very accessible at a user level. Even today, Windows frequently uses filesystems which don’t support hardlinks.
Ah that makes sense. (symlinks) I may have taken the portal example too literally ![]()
Hmm interesting background. I find that Windows’ built-in file search is pretty terrible so it isn’t hard for me to believe the file system is built on something really primitive.
On a semi-related note, I’m going to be using Linux going forward for most day-to-day computing that isn’t gaming. I’m wondering if dual-booting might be a bad idea though since Windows might still snoop through the files on the Linux partition. I’m not going to be storing plain-text passwords but it just seems weird to have the two connected. Is this something you’ve dealt with? I can do independent research, I just thought I’d ask in case you had a go-to soloution.
EDIT: Apparently the formats that Linux uses are not natively accessible by windows but obviously that is no guarantee. Seems like everyone agrees encryption is the only way to be sure. I don’t want the performance decrease though…maybe I’ll build another PC or something.
I haven’t figured out how best to promote it and fund ongoing development. For now, I mostly just want to get the core functionality working… and then I’ll work on documentation, tutorials, publication, etc.
I tried to switch to Firefox a couple months ago, but it was surprisingly slow and really struggled under even a small fraction of the usual load I inflict on my browsers. So I switched back to Ungoogled Chromium and it made things run a lot faster, even under much higher load, and it also made my computer run cooler and quieter.
… and then I started working on an extension to make Firefox more viable for me. That’s part of the point of this thing – to make it easy to switch between browsers without losing important data.
I’m mostly testing in Firefox, for two reasons: 1. Because that way, it doesn’t mess with my primary browser. 2. Because if I get it running fast enough in Firefox, it should have no problems in Chrome-based browsers.
As for uBlock, Google Chrome doesn’t allow it because they banned Manifest V2 extensions and only allow Manifest V3. But uBlock can’t work in V3, because V3 was created (in part) specifically to break ad blockers. However, Chromium still allows V2, and Ungoogled Chromium aims to support V2 basically forever while also blocking all the Google-specific stuff in Chrome.
This extension doesn’t need any of V2’s extra features, so it’s written using V3. That makes it more widely compatible, and cross-browser compatibility is a major goal for what I’m doing.
Yeah. I’m going to have to build extensive documentation and tutorials with lots of screenshots and animations and stuff, to help people grasp the concept and learn how to use it. But I’m not far enough for that yet.
In the past few years, ever since the Steamdeck came out, a lot of gamers have been switching to Linux. It runs most of the same games, and generally runs them faster, even when the games are non-native and partially emulated through a translation layer. It doesn’t work for games with kernel-level anticheat or really nasty DRM like Denuvo, but those are also precisely the games people tend to avoid. Anyway, might be worth a try. For example… here’s a recent video on Do Games Run Better on SteamOS? // Windows vs Bazzite.
As for Windows snooping data… Linux’s filesystems are all open-source and fairly easy to access. Microsoft hasn’t added native support for them, but the reasons are due to monopolistic corporate market dominance strategies, not for any significant technical reasons. It’s pretty easy to add tools to Windows to access Linux filesystems.
I’m not aware of any Windows malware which includes Linux filesystem drivers to steal data on dual-boot systems, but I wouldn’t be surprised if something like that exists. So it’s up to you how much risk you’re willing to accept. Like, if there’s, I dunno, a 1-in-100 chance that your Windows partition has malware… there’s probably a 1-in-100 chance that the malware tries to read from Linux partitions… or a 1-in-10,000 chance overall. And if you added encryption, the odds of compromised Linux data would again improve in your favor, probably another thousand-fold to like 1-in-10,000,000 or something like that.
Risk is never zero. You can reduce it, but never eliminate it entirely.
OTOH, the risk of getting vendor-supplied malware / spyware / adware in Windows is nearly 100%. They put it right there in the Start menu, and other parts of the system are loaded with it too.

