2
4
Fork
You've already forked bunny
1
BunnyUI, A minimalistic, yet very comfortable UI toolkit for Löve
  • Lua 100%
2026年03月25日 21:50:08 -03:00
extensions Oops! 2026年03月25日 19:54:22 -03:00
.gitignore Okay okay, I'll stop fiddling lol 2026年03月25日 16:06:35 -03:00
.luarc.json Massive cleanup. 2026年03月25日 17:21:27 -03:00
bunny.lua Massive cleanup. 2026年03月25日 17:21:27 -03:00
conf.lua Okay okay, I'll stop fiddling lol 2026年03月25日 16:06:35 -03:00
CONTRIBUTE.md Initial. 2026年03月25日 13:34:14 -03:00
display_logo.png Initial. 2026年03月25日 13:34:14 -03:00
LICENSE.txt Initial. 2026年03月25日 13:34:14 -03:00
logo.svg Initial. 2026年03月25日 13:34:14 -03:00
main.lua Fix wrong URL 2026年03月25日 21:50:08 -03:00
README.md Okay okay, I'll stop fiddling lol 2026年03月25日 16:06:35 -03:00
screenshot.png Updated 2026年03月25日 13:36:40 -03:00

The BunnyUI logo, ressembling a rounded button.

bunnyUI is a minimalistic UI toolkit for Löve, that consists on a flexbox-like layout engine, a simple inheritance-based Widget system, and a decoupled window manager mechanism.

Note

This project is in ALPHA and many things may change.

Demo:

A screenshot of BunnyUI, a bunch of window presenting different features.

  1. Get Löve
  2. Fetch this repository (here's a zip!)
  3. And run the repository with Löve by...
    1. Running love /path/to/bunny in your terminal
    2. Dragging the project to Löve itself
    3. Or by renaming the zip above to be .love instead of .zip, and double clicking it.

Getting started:

  1. Download the bunny.ui file from the repo (here's a direct link!)
  2. Place it in your project
  3. Then tell your project to work with Bunny
local bunny = require("bunny")
local wm = bunny.WindowManager()
wm:add(bunny.Window {
 title = "Hello, world!",
 bunny.Button "I'm a button!"
})
function love.draw()
 bunny.beginFrame()
 wm:draw()
end
function love.wheelmoved(x, y) bunny.onScroll(x, y) end
function love.textinput(t) bunny.onTextInput(t) end
function love.keypressed(k, s, r) bunny.onKeyPressed(k, s, r) end
function love.keyreleased(k) bunny.onKeyReleased(k) end

Note

It has no documentation yet! But I assure you, reading main.lua will give you a pretty darn good idea of how to use it ;)

Features:

  • Very simple to use: If you already know HTML or immediate mode UIs, this might feel very comfortable.
  • No extra dependencies: You download the bunny.lua file into your project, require it, and boom.
  • Lightweight core: It intentionally comes split into several optional files, with the core being just-about-enough for a lot of things.
  • Easy to hack into: Engineered specifically so you can bring your own widgets, your own window manager, your own window fabrics, even your own rendering routines!

The core comes with: Generic containers, Scrollable containers, Buttons, Checkboxes, Sliders, Spinners, Labels, Windows, a basic Window Manager, an inheritance-based Widget system, a simple theming system, forms, and some other stuff I probably forgot about.

Limitations:

  • It is, of course, not full featured. Making it full featured would be an absolute nightmare for me, and I'd rather keep this as something simple to use and nice to prototype stuff with.
  • It might be slow on older hardware as it sacrifices performance in the name of simplicity for layout generation.
  • Doesn't support anything but Löve, which MIGHT change in the future, but don't count on it.
  • No textboxes by default, do you know just how ridiculously complex these darned things truly are? Horrifying!

Extensions

As bunnyUI's core is quite simple already, I've decided to split off some extra, big boy widgets, into separate files that you can simply add to your project, and things should simply Just Work(tm)

I'm absolutely up for people to create their own awesome widgets and for them to send me a PR, that'd be great! But if you don't want to send me a PR, keeping stuff on their own repo is also great.

Right now, I have some extensions that are in-development and 100% utterly broken, so do not try to use them for now.

Things to do now:

  • Code cleanup, speeecially the mouse handling stuff.
  • Figure out how it would work in the context of a game.
  • Fix the extensions and clarify how to use them.
  • Write proper documentation.