{"id":25231380,"url":"https://github.com/nucleus-labs/peacock","last_synced_at":"2026-02-11T07:33:07.920Z","repository":{"id":259559701,"uuid":"867602570","full_name":"nucleus-labs/peacock","owner":"nucleus-labs","description":"A cross-platform GUI framework that focuses on accessibility, modularity, and maintainability","archived":false,"fork":false,"pushed_at":"2025-02-09T21:33:06.000Z","size":393,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-23T09:19:53.325Z","etag":null,"topics":["accessibility","cross-platform","css","framework","gui-framework","iced","modular-design","rust","templating","ui-development","xml"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nucleus-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-10-04T11:26:13.000Z","updated_at":"2025-02-09T21:31:57.000Z","dependencies_parsed_at":"2024-10-26T14:26:20.288Z","dependency_job_id":"9b4b5083-6167-44bc-ac59-471f5ea94844","html_url":"https://github.com/nucleus-labs/peacock","commit_stats":null,"previous_names":["nucleus-labs/peacock"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nucleus-labs/peacock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nucleus-labs%2Fpeacock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nucleus-labs%2Fpeacock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nucleus-labs%2Fpeacock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nucleus-labs%2Fpeacock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nucleus-labs","download_url":"https://codeload.github.com/nucleus-labs/peacock/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nucleus-labs%2Fpeacock/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29329493,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T06:13:03.264Z","status":"ssl_error","status_checked_at":"2026-02-11T06:12:55.843Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["accessibility","cross-platform","css","framework","gui-framework","iced","modular-design","rust","templating","ui-development","xml"],"created_at":"2025-02-11T12:28:32.495Z","updated_at":"2026-02-11T07:33:07.889Z","avatar_url":"https://github.com/nucleus-labs.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Peacock\n\u003c!-- TODO: Add a banner image, icons for build results, status on crates.io, etc --\u003e\n\n## Overview\n\nPeacock is a framework that's purpose-built to be as easy to pick up as possible for web and non-web\ndevelopers alike. It uses XML, CSS, and Rust to mirror the workflow of web development with XML and Rust\nas stand-ins for HTML and JavaScript (respectively). Peacock is ideal for projects requiring a clear\nseparation between design and development.\n\n## Status\n\nPeacock is currently **far** from being ready for production applications. However, when Peacock *is* ready,\nit will be an incredibly robust framework.\n\n## Philosophy\n\nThe philosophy of Peacock is that of __accessibility__, __simplicity__, and __modularity__. Through\nthese, Peacock strives to be a framework deserving of its use in applications. It does this by enabling\nintuitive design and efficient development by providing clear structures, reducing overhead, and\navoiding unnecessary complexity.\n\n## Core Libraries\n\n- Pinion (Templating Engine and XML Parsing) (Structure)\n    - The core of Peacock is built around XML trees, where UI layouts are defined in a manner resembling\n      HTML. It supports an in-memory XML tree structure through a core library, Pinion.\n- Crest (CSS Parsing and Application) (Style)\n    - Peacock integrates a CSS parser using a core library, Crest, that allows for applying styles\n      directly to XML elements, similar to how CSS works in web development.\n\n## Additional Features\n\n- Templating Support\n    - Instead of parsing XML directly, you can register it with a jinja2 template registry. Whenever\n      you're ready to render it to XML, you just pass it the context and let peacock do the rest!\n- Rust Integration\n    - Although Peacock abstracts the UI layer through XML and CSS, it leverages Rust for interactivity\n      and functionality so that engineers can maintain full control over performance-critical\n      aspects of the application.\n\n## Roadmap\n\n- [ ] Peacock:  Documentation\n- [ ] Peacock:  Inline style application using the Style attribute of DOM elements\n- [ ] Crest:    DomElement trait that can be used to apply stylesheets and style rules and compare them\n                against selectors\n- [ ] Peacock:  Implement Crest's DomElement trait for each widget type\n- [ ] Peacock:  Shared stylesheet application\n- [ ] Peacock:  Signals for intelligently and efficiently updating widgets at runtime\n\n## Quickstart\n\n### Installation\n\nGetting started with peacock is fairly straightforward! Peacock isn't published to crates.io since it's\nnot out of pre-alpha, so you can't just run a Cargo command (yet) (unfortunately).\n\n`Cargo.toml`\n```toml\n[dependencies]\npeacock = { git = \"https://github.com/nucleus-labs/peacock\", rev = \"\u003crev\u003e\" }\nminijinja = \"2.5.0\"\n```\n\n### Usage\n\n`main.rs`\n```rust\nuse peacock::ApplicationContext;\nuse minijinja::context;\n\nfn main() -\u003e peacock::Result {\n    // () represents a stateless application, which is fine if you only have a static\n    // application, or if relevant state is self-managed, such as by custom widgets.\n    let mut app: ApplicationContext\u003c()\u003e = ApplicationContext::new(\"Basic Peacock App\");\n\n    // automatically search for xml files with the pattern 'static/xml/**/*.xml', then\n    // add them to the template registry. 'home.xml' is added using the index 'home'\n    app.read_xml_templates_auto()?;\n\n    // pull the 'index' template and render it to XML, then parse the XML into widgets\n    // in the widget registry using the 'index' key for the root element.\n    app.render_template_to_registry(\"index\".into(), \"index\".into(), context!{})?;\n\n    app.run()\n}\n```\n\n`index.xml`\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cButton\u003eWelcome to the basic Peacock example!\u003c/Button\u003e\n```\n\nFor more references, please check out the examples. They are written explicitly as a reference on\nhow to use peacock and are written with the intention of being as easy to follow as possible!\n\n## Examples Guide\n\n- Basic\n  - creation of a managed application context\n  - auto-discovery of xml files\n  \u003c!-- todo: auto-discovery of css files --\u003e\n  - rendering a template into the application context\n  - running the application\n- Dynamic Behaviour\n  - creation of a managed application context\n  - auto-discovery of xml files\n  \u003c!-- todo: auto-discovery of css files --\u003e\n  - rendering a template into the application context\n  - subscribing to widget events\n  - replacing content in response to widget events\n  - running the application\n- Dynamic Structure\n  - creation of a managed application context\n  - auto-discovery of xml files\n  \u003c!-- todo: auto-discovery of css files --\u003e\n  - rendering a template into the application context\n  - procedurally rendering templates into xml component groups\n    - eg. a card component for each member of a vector\n  - running the application\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnucleus-labs%2Fpeacock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnucleus-labs%2Fpeacock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnucleus-labs%2Fpeacock/lists"}