{"id":19275290,"url":"https://github.com/jangko/razcal","last_synced_at":"2025-10-09T22:07:20.224Z","repository":{"id":146949427,"uuid":"101191156","full_name":"jangko/razcal","owner":"jangko","description":"Build cross platform desktop app with Lua, MoonScript, and Layout Language","archived":false,"fork":false,"pushed_at":"2017-09-25T02:22:52.000Z","size":1453,"stargazers_count":17,"open_issues_count":1,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-21T23:36:01.315Z","etag":null,"topics":["cassowary","desktop-app","framework","layout","layout-engine","lua","moonscript","nim-lang"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jangko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2017-08-23T14:42:45.000Z","updated_at":"2024-05-12T03:00:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"df2fefe9-2b00-441e-b48b-93663d5cd540","html_url":"https://github.com/jangko/razcal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jangko/razcal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jangko%2Frazcal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jangko%2Frazcal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jangko%2Frazcal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jangko%2Frazcal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jangko","download_url":"https://codeload.github.com/jangko/razcal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jangko%2Frazcal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002116,"owners_count":26083307,"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","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cassowary","desktop-app","framework","layout","layout-engine","lua","moonscript","nim-lang"],"created_at":"2024-11-09T20:50:05.580Z","updated_at":"2025-10-09T22:07:20.211Z","avatar_url":"https://github.com/jangko.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# razcal\n\na cross platfrom desktop app framework written in Nim\n\n---\n\n### A bit history\n\nIf you come here, you should already know something about [electron](https://electron.atom.io/),\na big desktop app framework written in C++.\nPerhaps you also know [CEF](https://bitbucket.org/chromiumembedded/cef), electron minus node.js.\n\nWell, I used them both in the past, and some of my project still depend on earlier version of CEF,\nbut they grow up immensely, adding much features I don't need at all.\nBuilding the binary myself already a nightmare, removing unneeded features is worse.\n\nThen I stumbled upon [Layx](https://github.com/layxlang/layx), a layout language written in javascript.\nThen I thought, hey, why not we have something like electron/CEF, but lightweight and hackable.\nAnd of course, don't use xml-like whatsoever for the layout,\nwe already have too much xml-like language to describe GUI.\n\nThat is how razcal idea was born, written in [Nim](https://nim-lang.org/),\nusing Layx inspired layout language, scripted by [MoonScript](https://MoonScript.org/)\non top of [Lua](https://www.lua.org/) vm.\nCurrently using [kiwi](https://github.com/yglukhov/kiwi) as it's constraint solver algorithm.\nThanks to Nim powerful metaprogramming feature, binding to Lua is easy,\nrazcal use [nimLUA](https://github.com/jangko/nimLUA) to automate binding process\ninterleaved with hand coded glue code.\n\nYou might be tempted to say this is an overly ambitious project.\nUsing new emerging language like Nim and MoonScript,\nplus a home brew layout language, what kind of hybrid mutant razcal will be?\n\nI will be nice, you can choose what component to be included in your final executable,\nyou can add more functionality either using Nim, Lua, or MoonScript as a module.\nIt already and always be easy to build.\n\n### Interesting facts\n\n* The main language to develop razcal is Nim, it has indentation significant syntax.\n* MoonScript provides a clean syntax using significant whitespace that avoids all the keyword noise typically seen in a Lua script.\n* razcal Layout Language, being inspired by Layx, also has significant whitespace syntax.\n\nAnd I'm thinking to use Yaml as configuration script, which is also use indentation based syntax.\nPython?, hmm....., the standard Python is too big, perhaps MicroPython is more suitable.\n\n### Construction phase\n  \nThe [first phase](https://github.com/jangko/razcal/wiki) already done. \nNow we can move to the next construction phase, a lot of work to do:\n\n* Parser\n  * parse more styling syntax\n    * text \u0026 fonts\n    * colors \u0026 backgrounds\n    * transformations\n    * tables\n    * input widget\n  * parse conditional constraint\n  * overflow/scrolling content\n  * content size constraint\n* Semantic pass\n  * activating more style\n  * applying functional constraint\n  * applying conditional constraint\n  * exposing events to lua\n* API\n  * widget geometry\n  * anim/hierarchy\n  * style \n  * events\n* Test\n  * conditional compilation system\n  * robust test suite for Nim \n  * for Lua side\n  * automated build system\n* Docs\n  * documentation\n  * tutorial\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjangko%2Frazcal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjangko%2Frazcal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjangko%2Frazcal/lists"}