{"id":22430699,"url":"https://github.com/drewcrawford/metalr","last_synced_at":"2026-02-27T05:39:56.491Z","repository":{"id":43883676,"uuid":"425360919","full_name":"drewcrawford/metalr","owner":"drewcrawford","description":"Drew's very fast metal bindings","archived":false,"fork":false,"pushed_at":"2024-10-23T20:59:29.000Z","size":138,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-09T00:35:34.773Z","etag":null,"topics":["macos","metal","rust"],"latest_commit_sha":null,"homepage":"","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/drewcrawford.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-11-06T22:21:16.000Z","updated_at":"2025-11-04T07:50:31.000Z","dependencies_parsed_at":"2025-10-26T21:15:16.628Z","dependency_job_id":"944da409-9a6a-449b-a0f4-77821a99e429","html_url":"https://github.com/drewcrawford/metalr","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/drewcrawford/metalr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewcrawford%2Fmetalr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewcrawford%2Fmetalr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewcrawford%2Fmetalr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewcrawford%2Fmetalr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drewcrawford","download_url":"https://codeload.github.com/drewcrawford/metalr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drewcrawford%2Fmetalr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29886115,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T05:38:26.446Z","status":"ssl_error","status_checked_at":"2026-02-27T05:38:25.235Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["macos","metal","rust"],"created_at":"2024-12-05T21:09:11.209Z","updated_at":"2026-02-27T05:39:56.464Z","avatar_url":"https://github.com/drewcrawford.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Drew's fast Rust Metal bindings\n\nProvides select Rust bindings for Apple [Metal](https://developer.apple.com/metal/) framework.  May be compared to alternative crates [metal](https://crates.io/crates/metal), [objrs_frameworks_metal](https://crates.io/crates/objrs_frameworks_metal),\n[metal-rs](https://crates.io/crates/metal-rs), and [metal-sys](https://crates.io/crates/metal-sys).\n\nPart of the [objr expanded universe](https://github.com/drewcrawford/objr#objr-expanded-universe), distinctive features of this library:\n\n* Fast.  This crate is *significantly* faster than other crates.  If you're struggling to get 60fps or ProMotion/adaptive refresh rate speeds, this\n  is the solution for you.\n    * The full set of optimization is far too many to list, but the big idea is to either do what native ObjC/Swift applications do, or do something faster.\n    * Compile-time selectors.  Most Rust crates do a runtime lookup for ObjC methods, which involves acquiring a lock and other yucky stuff, either on the first call or every call.  Instead, we do what real ObjC compilers do, which is way faster.  For more details, see [objr](https://github.com/drewcrawford/objr)\n    * Smart pointers that provide global ARC inference.  Like ARC, you don't need to write manual retain/release calls.  Unlike ARC, the compiler\n      usually doesn't need to write them either, meaning lower runtime memory management cost than even native code.  For more details, see [objr](https://github.com/drewcrawford/objr).\n    * Runtime autorelease eliding, which keeps your objects out of autoreleasepools.  For more details, see [objr](https://github.com/drewcrawford/objr).\n    * Pointer packing for optional types so they fit in a `u64`.  For more details, see [objr](https://github.com/drewcrawford/objr)\n    * Stack-allocated blocks.  For more details, see [blocksr](https://github.com/drewcrawford/blocksr)\n* Safe APIs.  Where possible APIs are designed with safe abstractions to provide familiar guarantees to Rust developers\n* Async bindings out of the box for shader compilation and similar tasks\n* Low-level.  These bindings assume familiarity with bound APIs and are not documented separately.  For details on how they work, see the native documentation.\n* Free for noncommercial or \"small commercial\" use.\n\n# Implementation status\nGenerally it's implemented enough that you can write basic high-performance rendering applications.\n\nThe following APIs are at least partially implemented.  These implementations are incomplete but contain common functions or \"the ones I use\".\n\nThe [objr](https://github.com/drewcrawford/objr) macro system makes it very ergonomic to add new bindings for specific missing features\nor new Metal APIs.\n\n## Objects, etc.\n* MTLDevice\n* MTLCommandBuffer\n* MTLCommandQueue\n* MTLBuffer\n\n## Render passes\n* MTLRenderPassAttachmentDescriptor\n* MTLRenderPassColorAttachmentDescriptor\n* MTLRenderPassColorAttachmentDescriptorArray\n* MTLRenderPassDepthAttachmentDescriptor\n* MTLRenderPassDescriptor\n\n## Render pipelines\n* MTLRenderPipelineDescriptor\n* MTLRenderPipelineState\n* MTLRenderPipelineColorAttachmentDescriptor\n* MTLRenderPipelineColorAttachmentDescriptorArray\n\n## Encoders\n* MTLBlitCommandEncoder\n* MTLRenderCommandEncoder\n\n## Textures\n* MTLTexture\n* MTLTextureDescriptor\n\n## Depth/stencil\n* MTLDepthStencilDescriptor (primarily depth APIs)\n* MTLDepthStencilState\n\n## Types\n* MTLPixelFormat\n* MTLPrimitiveType\n* MTLOrigin\n* MTLSize\n\n## Protocols\n* MTLDrawable\n\n## Planned\n\nNot yet implemented:\n* Compute\n* iOS\n\n## Out of scope\n\n* Compiling shaders at build-time. You can compile at runtime with [this API](https://developer.apple.com/documentation/metal/mtldevice/1433431-makelibrary) (see tests), or write a `build.rs` script to build your shaders.\n  Stay tuned for future crates!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrewcrawford%2Fmetalr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrewcrawford%2Fmetalr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrewcrawford%2Fmetalr/lists"}