{"id":28136951,"url":"https://github.com/janrupf/snowland","last_synced_at":"2026-07-06T15:31:10.406Z","repository":{"id":73271686,"uuid":"431285721","full_name":"Janrupf/snowland","owner":"Janrupf","description":"Custom desktop background renderer","archived":false,"fork":false,"pushed_at":"2022-07-05T00:25:06.000Z","size":1329,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-30T07:41:59.435Z","etag":null,"topics":["desktop","skia","wallpaper"],"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/Janrupf.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,"zenodo":null}},"created_at":"2021-11-23T23:31:55.000Z","updated_at":"2023-02-12T20:24:46.000Z","dependencies_parsed_at":"2023-03-07T16:15:57.527Z","dependency_job_id":null,"html_url":"https://github.com/Janrupf/snowland","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Janrupf/snowland","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Janrupf%2Fsnowland","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Janrupf%2Fsnowland/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Janrupf%2Fsnowland/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Janrupf%2Fsnowland/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Janrupf","download_url":"https://codeload.github.com/Janrupf/snowland/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Janrupf%2Fsnowland/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35197534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["desktop","skia","wallpaper"],"created_at":"2025-05-14T16:20:39.124Z","updated_at":"2026-07-06T15:31:10.395Z","avatar_url":"https://github.com/Janrupf.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Snowland Desktop Renderer\n\nSnowland is a custom desktop background renderer, similar to Wallpaper Engine - but way\nmore primitive. The project developed as a fun idea and interest in drawing on the \nWindows wallpaper without overriding the icons. At the moment Snowland implements a very\nbasic rendering module system and a GUI written using \n[ImGui-rs](https://github.com/imgui-rs/imgui-rs).\n\nSee the chapters below for instructions on building and usage.\n\n## Supported platforms\n\n- Windows\n- Linux\n\n## Building Snowland\nSnowland is written in Rust and thus requires the Rust toolchain in order to build. It is\nrecommended to use [Rustup](https://rustup.rs/) for managing the Rust toolchain. The \nrequired toolchain version can be found in the [rust-toolchain](./rust-toolchain) file,\ncargo should automatically download the correct toolchain though when first running it\ninside the project.\n\nAfter Rust has been installed building and running Snowland is straight forward and not\ndifferent from any other Rust program:\n\n```powershell\ncargo build # Create a debug build in target/debug\ncargo run   # Build and run snowland\n```\n\nTo create a release build do the following:\n````powershell\ncargo build --release\n````\n\nThe resulting binary can be found in `target/release`, look for a file called \n`snowland-system-host`, where `system` is the name of the operating system you are on.\n\n## Project structure\n\nThe Snowland project structure is split into multiple parts:\n- [universal](./universal) - The snowland core implementation, OS independent\n- [win-host](./win-host) - Windows specific implementation, responsible for bootstrapping\n  on Windows\n\nThe `*-host` modules contain the main function and are executables, whereas the \n`universal` module is a library which then is linked into the `*-host` modules.\n\n## Inner Workings\n\n### universal\n\nThe `universal` library provides the core drawing routines and hosts the user interface\nas well as configuration management. It uses [Skia](https://skia.org/) with the help of\n[skia-safe](https://github.com/rust-skia/rust-skia) to perform the actual drawing without\nknowing about the rendering library.\n\n### win-host\n\nThe `win-host` executable provides the entry point and shell integration on Windows. The\nshell integration consists of a simple system tray icon and the code responsible for \nacquiring a drawing context on the desktop background.\n\nThe Windows shell (specifically `explorer.exe`) provides an undocumented window message \nfor separating the desktop icons and desktop background into separate windows. Snowland\nuses this message to first perform this split and then acquires a window handle to the\nfreshly created background window. With the help of WGL (the Windows OpenGL\nimplementation) an OpenGL context is created and then passed to a new Skia context. From\nhere on the `universal` library takes over the Skia context and performs the common \ndrawing routines.\n\nSee [here](https://www.codeproject.com/Articles/856020/Draw-Behind-Desktop-Icons-in-Windows-plus)\n([WebArchive version](https://web.archive.org/web/20211001000000*/https://www.codeproject.com/Articles/856020/Draw-Behind-Desktop-Icons-in-Windows-plus))\nfor more details on drawing behind the desktop icons.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanrupf%2Fsnowland","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjanrupf%2Fsnowland","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanrupf%2Fsnowland/lists"}