{"id":13478579,"url":"https://github.com/parasyte/pixels","last_synced_at":"2025-05-13T16:07:12.348Z","repository":{"id":37694173,"uuid":"210976235","full_name":"parasyte/pixels","owner":"parasyte","description":"A tiny hardware-accelerated pixel frame buffer. 🦀","archived":false,"fork":false,"pushed_at":"2025-04-12T06:59:45.000Z","size":4234,"stargazers_count":1912,"open_issues_count":36,"forks_count":126,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-04-23T21:51:50.685Z","etag":null,"topics":["emulators","game-development","gpu","pixel-perfect","rust"],"latest_commit_sha":null,"homepage":"https://docs.rs/pixels","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/parasyte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["parasyte"],"patreon":"blipjoy"}},"created_at":"2019-09-26T01:50:51.000Z","updated_at":"2025-04-23T12:01:05.000Z","dependencies_parsed_at":"2023-02-08T13:31:48.294Z","dependency_job_id":"633b7f48-0d9a-40df-be8e-9e236d58c971","html_url":"https://github.com/parasyte/pixels","commit_stats":{"total_commits":250,"total_committers":17,"mean_commits":"14.705882352941176","dds":"0.18400000000000005","last_synced_commit":"cbda7df53b54be03b9b40bacbf46bc6b2dbaa13a"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parasyte%2Fpixels","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parasyte%2Fpixels/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parasyte%2Fpixels/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parasyte%2Fpixels/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parasyte","download_url":"https://codeload.github.com/parasyte/pixels/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253979991,"owners_count":21994041,"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":["emulators","game-development","gpu","pixel-perfect","rust"],"created_at":"2024-07-31T16:01:58.956Z","updated_at":"2025-05-13T16:07:12.296Z","avatar_url":"https://github.com/parasyte.png","language":"Rust","funding_links":["https://github.com/sponsors/parasyte","https://patreon.com/blipjoy"],"categories":["Rust"],"sub_categories":[],"readme":"[![Crates.io](https://img.shields.io/crates/v/pixels)](https://crates.io/crates/pixels \"Crates.io version\")\n[![Documentation](https://img.shields.io/docsrs/pixels)](https://docs.rs/pixels \"Documentation\")\n[![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/)\n[![GitHub actions](https://img.shields.io/github/actions/workflow/status/parasyte/pixels/ci.yml?branch=main)](https://github.com/parasyte/pixels/actions \"CI\")\n[![GitHub activity](https://img.shields.io/github/last-commit/parasyte/pixels)](https://github.com/parasyte/pixels/commits \"Commit activity\")\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/parasyte)](https://github.com/sponsors/parasyte \"Sponsors\")\n\n![Pixels Logo](img/pixels.png)\n\nA tiny hardware-accelerated pixel frame buffer. 🦀\n\n## But why?\n\nRapidly prototype a simple 2D game, pixel-based animations, software renderers, or an emulator for your favorite platform. Then add shaders to simulate a CRT or just to spice it up with some nice VFX.\n\n`pixels` is more than just a library to push pixels to a screen, but less than a full framework. You're in charge of managing a window environment, event loop, and input handling.\n\n## MSRV Policy\n\nThe Minimum Supported Rust Version for `pixels` will always be made available in the [MSRV.md](./MSRV.md) file on GitHub.\n\n## Features\n\n- Built on modern graphics APIs powered by [`wgpu`](https://crates.io/crates/wgpu): Vulkan, Metal, DirectX 12, OpenGL ES3.\n    - DirectX 11, WebGL2, and WebGPU support are a work in progress.\n- Use your own custom shaders for special effects.\n- Hardware accelerated scaling on perfect pixel boundaries.\n- Supports non-square pixel aspect ratios. (WIP)\n\n## Examples\n\n### Games 🎮\n\n- [Conway's Game of Life](./examples/conway)\n- [Pixel Invaders](./examples/invaders)\n\n### Demos 🧪\n\n- [Custom Shader](./examples/custom-shader)\n- [Dear ImGui example with `winit`](./examples/imgui-winit)\n- [Egui example with `winit`](./examples/minimal-egui)\n- [Minimal example for WebGL2](./examples/minimal-web)\n- [Minimal example with `winit`](./examples/minimal-winit)\n- [Minimal example with `tao`](./examples/minimal-tao)\n- [Minimal example with `fltk`](./examples/minimal-fltk)\n- [`raqote` example](./examples/raqote-winit)\n- [`tiny-skia` example](./examples/tiny-skia-winit)\n\n## Troubleshooting\n\n### Driver issues\n\nThe most common issue is having an outdated graphics driver installed on the host machine. `pixels`\nrequests a low power (aka integrated) GPU by default. If the examples are not working for any reason, you may try setting the `WGPU_POWER_PREF=high` environment variable to see if that addresses the issue on your host machine.\n\nYou should also try to keep your graphics drivers up-to-date, especially if you have an old Intel integrated GPU. Keep in mind that some drivers and GPUs are EOL and will not be supported.\n\n### Logging\n\nYou may want to use the `RUST_LOG` environment variable (see [`env_logger`](https://docs.rs/env_logger) for full documentation) to gain additional insight while troubleshooting the examples. `RUST_LOG=trace` will spew all logs to `stderr` on debug builds:\n\n```\n$ RUST_LOG=trace cargo run --package minimal-winit\n```\n\nAnd also on release builds when default features are disabled:\n\n```\n$ RUST_LOG=trace cargo run --package minimal-winit --release --no-default-features\n```\n\n## Comparison with `minifb`\n\nThe [`minifb`](https://crates.io/crates/minifb) crate shares some similarities with `pixels`; it also allows rapid prototyping of 2D games and emulators. But it requires the use of its own window/GUI management, event loop, and input handling. One of the disadvantages with the `minifb` approach is the lack of hardware acceleration (except on macOS, which uses Metal but is not configurable). An advantage is that it relies on fewer dependencies.\n\n## Comparison with `softbuffer`\n\nThere is a more recent project called [`softbuffer`](https://github.com/john01dav/softbuffer). It provides similar capabilities to what `pixels` offers, but is intentionally limited to software-only (not hardware-accelerated) rasterization.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparasyte%2Fpixels","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparasyte%2Fpixels","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparasyte%2Fpixels/lists"}