{"id":16918463,"url":"https://github.com/poignardazur/panoramix","last_synced_at":"2025-05-12T03:32:02.829Z","repository":{"id":47490802,"uuid":"325799592","full_name":"PoignardAzur/panoramix","owner":"PoignardAzur","description":"A prototype implementation of reactive UI in rust","archived":false,"fork":false,"pushed_at":"2022-12-09T15:51:07.000Z","size":622,"stargazers_count":82,"open_issues_count":1,"forks_count":2,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-10-14T06:23:15.270Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/PoignardAzur.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-31T12:50:39.000Z","updated_at":"2024-07-25T13:43:33.000Z","dependencies_parsed_at":"2023-01-25T22:31:52.352Z","dependency_job_id":null,"html_url":"https://github.com/PoignardAzur/panoramix","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoignardAzur%2Fpanoramix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoignardAzur%2Fpanoramix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoignardAzur%2Fpanoramix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoignardAzur%2Fpanoramix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PoignardAzur","download_url":"https://codeload.github.com/PoignardAzur/panoramix/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221582414,"owners_count":16847391,"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":[],"created_at":"2024-10-13T19:40:07.731Z","updated_at":"2024-10-26T20:57:49.648Z","avatar_url":"https://github.com/PoignardAzur.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Panoramix\n\n[![crates.io](https://meritbadge.herokuapp.com/panoramix)](https://crates.io/crates/panoramix)\n[![docs.rs](https://docs.rs/panoramix/badge.svg)](https://docs.rs/panoramix/)\n[![license](https://img.shields.io/github/license/PoignardAzur/panoramix)](https://github.com/linebender/druid/blob/master/LICENSE)\n[![chat](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://xi.zulipchat.com)\n\n**Note:** The development of Panoramix is currently (as of December 2022) on hold as I work on [masonry](https://github.com/PoignardAzur/masonry-rs). I do intend to resume eventually.\n\n**Panoramix is an experimental GUI framework for the Rust programming language.**\n\nThe framework is **data-driven and declarative**, drawing some inspiration from [React](https://github.com/facebook/react), and implemented on top of the [Druid](https://github.com/linebender/druid) toolkit (hence the name).\n\nIt aims to use **simple, idiomatic Rust**: Panoramix doesn't use unsafe code, cells, mutexes, or DSL macros.\n\n\n## Getting started\n\nHere is our \"hello world\" example:\n\n```rust\nuse panoramix::elements::{Button, Label};\nuse panoramix::{component, Column, CompCtx, Element, NoEvent, RootHandler};\n\n#[component]\nfn HelloBox(ctx: \u0026CompCtx, _props: ()) -\u003e impl Element\u003cEvent = NoEvent\u003e {\n    let md = ctx.use_metadata::\u003cNoEvent, ()\u003e();\n    Column!(\n        Label::new(\"Hello world!\"),\n        Button::new(\"Say hello\").on_click(md, |_, _| {\n            println!(\"Hello world\");\n        })\n    )\n}\n\nfn main() -\u003e Result\u003c(), panoramix::PlatformError\u003e {\n    RootHandler::new(HelloBox).with_tracing(true).launch()\n}\n```\n\nSee [the documentation](https://docs.rs/panoramix/) for details, and the [Writing a new component](misc_docs/writing_a_component.md) tutorial.\n\n\n## Contributing\n\nIssues and PRs are welcome.\n\nPRs that add \"basic block\" widgets in particular will be appreciated.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the rules to follow when making a PR. Issues don't have a mandatory format, but if you submit one, please follow common-sense rules: be polite, be professional, have a plan to kill everyone you meet, and if you have a problem, please include detailed steps to reproduce.\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for a high-level presentation of the project code.\n\nTo ask questions and discuss development work, go to [Druid's Zulip chat](https://xi.zulipchat.com/), in the `#panoramix` channel.\n\n\n## Usage\n\nIn your `Cargo.toml`, add the following:\n\n```toml\npanoramix = \"0.1.0\"\n```\n\nIf you want the bleeding-edge version, add the following instead:\n\n```toml\npanoramix = { git = \"https://github.com/PoignardAzur/panoramix.git\" }\n```\n\n**Note for Linux users:** Panoramix is built on top of Druid, using the GTK backend, which requires a dev version of GTK3. See [GTK installation page](https://www.gtk.org/docs/installations/linux/#installing-gtk-from-packages) for install info.\n\nEg on Ubuntu-based distributions, you should run `sudo apt install libgtk-3-dev`.\n\n\n## Roadmap\n\nThe short term roadmap is:\n\n- Streamline styling options, especially for common low-effort use cases.\n- Implement two-way bindings.\n- Refactor event handling.\n- Finish doc.\n- Improve performance.\n- Write benchmarks.\n\nOn the longer timescale, there are two broad goals:\n\n- Achieve feature parity with React.\n- Use Panoramix to build a debugging framework, similar to chrome-devtools. TODO - Write blog posts about this.\n\nSee [ROADMAP.md](ROADMAP.md) for details.\n\n\n## Authors\n\nThis crate has been almost entirely written by Olivier FAURE. Any other contributor will be added to [AUTHORS.md](AUTHORS.md).\n\nThis project has been possible thanks to the extremely clean and approchable work of Raph Levien and Colin Rofls, as well as some mentoring on their part, and general interaction with the Druid community. In particular, Panoramix is inspired from [Crochet](https://github.com/raphlinus/crochet/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoignardazur%2Fpanoramix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpoignardazur%2Fpanoramix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoignardazur%2Fpanoramix/lists"}