{"id":13682664,"url":"https://github.com/ryanisaacg/quicksilver","last_synced_at":"2026-04-05T17:38:22.306Z","repository":{"id":50569777,"uuid":"105381565","full_name":"ryanisaacg/quicksilver","owner":"ryanisaacg","description":"A simple framework for 2D games on desktop and web","archived":false,"fork":false,"pushed_at":"2022-07-23T13:17:05.000Z","size":10886,"stargazers_count":781,"open_issues_count":14,"forks_count":77,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-11-10T03:43:05.520Z","etag":null,"topics":["game-engine","game-engine-2d","gamedev","pure-rust","rust","rust-library","wasm"],"latest_commit_sha":null,"homepage":"https://ryanisaacg.github.io/quicksilver","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryanisaacg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-30T15:59:53.000Z","updated_at":"2024-11-05T20:38:27.000Z","dependencies_parsed_at":"2022-08-23T00:41:17.442Z","dependency_job_id":null,"html_url":"https://github.com/ryanisaacg/quicksilver","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanisaacg%2Fquicksilver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanisaacg%2Fquicksilver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanisaacg%2Fquicksilver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanisaacg%2Fquicksilver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanisaacg","download_url":"https://codeload.github.com/ryanisaacg/quicksilver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224206151,"owners_count":17273399,"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":["game-engine","game-engine-2d","gamedev","pure-rust","rust","rust-library","wasm"],"created_at":"2024-08-02T13:01:50.872Z","updated_at":"2025-12-12T15:01:55.631Z","avatar_url":"https://github.com/ryanisaacg.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# quicksilver\n![Quicksilver Logo](./logo.svg)\n\n[![Crates.io](https://img.shields.io/crates/v/quicksilver.svg)](https://crates.io/crates/quicksilver)\n[![Docs Status](https://docs.rs/quicksilver/badge.svg)](https://docs.rs/quicksilver)\n[![dependency status](https://deps.rs/repo/github/ryanisaacg/quicksilver/status.svg)](https://deps.rs/repo/github/ryanisaacg/quicksilver)\n\nA simple 2D game framework written in pure Rust, for both the Web and Desktop\n\n## Maintenance Status\n\nI've [posted an update on my website](https://ryanisaacg.com/posts/quicksilver-goodbye) about Quicksilver.\nTo keep a long story short: **Quicksilver is no longer actively developed.**\nFor now I will continue to triage bugs and pull requests and (maybe) fix small bugs.\n\n\n## Alpha Notice\n\nThis version of Quicksilver is currently working its way through alpha! There is still work to do\non the API and on bugfixes, as well as waiting on an upstream library for audio support.\nPlease feel free to use this version and **provide feedback!** If you run into bugs or want to\ngive feedback on API decisions, please open an issue.\n\n## A quick example\n\nCreate a rust project and add this line to your `Cargo.toml` file under `[dependencies]`:\n```text\nquicksilver = \"0.4\"\n```\nThen replace `src/main.rs` with the following (the contents of quicksilver's\n`examples/01_square.rs`):\n\n```rust\n// Example 1: The Square\n// Open a window, and draw a colored square in it\nuse quicksilver::{\n    geom::{Rectangle, Vector},\n    graphics::Color,\n    run, Graphics, Input, Result, Settings, Window,\n};\n\nfn main() {\n    run(\n        Settings {\n            title: \"Square Example\",\n            ..Settings::default()\n        },\n        app,\n    );\n}\n\nasync fn app(window: Window, mut gfx: Graphics, mut input: Input) -\u003e Result\u003c()\u003e {\n    // Clear the screen to a blank, white color\n    gfx.clear(Color::WHITE);\n    // Paint a blue square with a red outline in the center of our screen\n    // It should have a top-left of (350, 100) and a size of (150, 100)\n    let rect = Rectangle::new(Vector::new(350.0, 100.0), Vector::new(100.0, 100.0));\n    gfx.fill_rect(\u0026rect, Color::BLUE);\n    gfx.stroke_rect(\u0026rect, Color::RED);\n    // Send the data to be drawn\n    gfx.present(\u0026window)?;\n    loop {\n        while let Some(_) = input.next_event().await {}\n    }\n}\n```\n\n## Learning Quicksilver\n\nA good way to get started with Quicksilver is to\n[read and run the examples](https://github.com/ryanisaacg/quicksilver/tree/master/examples)\nwhich also serve as tutorials. If you have any questions, feel free to open an issue or ask for\nhelp in the [Rust Community Discord](https://discord.gg/aVESxV8) from other\nQuicksilver users and developers.\n\n## Made with Quicksilver\n\n### Version 0.4\n\n- Libraries\n    - [Lenscas](https://github.com/lenscas): [Silver_Animation](https://crates.io/crates/silver_animation) - An animation system\n    - [Lenscas](https://github.com/lenscas): [Mergui](https://crates.io/crates/mergui) - A simple GUI system\n    - [johnpmayer](https://github.com/johnpmayer): [quicksilver-utils-async](https://crates.io/crates/quicksilver-utils-async) - Tasks, timers, and net code\n    - [johnpmayer](https://github.com/johnpmayer): [quicksilver-utils-ecs](https://crates.io/crates/quicksilver-utils-ecs) - Entity Component System integrations\n- Games\n    - [alec-deason](https://github.com/alec-deason): [Pixel Imperfect](https://ntoheuns.itch.io/pixel-imperfect)\n\n### Version 0.3\n\n- Documentation / Tutorials\n    - [tomassedovic](https://github.com/tomassedovic): [quicksilver-roguelike](https://github.com/tomassedovic/quicksilver-roguelike)\n- Games\n    - [WushuWorks](https://github.com/WushuWorks): [I am the Elder God](https://wushuworks.github.io/I-am-the-Elder-God/)\n    - [codec-abc](https://github.com/codec-abc): [RustyVolley](https://github.com/RustyVolley/RustyVolleySrc)\n    - [rickyhan](https://github.com/rickyhan): [Kingston Crabfight Simulator](https://github.com/rickyhan/crabs)\n    - [robotcaleb](https://github.com/robotcaleb): [Replay](https://robotcaleb.github.io/Replay/)\n    - [rsribeiro](https://github.com/rsribeiro/): [Evil Alligator](https://rsribeiro.github.io/website/)\n    - [nycex](https://gitlab.com/nycex): [Axosnake](https://gitlab.com/nycex/axosnake)\n    - [Leinnan](https://github.com/Leinnan): [Slavic Castles](https://github.com/Leinnan/slavic_castles)\n    - [Lenscas](https://github.com/lenscas): [Arena keeper](https://github.com/lenscas/arena_keeper_quick)\n- Libraries\n    - [Lenscas](https://github.com/lenscas): [Mergui](https://crates.io/crates/mergui) - A simple GUI system\n\nWant to add your project? Feel free to open an issue or PR!\n\n## Building and Deploying a Quicksilver application\n\nQuicksilver should always compile and run on the latest stable version of Rust, for both web and\ndesktop.\n\nMake sure to put all your assets in a top-level folder of your crate called `static/`. *All*\nQuicksilver file loading-APIs will expect paths that originate in the static folder, so\n`static/image.png` should be referenced as `image.png`.\n\n### Linux dependencies\n\nOn Windows and Mac, all you'll need to build Quicksilver is a recent stable version of `rustc`\nand `cargo`. A few of Quicksilver's dependencies require Linux packages to build, namely\n`libudev`, `zlib`, and `alsa`. To install these on Ubuntu or Debian, run the command\n`sudo apt install libudev-dev zlib1g-dev alsa libasound2-dev`.\n\n### Deploying for desktop\n\nIf you're deploying for desktop platforms, build in release mode (`cargo build --release`)\nand copy the executable file produced (found at \"target/release/\") and any assets you used\n(image files, etc.) and create an archive (on Windows a zip file, on Unix a tar file). You\nshould be able to distribute this archive with no problems; if there are any, please open an\nissue.\n\n### Deploying for the web\n\nIf you're deploying for the web, first make sure you've\n[installed the cargo web tool](https://github.com/koute/cargo-web). Then use `cargo web deploy`\nto build your application for distribution (located at `target/deploy`).\n\nIf you want to test your application locally, use `cargo web start --features quicksilver/stdweb` and open your\nfavorite browser to the port it provides.\n\n#### wasm-bindgen support\n\nQuicksilver has recently gained experimental support for `wasm-bindgen`, under the `web-sys`\nfeature. The workflow is not currently documented here, but it should be the same as using any other\nlibrary with `wasm-bindgen`.\n\n## Optional Features\n\nQuicksilver by default tries to provide all features a 2D application may need, but not all\napplications need these features.\n\nThe optional features available are:\n- easy logging (via [log](https://github.com/rust-lang/log),\n[simple_logger](https://github.com/borntyping/rust-simple_logger), and\n[web_logger](https://github.com/yewstack/web_logger))\n- gamepad event generation (via [gilrs](https://gitlab.com/gilrs-project/gilrs))\n- saving (via [gestalt](https://github.com/ryanisaacg/gestalt))\n- font rendering (via [elefont](https://github.com/ryanisaacg/elefont)) and TTF parsing (via [rusttype](https://gitlab.redox-os.org/redox-os/rusttype))\n\nEach are enabled by default, but you can\n[specify which features](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#choosing-features)\nyou actually want to use.\n\n## Supported Platforms\n\nThe engine is supported on Windows, macOS, Linux, and the web via WebAssembly.\n\nMobile support would be a future possibility, but likely only through external contributions.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanisaacg%2Fquicksilver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryanisaacg%2Fquicksilver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanisaacg%2Fquicksilver/lists"}