18 ms·
TabFS – a browser extension that mounts the browser tabs as a filesystem
- sampa 4y agofor Firefox I use this lz4jsoncat ~/.mozilla/firefox/YOUR_PROFILE.default/sessionstore-backups/recovery.jsonlz4 | jq '.windows[].tabs[] | .index as $a | .entries[$a-1] | .title,.url'
- napsterbr 4y agoThis is absolute genius and opens up so so many opportunities!
- jadbox 4y agoPlan 9 is pleased.
- prettyStandard 4y agoWow, this is brilliant. So often I want to automate parts of my web experience, and I think ugh I need a browser extension, or user script, or puppeteer. All of which feel clunky for trying to do something simple. Seems like this will get me 90% of the way for most things, then when I need to click a button or automatically respond to an automatic email, that's just a few lines of code and a cron job away.
- mdni007 4y agoGenius
- hailruda 4y agoExactly, why isn't more software made to be accessible from a filesystem?
- aeonik 4y agoTwo things, 1. I couldn't get this working on my M1 Mac due to MacFUSE issues. 2. I wish there was a version for Firefox. I think this is such a cool project, and I want this to work really badly. I have many workflows where I'd like to log data for certain sites I visit it plain text for further analysis. And long term storage.
- HALtheWise 4y agoThe article claims this does support Firefox? (albeit, requiring re-install each time you open the browser due to an upstream bug)
- superkuh 4y agoIt's not a bug. It's an intentional choice by Mozilla that users should not be able to install software without the approval of Mozilla. They say it is for security. But the signing portal is automated so this is only realistically for revokation after widespread damage has been done. The suggestion in the thread is to use the developer edition which is, in lineage, essentially aurora/alpha version (in the past naming scheme) and contains bugs and security holes. With modern Firefox if you want software freedoms you have to give up safety... or use the unbranded version which has no auto update and manually re-install the browser for every update.
- layer8 4y agoWhile a bit annoying, the signing process for a self-distributed add-on [0] seems straightforward? [0] https://extensionworkshop.com/documentation/publish/submitting-an-add-on/#self-distribution https://extensionworkshop.com/documentation/publish/submitti...
- mdaniel 4y agoThere was recently someone who made a "fuse-ish" thing using user-mode NFS, which more closely matches my mental model of living in the new multi-arch, locked-down macOS world (https://news.ycombinator.com/item?id=32726166 https://news.ycombinator.com/item?id=32726166 not open source but the discussion shows the general idea) I regrettably don't know the guts of NFS enough to know how much of FUSE can be ported, but my guess would be "perfect is the enemy of good" for folks who otherwise can't even run this right now
- HALtheWise 4y agoThe open-source implemention I'm aware of is in Buildbarn Design doc: https://github.com/buildbarn/bb-adrs/blob/master/0009-nfsv4.md https://github.com/buildbarn/bb-adrs/blob/master/0009-nfsv4.... Code: https://github.com/buildbarn/go-xdr https://github.com/buildbarn/go-xdr
- superkuh 4y agoToo bad firefox doesn't allow it's users to install extensions without their approval and this extension can only be installed temporarily. >in Firefox You'll need to install as a "temporary extension", so it'll only last in your current FF session. (If you want to install permanently, see this issue: https://github.com/osnr/TabFS/issues/4#issuecomment-753447380 https://github.com/osnr/TabFS/issues/4#issuecomment-75344738...)
- solarkraft 4y agoThis was the straw finally pushing me to very seriously consider migrating to Chromium. They seem to absolutely despise power users, they pull the same type of shit with Fennec/Fenix. They hate their users so much they're perfectly willing to compromise their security. "This extension is not actively monitored by Mozilla". But you can't do the responsible thing and build it from source yourself. Even installing the "Developer Edition" didn't enable to me to install self-built extensions (yes, with that secret flag). And it doesn't even tell you that it doesn't accept unsigned extensions, they claim that the extension is "broken". The fuck?! This is Apple-level user hostility. Meanwhile Mozilla execs are getting Apple exec-style compensation while driving it further into the ground.
- trwired 4y ago> This was the straw finally pushing me to very seriously consider migrating to Chromium. What is the situation surrounding Manifest V3 in Chromium? Won't that throw a wrench into power user's workflows with its own arbitrary limitations?
- solarkraft 4y agoNot as much as it initially seemed. All extensions I use work fine, including uBlock Lite. The arbitrary limits would trivially be increasable in a fork. But of course I'm worried about Chromium going the way of the third E, which makes it quite possible I'll continue the toxic relationship with Mozilla for even longer.
- oh_sigh 4y ago
- guax 4y agoThis is a super nice idea. I wonder what other software we could interact in this form. The Unix people did have a good point about everything being a file.
- behnamoh 4y ago> The Unix people did have a good point about everything being a file. Yes and no. While it simplifies things to an extent, it's also confusing, especially with extension-less files. Example: Tell me, is this a file or directory? ~/hn/today-posts It could be a file that curls todays posts, or it could be a folder (directory) that contains them.
- sva_ 4y agoThe terminal emulator may change the color of the prompt, for example.
- yegle 4y agoHow would adding an extension solve the issue? E.g. is this a file, a device file, or a symlink? /dev/readme.dev To know what this is, a `stat(2)` is required.
- crabbone 4y agoValid complaint, but maybe not such a great reason. It gets worse when you deal with sysfs or procfs and similar. It all becomes obscure magic, like what values can be written into what file, why some files aren't readable, or the contents of files being just a bunch of numbers which you have no way of interpreting. Another problem is that there's way too many of different file types and they aren't organized into any kind of hierarchy or any other meaningful order. This makes tools like rsync extremely complicated, with loads of footguns and still not solving the problem well. It feels especially bitter because in exceeding majority of cases you don't want tools like rsync to deal with named FIFO or device files or sockets etc. but you get accidentally but painfully bitten by them every now and then.
- drdaeman 4y ago> Example: Tell me, is this a file or directory? A directory is a file (and IIRC e.g. Plan 9 decided they should be readable just like normal files and there shouldn't be any special readdir syscalls). You can see its attributes to figure out the rest. If not for strong Linux limitations (because of alleged hardlink knot-tying problem) and belief that it just cannot be both, transparent archive access through a filesystem would be a thing. As well as metadata access (`play ./file.mp3` vs `edit ./file.mp3/id3v2`). People of the past seemed to have paid great attention to interoperability and effort to make common interfaces; folks of the modern age ('00s and later) love unique and completely incompatible solutions to the same problem.
- sirjaz 4y agoNo support for Windows? There are more Windows endpoints than all iOS, MacOS, and Linux desktops combined.
- dlivingston 4y agohttps://github.com/osnr/TabFS/issues/13 https://github.com/osnr/TabFS/issues/13
- deleted 4y ago[deleted]
- smashed 4y agoHaven't looked into the source, but this is most probably using FuseFS in order to present a mountable filesystem. Fuse does not support windows. If it did the extension could probably be easy to port.. Your best bet is probably running the browser under some wsl layer.
- rmbyrro 4y agoHow many of those windows users would want to write a mesh of Python and Bash to interact with their browser? Not saying it shouldn't support windows, but choosing Linux and MacOS as initial support is a sensible choice...
- arrakeen 4y agoechoing the sentiment given to linux users every time they ask for a version for their os-- you can just install linux in a vm if you want to use this.
- barbazoo 4y agoThis is fantastic. I hope more people support them.
- behnamoh 4y agoHis link [0] makes me trust him more about what he's doing as he's clearly using Vim/Neovim :) 0: https://twitter.com/rsnous/status/1338932056743546880 https://twitter.com/rsnous/status/1338932056743546880
- luispauloml 4y ago>he's clearly using Vim/Neovim The author directly mentions Emacs twice and one of their liked tweets says "in practice most of my logical 'windows' are actually browser tabs or Emacs buffers": https://twitter.com/rsnous/status/1176587656915849218 https://twitter.com/rsnous/status/1176587656915849218
- behnamoh 4y agoThere's Evil mode on Emacs which is basically Vim.
- linza 4y agoThat looks incredibly useful. Now i imagine i had a small terminal window within my browser that i could focus by pressing ESC ...
- djha-skin 4y agoI was just thinking there is nothing new under the sun, but then I find imaginative programs like this.
- hendzen 4y agoThis is really cool. Great work
- phillco 4y agoIf you're on macOS, you can do a small piece of this natively with AppleScript (or anything that can send apple events) in Chrome or Safari -- namely, you can iterate through windows or tabs, view their source code, and execute arbitrary javascript you pass (there's a one time security option you have to accept). This can be handy for quick automations if you don't want to install anything. (Background: I have RSI, so I've been developing some integrations between applications and Talon Voice (https://talonvoice.com/ https://talonvoice.com/). AppleScript ends up being surprisingly valuable/fast/reliable for applications that support it. I also built an integration with iTerm2's Python API before noticing that everything I was trying to do was already supported by its AppleScript dictionary, and was faster. In Google Chrome, the "iterate through tabs and execute javascript in them" is very useful for automating Google Meet muting/unmuting.) Nothing against this excellent project though; I'm a big fan of Omar's Twitter! And I suspect most here will appreciate the easier scriptability of the filesystem approach than dealing with the atrocious syntax of AppleScript.
- _acnx 4y agoHave you got any suggestions for coping with RSI? I'm having significant issues.
- mokanfar 4y agoDevote a 4 digit budget for a new workspace that relieves RSI causing movements.
- jen729w 4y agoYou don't need to spend that much. I mean, go for it, it sounds fun, but just getting a desk the right height (i.e. probably lower than it is now) and a stable chair solved mine. See sibling comment here. https://news.ycombinator.com/item?id=34852007 https://news.ycombinator.com/item?id=34852007
- chaorace 4y agoIt's all about hardware. I've addressed it quite well with a three-pronged approach: 1. Motorized standing desk - typing from varying postures keeps strain spread out 2. Kensington trackball mouse - less hand sweeping / temptation to drags wrist on table 3. Ortholinear "Planck" keyboard - modifier keys accessible via thumb and programmable layers more generally can completely eliminate painful hand poses and keep fingers on the home-row
- rektide 4y agoIf anyone knows a twitter account even 1/8th as fun as Omar's[1] (the author of TabFS), I'd love to hear it. Endless fun meditations & musings on code & processes & computing. It's the most live, most inove stream of computing out there.
- chrisshroba 4y ago[1]: https://twitter.com/rsnous https://twitter.com/rsnous :)
- prhrb 4y agoThis seems very interesting and all the uses cases it satisfies
- layer8 4y agoI’m already thinking about how to name web pages to trigger shell command injection attacks. ;)
- sabujp 4y agoBe my guest, I'll run this in a vm. But what's even scarier is cross tab exploits. Want to steal data from another tab of a tabfs user?
- mgaunard 4y agoThis is extremely useful. Thank you.
- IncRnd 4y agoThis is a great idea. I really do like this. However, we shouldn't forget the reduced security of the situation. This opens entirely new attack vectors by introducing the otherwise fantastic ability of local programs to consume network input. With the flexibility and utility of local information comes additional remote attacks. In doing so, this extension blurs the lines between the greater difficulty of remote attacks vs local attacks. Many programs never considered in their threat models that input would come over the network. There are many developers who never try to protect past a certain point, saying, "if the person gets this far, there is nothing we can do anyway", then they ship.
- rmbyrro 4y agoIsn't this already a reality with wget, curl, and even package managers like pip and npm? I mean, any script on my machine can use these tools to interact with network input and execute untrustworthy code...
- IncRnd 4y agoThat's not the issue. The issue is adding network input into local tools whose threat models never considered having network input.
- NoZebra120vClip 4y agoIf a tool's threat model never considered having network input in the first place, that tool would seem deficient in most every real-world situation. I do not per se see a problem with "network input" but I think you're referring to input from untrusted sources, i.e. input that is not controlled or approved by the user of the tools. I think that a modern operating system must definitely have access controls that can flag and signal when input is untrusted, wherever the source may be, network, keyboard, USB stick, camera, whatever. If the input is from a network source such as el rando website, then an AAA-layer service can block, flag, log, and handle an exception, rather than forcing every tool and every application to track the provenance of every byte of input. Don't you think?
- vitiral 4y agoOne of the coolest use-cases for this for me is the ability to "host" these folders on a server and be able to access it from embedded contexts. I'm hoping to write a full computer stack that can run on microcontrollers (GitHub.com/Civboot/fngi), including a gopher-like browser for lightweight protocols. It could never interface with the real WWW... unless it had a server hosting the browser like this!
- evo_9 4y agoTook me forever to find a good option on FireFox, Simple Tab Groups is pretty awesome: https://addons.mozilla.org/en-US/firefox/addon/simple-tab-groups/ https://addons.mozilla.org/en-US/firefox/addon/simple-tab-gr...
- loa_in_ 4y agoBroTab exposes a python library for doing same in Firefox
- throwaway290 4y agoIt says some features are Chrome-only. How much of what us shown will not work in Safari? If anyone already tried. Otherwise I might...
- beckhamc 4y agoNice work! Is it possible to somehow switch to a tab somehow using this? (Use case: switching browser tabs within Emacs). Thanks
- arambhashura 4y agoYou mean like what this does? https://github.com/atomontage/osa-chrome https://github.com/atomontage/osa-chrome https://melpa.org/#/osa-chrome https://melpa.org/#/osa-chrome
- timetraveller26 4y agounix gang approves
- smusamashah 4y agoPrevious discussion https://news.ycombinator.com/item?id=25600338 https://news.ycombinator.com/item?id=25600338
- greatgib 4y agoThis is so awesome, I can't believe that someone really created that. I have dozens of windows, each with thousands tabs and this is something I would have dreamed of if I knew that it was possible. Really kudo to this guy for that!
- eichin 4y agoHmm, this might be the right audience - anyone with C and JS skills want to poke at https://github.com/osnr/TabFS/issues/75 https://github.com/osnr/TabFS/issues/75 and maybe come up with a pull request? (I got as far as I could on the C side, all the details are in the issue, but I'm not sure what shape the javascript side of the fix would be...)
- nchudleigh 4y agoNow THAT is unix philosophy at its best.
- rsync 4y agoI wish I could just visit about:tabs and see a plain text listing, one URL per line, of all the tabs I have open. No esoteric attack vectors, no major new features or integrations, just a quick and easy way for any user regardless of technical ability to dump their tabs before they update firefox or reboot their system ... ... since everyone has been burned by a FF restart that, for unknown reasons, fails to restore tabs even when configured properly to do so. As it stands, you need to dig several directories deep into /Library (or whatever, depending on your OS) and then use JSON tools to export ... I've already lost most people. FWIW, rsync.net has an outstanding $1500 bounty for this feature[1]. Consider this an inflation adjusted bump to $2500. [1] https://news.ycombinator.com/item?id=24524923 https://news.ycombinator.com/item?id=24524923
- ww520 4y agoI built [1] for the reason to save and restore the browsing tabs. It has export and import sessions feature as a by product. [2] also has a test list mode on tabs. [1] https://addons.mozilla.org/en-US/firefox/addon/session-boss/ https://addons.mozilla.org/en-US/firefox/addon/session-boss/ [2] https://addons.mozilla.org/en-US/firefox/addon/tip-tab/ https://addons.mozilla.org/en-US/firefox/addon/tip-tab/
- rsync 4y agoThanks - I will look at these.
- Sebb767 4y ago> ... since everyone has been burned by a FF restart that, for unknown reasons, fails to restore tabs even when configured properly to do so. I've actually had this several times with Chrome, but never with Firefox. The major point of me moving to FF actually was when Chrome lost 50 Tabs once again.
- frontierkodiak 4y agoFirefox reliably remembers my tabs, but never my pinned tabs-- which, of course, are the ones that I actually want to be preserved across restarts. In my dream world, pinned tabs persist forever, and are even accessible across devices, perhaps sorted into separate containers à la Sideberry.
- brimstedt 4y agoPretty cool, but my advice to anyone is still "stop using tabs, you os already have a window manager"
- beaugunderson 4y agotabs are great, why would I want 147 windows open? I can group my tabs by window; e.g. work, personal, side project, etc.
- brimstedt 4y agoMy counterquestion is: why use tabs as bookmarks? Usually when you have that many tabs open, it's not because you read/work on the pages.
- haunter 4y agoSomething in a similar vein: BTFS, mount a torrent file (or magnet link) as a read only drive https://github.com/johang/btfs https://github.com/johang/btfs It's really good, and use it a lot of times. Doesn't seem to be an active project anymore though but it still works
- danShumway 4y agoIf anyone already uses Sideberry (and I assume TST will work as well) on Firefox and doesn't want to download an additional extension or doesn't want something quite this powerful, I wrote https://textmark.netlify.app/ https://textmark.netlify.app/ a week or two ago, and I've been using it as a bookmark replacement. Sideberry allows selecting arbitrary groups of tabs and copying them to the clipboard as an indented list of tabs. The site I put up will reopen those tabs, preserving the order and parent-child relationships between pages. It also uses `rel=noopener` to avoid a security risk I've noticed with similar sites in the past with parent-child page references. And it has no advertising and absolutely zero user tracking (aside from Netflify serverside logs that I can't turn off), since it's a project I made for myself and costs me nothing to run. Also, the entire source (minus the favicon) is in one page, so if you want to self-host it yourself for extra protection, just view-source and copy and paste. It'll work on any static web host. I've found this to be a hugely beneficial replacement for bookmarking. Bookmarks are too slow and cumbersome for me, so I end up not really using them. It's also annoying to enter descriptions for bookmarks, and I don't like that all of my bookmarks need to be in the browser at the same time. This allows me to copy tabs out to separate files (I use org-mode to sort everything). And then I just keep this site pinned and use it to reopen tabs later if I context-switch. It's the closest I've ever come to being able to actually manage my browser sessions and stop my tabs from growing out of control into the thousands. I was going to wait to Open Source it and write up a better explanation of the workflow I use before sharing it, but it's appropriate to share it here. It's not nearly as powerful as what TabFS is talking about (and I'm very interested to look into TabFS more, since I've been thinking about roughly the same problem, and this looks like a potentially quite powerful setup), but it's a small system that has made a big impact for me over the past week or so, and since I was already using Sideberry it doesn't require me to install anything new or open any additional attack vectors.
- mkl 4y agoFor some reason (to confuse everyone?) it's "Sidebery", with one r. https://addons.mozilla.org/en-US/firefox/addon/sidebery/ https://addons.mozilla.org/en-US/firefox/addon/sidebery/
- 4y ago
- _V_ 4y agoThis looks quite nice - for some time I have been trying to list all tabs in Chromium window so I can stick it to proper workspace (I'm using i3) - one for general browsing and one for IM/socials. If this can identify the window (PID or better WindowID like wmctrl -l lists) it will be perfect!
- lerax 4y agoOh cool! it seems I am a first class citizen here! Linux + Chrome + Emacs user! I will test it
- sabujp 4y agoI have to thank emacs OS (users) for this browser extension.
- Roxanne5 4y ago[dead]
- jacob019 4y agoCan this be used like selenium for testing/scraping/automation? If you can open tabs, dump the DOM and inject JS, then I would think so.
- TenJack 4y agoThis reminds me of Bookmark OS but not in the browser https://bookmarkos.com https://bookmarkos.com
- arjvik 4y agoWhat would it entail to add support for this to another browser? Is there an API contract defined and documented anywhere? I'm specifically hoping to use this with Qutebrowser
- wraptile 4y agoQutebrowser already kinda does this. You can use environment variables to access most browser details in python user scripts. For example, QUTE_HTML points to file containing current tab's HTML. It has been one of my favorite things about this browser as you can quickly write up easily maintainable user scripts in Python compared to whatever unmaintainable magic greasemonkey scripts end up being. See more: https://qutebrowser.org/doc/userscripts.html https://qutebrowser.org/doc/userscripts.html
- EFruit 4y agoI use a deeply modified fork of this every day. My changes have been: 1. Rewrite the backend in Go (I'm nkt qualified to audit the C version, and having Web Stuff™ interact directly with an unaudited C filesystem daemon makes my skin crawl) 2. Modularize it quite a bit to make it easier to add endpoints like... 3. Rudimentary Tree-Style Tabs support 4. Desperately try to improve the performance enough to navigate a sizable session (I have not yet succeeded) Even after all this, I've come to the conclusion that the relationship is backwards: the filesystem representation needs to drive the browser, not the other way around. It's my considered opinion that some hero needs to step up and build a browser that exists to render one tab and nothing else, shelling out for everything more complex than scrolling. Then the power users cwn supply their own tab/bookmark/window/filesystem schemes using whatever glue they prefer, be it python, node, shell scripts, Windows Explorer...
- ramijames 4y agoAt that point it's just an OS.
- MathMonkeyMan 4y agoThat's a good point. Browsers are desktop environments with a built-in application runtime. Maybe it's the "Inner-platform effect." It's an interesting idea to pull bits of the browser back into the system, or alternatively to write a desktop environment that's also a web browser (ChromeOS?). A former coworker used Plan9 at a previous job, and he said it was cool how you could draw a rectangle on part of a terminal, and pipe that text (as it changes) to another process. Maybe rethinking GUI (and web in particular) from a unixy/plan9y perspective is a worthwhile exercise. I grew up on Windows, and then there was the browser, and now everything is just the browser.
- deleted 4y ago[deleted]
- alanbernstein 4y agoI just moved my bookmark management out of my browser because I wanted to use unix-y tools to deal with them. CLI instead of a GUI afterthought. I think you're absolutely right. I'd love to access browser history at CLI. And management of open tabs. Care to share your fork? Go works better for me.
- yonz 4y agoGenius! Gott love it when simple ideas create game changing improvement. I have 168 tabs open and regardless of how hard i organize them, it's still a mess. I will give this a try today.
- zemetras 4y agoWorking on a nodejs/electron app called "canvas" (code hosted on a personal gitlab inst for now), core functionality being organizing all your data into "contexts". A context is identified with a context url - fe customerA/projectP/reports, each url part representing a layer on top of your data, using roaring bitmaps and lmdb underneath. Switching your context to customerB/projectR automatically changes your tabs(socketio based poc ff extension), it also exports all your data(data/abstr/notes, data/abstr/tabs, data/abstr/files etx) as part of a webdav exported "virt" fs tree. While the concept is not new, paired with the cli iface the ux is a huge boost to productivity, witch chokidar based monitoring of downloads and desktop and minio/s3, my drsktop is finally used as a virtual work desk and not as a showcase for the 2nd law of thermodynamics. Stay tuned
- zemetras2 4y agoWorking on a nodejs/electron app called "canvas" (code hosted on a personal gitlab instance for now), core functionality being organizing all your data into "contexts". A context is identified by a context url, fe customerA/projectP/reports, each url part representing a layer on top of your data, using roaring bitmaps and lmdb underneath. Switching your context to customerB/projectR automatically changes your tabs(socketio based poc ff extension), it also exports all your data(internally data/abstr/notes, data/abstr/tabs, data/abstr/files etc) as part of a webdav exported "virtual" fs tree. While the concept is not new, paired with the cli iface the ux is a huge boost to productivity, esp with chokidar based monitoring of the os downloads and desktop folders and minio/s3; my desktop is finally used as a virtual work desk and not as a showcase for the 2nd law of thermodynamics. Stay tuned
- dcreater 4y agoDoes this load all videos and images into the filesystem for Onlyfans?