{"id":28098743,"url":"https://github.com/lichendust/lena","last_synced_at":"2025-05-13T17:58:44.753Z","repository":{"id":288506285,"uuid":"966196040","full_name":"lichendust/lena","owner":"lichendust","description":"🕹️ A handmade framework for making tiny games","archived":false,"fork":false,"pushed_at":"2025-05-05T19:15:57.000Z","size":128,"stargazers_count":95,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-05T20:33:24.147Z","etag":null,"topics":["2d","framework","game","game-development","gamedev","gamejam","lena","odin","pixel-art","retrogamedev","retrogaming"],"latest_commit_sha":null,"homepage":"","language":"Odin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lichendust.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-14T14:49:07.000Z","updated_at":"2025-05-05T19:16:00.000Z","dependencies_parsed_at":"2025-04-18T13:14:07.270Z","dependency_job_id":"209be7f5-3572-4c48-9fed-13d042015428","html_url":"https://github.com/lichendust/lena","commit_stats":null,"previous_names":["lichendust/lena"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lichendust%2Flena","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lichendust%2Flena/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lichendust%2Flena/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lichendust%2Flena/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lichendust","download_url":"https://codeload.github.com/lichendust/lena/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253999867,"owners_count":21997346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2d","framework","game","game-development","gamedev","gamejam","lena","odin","pixel-art","retrogamedev","retrogaming"],"created_at":"2025-05-13T17:58:44.422Z","updated_at":"2025-05-13T17:58:44.727Z","avatar_url":"https://github.com/lichendust.png","language":"Odin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🕹️ Lena\n\n![](https://stuff.lichendust.com/media/lena.webp)\n\nLena is a compact, handmade framework for making tiny games with palette graphics. It's software-rendered, cross-platform and provides artistic constraints that challenge your creativity without limiting your game's size and scope.\n\nIt comes with batteries-included palette graphics, palette-blending and other drawing effects, loaders and decoders for image and audio assets, a simple audio interface, and built-in text rendering. It also compiles and runs on:\n\n- Windows (Native)\n- macOS (Native)\n- Linux (via SDL3)\n- WebAssembly (Native)\n\nThe core functionality of Lena is implemented from scratch and the whole code base is designed to be extremely legible and hackable. Lena *only* relies on the libraries that ship with the Odin compiler.\n\n## Library and Structure\n\n### Lena\n\nThe `lena` directory contains the actual library, with everything you need for windowing, input, audio, rendering and a host of other utilities. Its `readme` contains the entire documentation for the API, as well as an in-depth overview of the paradigms and idioms of the library.\n\n### WASM\n\nThe `wasm` directory provides the resources you need to ship a Lena game in a web browser. The `readme` goes into the specifics of how you'll need to modify and compile your code, and how to use the provided JavaScript and HTML assets to host your game.\n\n## A Learning Tool\n\nLena has an ulterior motive too: it's a tiny code base with many platforms, implementing all but audio decoding natively. If you're new to 'low-level' systems programming and are interested in more building more advanced applications, Lena might be a perfect learning tool for you.\n\nLena is the intermediate code base I wish I'd had when I was beginning to program: a powerful library I could still read and understand, architected for a beginner to follow, that also does meaningful work and allows me to have fun making games on top of it, without the underlying engine feeling like an unattainable black box.\n\nTen years too late for me, I hope it can be this for someone else now.\n\n## Acknowledgements\n\nLena makes use of —\n\n- [Scientifica](https://git.peppe.rs/fonts/scientifica) by [NerdyPepper](https://oppi.li) as its built-in font.\n- [Colordome-32](https://lospec.com/palette-list/colordome-32) by [Polyphrog](https://www.pixilart.com/polyphrog/gallery) as its default colour palette.\n\nLena was inspired by —\n\n- [Kit](https://github.com/rxi/kit) by [rxi](https://rxi.github.io), a similar exercise in compact framework design.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flichendust%2Flena","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flichendust%2Flena","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flichendust%2Flena/lists"}