{"id":45041016,"url":"https://github.com/steamclienthomebrew/millennium","last_synced_at":"2026-05-23T04:04:45.487Z","repository":{"id":159379209,"uuid":"634620807","full_name":"SteamClientHomebrew/Millennium","owner":"SteamClientHomebrew","description":"An open-source low-code modding framework to create, manage and use themes/plugins for the desktop Steam Client without any low-level internal interaction or overhead.","archived":false,"fork":false,"pushed_at":"2026-03-31T17:44:38.000Z","size":107800,"stargazers_count":3254,"open_issues_count":22,"forks_count":117,"subscribers_count":24,"default_branch":"main","last_synced_at":"2026-04-03T01:12:23.280Z","etag":null,"topics":["millennium","patcher","plugins-api","reverse-engineering","skins","steam","themes","valve"],"latest_commit_sha":null,"homepage":"https://steambrew.app","language":"C++","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/SteamClientHomebrew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["SteamClientHomebrew"],"ko_fi":"shadowmonster"}},"created_at":"2023-04-30T18:06:18.000Z","updated_at":"2026-04-02T20:14:00.000Z","dependencies_parsed_at":"2023-12-05T00:23:16.158Z","dependency_job_id":"5ea3130e-8d4d-4922-9982-76106acbfc77","html_url":"https://github.com/SteamClientHomebrew/Millennium","commit_stats":null,"previous_names":["shadowmonster99/millennium-steam-patcher","shdwmtr/millennium","steamclienthomebrew/millennium"],"tags_count":152,"template":false,"template_full_name":null,"purl":"pkg:github/SteamClientHomebrew/Millennium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteamClientHomebrew%2FMillennium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteamClientHomebrew%2FMillennium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteamClientHomebrew%2FMillennium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteamClientHomebrew%2FMillennium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SteamClientHomebrew","download_url":"https://codeload.github.com/SteamClientHomebrew/Millennium/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SteamClientHomebrew%2FMillennium/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31499193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["millennium","patcher","plugins-api","reverse-engineering","skins","steam","themes","valve"],"created_at":"2026-02-19T07:26:18.332Z","updated_at":"2026-05-23T04:04:45.480Z","avatar_url":"https://github.com/SteamClientHomebrew.png","language":"C++","funding_links":["https://github.com/sponsors/SteamClientHomebrew","https://ko-fi.com/shadowmonster"],"categories":[],"sub_categories":[],"readme":"\u003cimg alt=\"image\" src=\"https://github.com/user-attachments/assets/2c662772-bca1-4de4-988f-5304d7dfd87d\" /\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003cbr/\u003e\n  \u003ca href=\"https://steambrew.app/discord\"\u003e\n      \u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/discord-green?labelColor=404040\u0026color=353535\u0026style=for-the-badge\u0026logo=discord\u0026logoColor=white\" href=\"#\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://steambrew.app\"\u003e\n      \u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/website-green?labelColor=404040\u0026color=353535\u0026style=for-the-badge\u0026logo=firefoxbrowser\u0026logoColor=white\" href=\"#\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://docs.steambrew.app\"\u003e\n      \u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/documentation-green?labelColor=404040\u0026color=353535\u0026style=for-the-badge\u0026logo=readthedocs\u0026logoColor=white\" href=\"#\"\u003e\n  \u003c/a\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003c/div\u003e\n\nMillennium is an **open-source low-code modding framework** to create, manage and use themes/plugins\u003cbr/\u003e for the desktop Steam Client without any low-level internal interaction or overhead.\n\nIf you enjoy this tool, please consider starring the project ⭐\n\n## Installation\n\nInstalling Millennium is only a few steps. See [this page](https://docs.steambrew.app/users/installing) for a more detailed guide.\n\n## Features\n### Plugins\n\n-   **TypeScript ([React](https://react.dev/)) frontend** container in Steam\n-   **Lua backend** container in [usermode](https://en.wikipedia.org/wiki/User-Mode_Driver_Framework)\n-   **[Foreign function interface](https://en.wikipedia.org/wiki/Foreign_function_interface)** binding from **Lua** to **TypeScript** and vice versa\n-   **Hook modules in the Steam web browser**\n  -   Overwrite/Modify HTTP requests\n  -   Load custom JavaScript (Native) into web browser\n  -   Load custom StyleSheets into web browser\n    \n### Themes\n-   Manage and load custom themes written in JavaScript and CSS.\n-   Inject JavaScript modules and CSS modules into specific Steam windows,\n-   Provide customizable color, style, and javascript options for your theme,\n    letting users personalize their experience without touching any code\n\n## Official Plugin Repository\n\nMillennium is designed to be fully extensible through plugins.\nTo ensure version compatibility and safety, we maintain a separate, curated [PluginDatabase](https://github.com/SteamClientHomebrew/PluginDatabase) repository.\n\nAll plugins in the PluginDatabase are versioned and reviewed to work seamlessly with the current Millennium release, reducing the risk of conflicts or instability when adding new features.\n\n**For more related information, checkout the [plugin database](https://github.com/SteamClientHomebrew/PluginDatabase)**.\n\n## Adding Languages\n\nOnly languages officially supported by the Steam can be added to the Millennium. Check the list [here](https://partner.steamgames.com/doc/store/localization/languages) in the `Full Platform Supported Languages` section.\n\nTo add your spoken language to Millennium, fork this repository and place your language json (based on the [english locale](./src/locales/english.json)) among the [current locales](./src/locales). Name the file `{your_language}.json` where `your_language` is the `API language code` from the [supported language list](https://partner.steamgames.com/doc/store/localization/languages) and append the target file to the `localizationFiles` in [this file](./src/typescript/frontend/utils/localization-manager.ts).\n\nMillennium is only maintaining the english language, and if any changes are made to the english locales that don't reflect on a target language, contributors are responsible for updating them.\n\n## Creating Plugins \u0026 Themes\n\nCreating themes and plugins for Millennium is relatively straight foward. Our [documentation](https://docs.steambrew.app/developers) goes over the basics of both,\nand we have examples for both [plugins](https://github.com/SteamClientHomebrew/PluginTemplate) and [themes](https://github.com/SteamClientHomebrew/ThemeTemplate)\n\n## Platform Support\n\nSupported Platforms:\n\n-   Windows (x86/x64/ARM) NT (10 and newer)\n-   Linux (x86/x86_64/i686/i386)\n-   macOS (experimental wrapper app install via `./scripts/install_macos.sh`, legacy tier0 via `--tier0-legacy`, development launch via `./scripts/launch_macos.sh`)\n\n## Building from Source\n\n### Linux\n\n#### Prerequisites\n\n**Arch Linux** (other distros need equivalent packages):\n\n```\ncmake ninja bun\nlib32-gcc-libs lib32-openssl lib32-libidn2 lib32-xz lib32-zstd lib32-brotli lib32-libnghttp2 lib32-libpsl\nlibx11 libxtst\n```\n\n#### Build\n\n```bash\ncmake --preset linux-debug\ncmake --build build\n```\n\nFor a release build, use `linux-release` instead.\n\n#### Dev Environment Setup\n\nAfter building, run the setup script to symlink the build outputs into Steam's runtime directories:\n\n```bash\n./scripts/linux/setup_devenv.sh\n```\n\nThis only needs to be run **once** — the symlinks point into the build tree, so rebuilding automatically picks up changes without re-running the script. Just restart Steam after rebuilding.\n\nTo remove the symlinks and restore Steam to its stock state:\n\n```bash\n./scripts/linux/destroy_devenv.sh\n```\n\n### Windows\n\n#### Prerequisites\n\n- [Visual Studio Build Tools](https://aka.ms/vs/17/release/vs_buildtools.exe) (with the \"Desktop development with C++\" workload — includes CMake and Ninja, add them to PATH)\n- [Bun](https://bun.sh/)\n\n#### Build\n\nOpen a **Developer PowerShell for VS**, then:\n\n```powershell\ncmake --preset windows-debug\ncmake --build build\n```\n\nFor a release build, use `windows-release` instead.\n\nOn Windows, CMake automatically detects your Steam installation from the registry and outputs binaries directly into Steam's directory. No additional setup is needed — just restart Steam after building.\n\n## Sponsors\n\n| \u003cimg width=\"25\" height=\"25\" alt=\"image\" src=\"https://github.com/user-attachments/assets/45ad9409-f9dd-4ff4-9737-03386f01a9b2\" /\u003e | Free code signing on Windows provided by [SignPath.io](https://signpath.io/), certificate by [SignPath Foundation](https://signpath.org/) |\n| :--- | :--- |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteamclienthomebrew%2Fmillennium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteamclienthomebrew%2Fmillennium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteamclienthomebrew%2Fmillennium/lists"}