[HN Gopher] Show HN: A Tiling Window Manager for Windows, Writte...
___________________________________________________________________
Show HN: A Tiling Window Manager for Windows, Written in Janet
Hi HN! I read[1] about Janet[2] some time ago, then immediately
got impressed by the enthusiasm of its community, and by the
language itself, so I started playing with it. At the time I was
searching for a tiling window manager for Windows, and unavoidably
the idea of scratching my own itch with Janet got hold of me, so
Jwno was born. Simply put, Jwno is a keyboard-driven tiling window
manager for Windows, scriptable with Janet. But since it has a
complete Lisp runtime, and a thin wrapper library for Win32
APIs[3], you can certainly do much more with it. I hope you'll
enjoy playing with it as much as I enjoyed building it. And yes, I
use StumpWM on the Linux side, by the way. [1]:
https://ianthehenry.com/posts/why-janet/ [2]: https://janet-
lang.org/ [3]: https://github.com/agent-kilo/jw32
Author : agentkilo
Score : 183 points
Date : 2025-05-20 15:08 UTC (7 hours ago)
(HTM) web link (agent-kilo.github.io)
(TXT) w3m dump (agent-kilo.github.io)
| pjerem wrote:
| Oh ! That looks cool :)
| agentkilo wrote:
| Thanks :)
| piskov wrote:
| Just in case someone new is looking, komorebi is great:
|
| https://github.com/LGUG2Z/komorebi
| agentkilo wrote:
| Definitely! I got great inspirations from both of the Komorebi
| and GlazeWM communities. People who like tidy desktops are
| definitely nice people :)
| bsnnkv wrote:
| komorebi dev here - Jwno is awesome and I highly recommend
| people give it a try (especially people who enjoy writing
| Lisp!)
|
| The Windows tiling window manager development scene is a very
| kind, relaxed and collaborative space where we all take
| inspiration from and support each other
| TeMPOraL wrote:
| That is amazing and I hope it'll continue to be so :).
|
| The Linux scene isn't bad either (or at least it wasn't 4+
| years ago when I was into this); I've used StumpWM as a daily
| driver for many years, and while it was definitely niche, I
| still saw friendly exchange of ideas and experiences with
| people using and/or contributing to dwm, i3, and ratpoison.
|
| (Then there's EXWM, but I never really mustered the courage
| necessary to try it.)
| bsnnkv wrote:
| Jwno is great, agentkilo is kind, Lisp is magic :)
| agentkilo wrote:
| Thanks for the kind words! It means a lot coming from you :)
| pbohun wrote:
| This is so cool! It's funny because open source devs are making
| Windows better while MS is actively making it worse. If MS
| removed all telemetry and AI (and restored win10 functions in
| context menus), I would probably move back to it.
|
| I've recently started playing around with Janet, and it's a great
| language. I think it's inspired by Clojure and Lua, and somehow
| manages to be better than both (in my opinion).
| agentkilo wrote:
| > I think it's inspired by Clojure and Lua, and somehow manages
| to be better than both
|
| This is exactly how I feel about Janet too. I don't think I
| have enough experience on Clojure or Lua to comment on them,
| but I got attracted to Janet almost immediately.
|
| Working on Jwno also confirms my first impression on Janet:
| It's really a practical language. The tooling has some room for
| improvement, but the language itself can get things done -
| usually fast and easily.
| cfiggers wrote:
| Agreed on the need for better Janet tooling. I'm trying to be
| the change I wish to see with Janet LSP[0]. Issues and
| contributions are welcome!
|
| [0] https://GitHub.com/CFiggers/janet-lsp
| pbohun wrote:
| This is how I feel about Janet too, absolutely practical. So
| far it's been a breeze to write the little experiments I've
| done so far.
| sph wrote:
| How's the REPL/interactive editing story? I feel weird using
| a Lisp that is not as interactive as Racket, Scheme or Common
| Lisp. Running scripts from the REPL ain't the same thing as
| C-x C-e an expression on a live program
| behnamoh wrote:
| > I feel weird using a Lisp that is not as interactive as
| Racket, Scheme or Common Lisp
|
| I think Racket and Scheme don't belong in there because
| neither has a REPL as powerful and "interactive" as Common
| Lisp REPL. They don't support images either (but Janet and
| CL do).
| TeMPOraL wrote:
| There's multiple dimensions you can slice and dice the
| Lisp family by. Images and REPL experience are two big
| ones, but they're almost orthogonal.
| behnamoh wrote:
| I didn't mean that Racket and Scheme aren't Lisp (they
| are!). I meant they don't have the images and REPL-driven
| development of Common Lisp.
| tmtvl wrote:
| As a Common Lisper with a Scheme background I'm gonna
| guess that by the interactivity of the REPL you mean the
| condition system with restarts? While most Schemes don't
| really have anything like it, I seem to recall MIT/GNU
| Scheme having something kinda similar. And I mean, hey,
| it's got Edwin, so it definitely has interactivity.
| behnamoh wrote:
| Yes, I mean the conditions and restarts system in CL.
| Haven't seen anything like that in Clojure and other
| Lisps.
| rich_sasha wrote:
| I'm curious, did you find there were things that were easier to
| do _because_ it 's Janet/lisp-like language? Or you just fancied
| like using it (perfectly valid reason of course!).
|
| I tried various lisp dialects, but I could never find the killer
| feature vs other languages I already use. And I can justify why I
| use these specific languages I do use, if that makes sense.
| agentkilo wrote:
| I find the REPL and interactive development workflow
| invaluable. A window manager is a long-running background
| service by nature, and has a lot of accumulated runtime states.
| The ability to peek inside and debug while the process keeps
| running helped me a lot when building Jwno.
|
| I think Jwno's REPL module is so important, I specifically
| changed Jwno's architecture at one point to make it work.
| behnamoh wrote:
| > I find the REPL and interactive development workflow
| invaluable. A window manager is a long-running background
| service by nature, and has a lot of accumulated runtime
| states. The ability to peek inside and debug while the
| process keeps running helped me a lot when building Jwno.
|
| Sure, but any particular reason you picked Janet over Common
| Lisp? They both support images, REPL, hot-code-reloading,
| etc.
| iLemming wrote:
| > I could never find the killer feature vs other languages I
| already use.
|
| You're kidding or trolling? Structural editing and the REPL are
| the greatest features of Lisp. The ability to just grab any
| expression and move it around simplifies so many things when
| coding and refactoring. With the connected REPL you can eval
| anything on the spot, that turns the entire experience of
| coding into a video game -- you don't need to wait for linter,
| linker, compiler -- you just run things. You often don't even
| have to save anything. I suspect when you "tried various lisp
| dialects" maybe you didn't use structural editing and the
| connected REPL?
|
| Often people confuse Lisp REPL with REPLs in other programming
| languages, e.g. Python, where usually you have to copy-n-paste
| chunks of code into it. Lisp's REPLs are different in the sense
| that every step in Read-Eval-Print-Loop is different -- in
| Lisp, you typically eval things right where you type them, by
| sending whole expressions to the connected REPL, which could be
| remote. We (for example) run ours in a Kubernetes cluster, that
| allows us to experiment with pods, running queries against the
| "real" DB tables, testing services "live".
| 90s_dev wrote:
| > You can implement custom commands and hooks to trigger. It's
| even possible to call native Win32 APIs in your own
| implementations. For example, to always move a Notepad window to
| the (100, 100) coordinates on your screen(s), using the low-level
| SetWindowPos function
|
| Great job. Looks really interesting and useful. And a fun excuse
| to write Lisp.
|
| I really appreciate it when APIs give you high-level
| functionality but keep the door open to lower-level APIs when you
| really need them.
| packetlost wrote:
| This might be the coolest project I've seen using Janet yet!
| pona-a wrote:
| What kinds of automation are possible with having a scripting
| language inside your WM, rather than Sway-style IPC? I heard the
| new Windows WMs were where most pure workflow advances happen, so
| I wonder if they can be replicated on Linux.
| roxolotl wrote:
| Tangential but I've been writing a lot of Janet recently using
| Joy[0], web framework, to build a small web app. Would love to
| hear what you learned about Janet from doing this work and how
| you feel about the language afterwards.
|
| The one thing I've noticed is that it seems like Janet had a
| burst of interest 2020-2022 but it has since slowed down. Would
| love to see it become popular again. The main reason I'm using it
| is because I like how it's both powerful and lightweight. I'd use
| clojure but I don't want Java. I'm tempted to also try Common
| Lisp but so far Janet has been great.
|
| [0]: https://github.com/joy-framework/joy
| agentkilo wrote:
| I think Janet is quite...liberal? It's a practical language,
| but doesn't force a specific paradigm on you. There're "escape
| hatches" in different levels of the language, and I like that.
|
| Maybe the most "opinionated" things in Janet are the ev stuff
| and fibers. I think they're done right though, you just need to
| be careful with the event loop when embedding Janet.
| nicce wrote:
| How it compares with Lua?
| 77pt77 wrote:
| This one actually has real arrays (mutable and immutable)
| giraffe_lady wrote:
| Strictly better unless you need an extremely small runtime
| rather than a very small one, or are exposing a scripting
| API to users who will recoil from prefix notation.
| behnamoh wrote:
| If you like Janet and Lua, might as well try Fennel, which
| was made by the creator of Janet.
| ang_cire wrote:
| Custom windows shells (I know this is just a window manager, but
| still) in the year of our lord 2025? This takes me back to the
| days of installing bb4win and litestep in XP. I'm a kid again!
| insin wrote:
| TIL bbLean [1] still works in Windows 11! Currently digging
| through my archives for my old BB4Win styles repository
|
| [1] https://bb4win.sourceforge.net/bblean/
| 90s_dev wrote:
| Wow, bb4win and bblean take me _way_ back. In fact, they were
| a huge inspiration for my shells[1] feature, which are just
| userland programs that happen to be able to manage panels
| (windows).
|
| [1] https://90s.dev/technical/architecture.html#shells
| reddit_clone wrote:
| >litestep
|
| Brings back memories !
| piskov wrote:
| Oh shit yes: Rainlendar
| scbrg wrote:
| flashback, 2001. I'm 25, sitting in the office with litestep
| installed (which honestly was the only alternative to Linux or
| resignation). My five years younger colleague steps up to my
| desk and says "hey, cool desktop!"
|
| I start explaining, very carefully, like I'm talking to a
| child, that this is an alternative shell, which replaces the
| standard Windows Explorer _et cetera, und so weiter..._ it 's
| very complicated you know...
|
| Guy says, "cool... hey, why don't you check out this URL?". I
| do. It's the litestep contributor page. His nick is on it. Near
| the top.
|
| Ow.
| leviathan wrote:
| First part of your story reminded me of when I once trolled a
| non-tech savvy friend by running Windows in a VM on Linux,
| and told him "have you ever seen what's behind windows?" then
| I exited full screen to reveal a desktop full of terminals
| running the matrix digital rain.
| philsnow wrote:
| Sloop manager for replacing progman.exe in windows 3.1, for
| me..
| aus10d wrote:
| Janet looks really neat. And this project seems really cool.
| Windows DESPERATELY needs a more powerful built-in manager. It's
| ridiculous to use the mouse all the time.
| Rasthor wrote:
| One of the later PowerToys updates makes the first few steps in
| the right direction with "fancy zones". It's not strictly
| native windows, but still developed by Microsoft and adds
| keyboard shortcuts for all its utilities
| TeMPOraL wrote:
| PowerToys seems to be making two step forward, one step
| backwards, and then makes a leap in a random off-axis
| direction. Every time an update comes, I feel both joy and
| worry - I expect to see some new cool thing (and possibly
| even useful to me), but I also worry about bloat and random
| performance degradations. I haven't bothered with measuring
| and quantifying it properly, but I do feel PowerToys got
| heavier and slower over the last 2 years.
|
| Ironically, 90% of use I get from them is remapping Caps Lock
| to CTRL. Which I historically did with AutoHotkey, which was
| _much_ lighter, but then there 's the 10% of the time I need
| something else from PowerToys...
| nemomarx wrote:
| Even lighter than autohotkey is remapping on the hardware
| of the keyboard. There's a lot of open source firmware
| options for that now in the custom scene
| layer8 wrote:
| The even simpler solution to remapping Caps Lock is to use
| SharpKeys, which applies registry settings to make use of
| Windows' built-in remapping functionality.
| behnamoh wrote:
| > Windows DESPERATELY needs a more powerful built-in manager.
| It's ridiculous to use the mouse all the time.
|
| And yet, I find Windows window management far more advanced
| than macOS. It's ridiculous that up until recently, macOS
| didn't even have basic max-size functionality w/o reaching for
| 3rd party apps.
| jazzyjackson wrote:
| I never use the mouse to move windows around, windows key +
| arrows key meets my needs fine even multi-monitor, breaks the
| screen up into halves and quarters. Alt-tab to change focus.
| MisterKent wrote:
| How does it compare to komorebi? I've been using it for about 5
| months with great success. I'm a Hyprland user when I'm on my
| personal machine, but for windows Komorebi has let me keep my
| muscle memory and workflow largely intact.
| agentkilo wrote:
| I think these are the most obvious differences between the two:
|
| * By default, Komorebi uses dynamic tiling, while Jwno uses
| manual tiling.
|
| * Komorebi has workspaces, Jwno works with Windows native
| virtual desktops instead.
|
| * Komorebi uses IPC and native system command line to send
| commands, while Jwno usually operates all by itself.
|
| There are definitely other details that are important to you,
| but these are the things that immediately came to my mind. I
| don't run Hyprland so can't really comment on that.
| iLemming wrote:
| Whoa, very cool. I love WMs, I love Lisp, and I hate Windows.
| This seems to be a perfect "medicine" for my frustration with it.
| alpb wrote:
| It's not a tiling manager but slightly related: I replicated
| Spectacle/Rectangle (macOS apps) on Windows a while ago to snap
| windows to edges/corners/two-thirds/one-thirds etc a while back.
| If you're interested:
| https://github.com/ahmetb/RectangleWin/blob/main/README.md
| videogreg93 wrote:
| I love Rectangle, will definetly check this out!
| Pfeil wrote:
| I always disliked the chaos that happens quickly with application
| windows, and loved the idea of tiling. But none of them really
| worked for me practically until I found PaperWM around a year ago
| or so (gnome extension). It has few core shortcuts and feels more
| natural. Like you would really arrange applications directly on
| your desk. It does not limit itself by your screen width and has
| the nice default that a new window appears to the right of the
| current window (configurable). You seldomly have the need to re-
| arrange windows, because the default just fits 99% of all cases.
| In addition, you still have the comfort of gnome. No hacky config
| files just to get wifi working or so. For work we have OSX, and I
| am really missing it there (I am using rectangle there instead).
| https://github.com/paperwm/PaperWM?tab=readme-ov-file#usage
| bsnnkv wrote:
| Jwno can do this!
| https://agentkilo.itch.io/jwno/devlog/871672/scroll-jwno-scr...
| TeMPOraL wrote:
| Long-time StumpWM user, before I switched back to Windows a few
| years ago. This is super-exciting to see, and I'm going to take
| it for a spin. It might just address my major frustrations with
| arranging windows and switching between them; my monitor seems
| just the right shape/resolution for the standard Windows splits
| to be suboptimal.
|
| (Browsers, in particular, I use full-screen less and less. That
| annoying trend of squeezing everything into short lines "because
| readability" is just wasting too much screen space; zooming in
| makes everything too big, and I'm getting tired of writing
| userstyles or userscript to fix it for every other page I open,
| so I'm back to keeping 2 or 3 columns of windows running.)
|
| Also, any excuse to use more Lisp is good in my book. Based on
| the screenshots, it looks stellar; if it works half as well as it
| comes across, I'll switch over instantly.
| entropie wrote:
| I recently tried hyprland after using xmonad for like 10+ years
| and wondered about the decision to bind workspaces to displays. I
| didnt like that. How does Jwno handle multiple monitors? I have
| looked at the docs and didnt see it mention anywhere.
___________________________________________________________________
(page generated 2025-05-20 23:00 UTC)