{"id":22957249,"url":"https://github.com/lunarwatcher/upm","last_synced_at":"2025-10-22T02:56:23.033Z","repository":{"id":46553173,"uuid":"402155978","full_name":"LunarWatcher/upm","owner":"LunarWatcher","description":"Package manager for people who need up-to-date packages","archived":false,"fork":false,"pushed_at":"2024-12-23T01:49:11.000Z","size":213,"stargazers_count":3,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-15T08:51:08.571Z","etag":null,"topics":["hacktoberfest","linux","macos","package-manager","package-manager-manager","package-updater","sdk-manager"],"latest_commit_sha":null,"homepage":"","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/LunarWatcher.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2021-09-01T17:59:37.000Z","updated_at":"2025-08-25T17:00:32.000Z","dependencies_parsed_at":"2023-02-16T01:30:30.108Z","dependency_job_id":"34ad0895-a108-480a-9db5-d26ad032090d","html_url":"https://github.com/LunarWatcher/upm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LunarWatcher/upm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LunarWatcher%2Fupm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LunarWatcher%2Fupm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LunarWatcher%2Fupm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LunarWatcher%2Fupm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LunarWatcher","download_url":"https://codeload.github.com/LunarWatcher/upm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LunarWatcher%2Fupm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280370896,"owners_count":26319317,"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","status":"online","status_checked_at":"2025-10-22T02:00:06.515Z","response_time":63,"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":["hacktoberfest","linux","macos","package-manager","package-manager-manager","package-updater","sdk-manager"],"created_at":"2024-12-14T17:15:48.997Z","updated_at":"2025-10-22T02:56:23.018Z","avatar_url":"https://github.com/LunarWatcher.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Upstream Package Manager (upm)\n\nPackage manager manager and SDK manager, because someone had to make the 15th standard.\n\n[![xkcd: standards][1]][1]\n\n## Requirements\n\nA C++17 compiler, and Linux or MacOS, and access to `tar` with a few specs (see the tar section). \n\nNote that MacOS will have weaker support, because I don't have access to any Mac machines. Please consider contributing to the project if you have access to a Mac and want to use upm.\n\nGeneral UNIXes beyond Linux and MacOS will have varying support, for the same reason MacOS doesn't have full support: I don't have those operating systems, and testing them is a slow and annoying process that I don't want to spend my time on.\n\n### Additional libraries (Linux)\n\n* `libssl-dev`\n\n\n### Tar\n\n* Supports `--strip-components`\n* Supports automatic tar type detection\n\n### Package dependencies\n\nCertain packages may have other dependencies. If such a dependency is required, and the build doesn't self-manage dependencies, it'll trigger an error if it isn't found. \n\n## How does it work?\n\nPackages are installed to `/opt/upm`. Packages are then activated via symlinks in `/usr/local/`, similar to how a normal manual installation would work. \n\nTo make a painfully long and already well-documented story short, installing third party packages in \"non-standard\" formats on Linux fucking sucks. \"Non-standard\" in this context really just means anything that doesn't fit the format of the system-wide package manager. And yes, this includes binary tars.\n\nupm has gone through several iterations of different package locations, only to return to the starting point: `/usr/local`.\n\nThere are a few reasons for this, and there are probably many more than the reasons I'm aware of. Let's assume we want a non-standard install directory. This affects:\n\n1. **Binary path**: new additions require amendments to the PATH variable. This isn't too bad, but there isn't an automated way to do this. For package managers, this is fine; you add one directory, and you're good to go. If you want to install individual packages though, it isn't as convenient.\n2. **Include and library path**: this does not apply to all packages (by a long shot), but any packages that come with a development component need a discoverable include and library path. This is now two more variables.\n3. **`.desktop` files**: not all packages are terminal tools. Some need desktop entries, or other metadata additions. In the case of desktop files in particular, there's two more categories:\n    1. Relative bin path: #1 has to be set beyond the shell, complicating installation\n    2. Absolute bin path: The desktop file has to be modified, either by the install process or the user to function, at least if the install location is unexpected.\n4. **man pages**: Many packages include man pages, and these also require a variable addition.\n\n## Installing upm\n\n### Using a utility script\n\nUpm provides an installer utlity that runs all the required compile commands automatically. Also note that the script does **not** handle dependency install. You need to manually get the dependencies before running.\n\n**Note:** it's always recommended to read through scripts before running them.\n\n```bash\nsh -c \"$(wget -O- https://raw.githubusercontent.com/LunarWatcher/upm/master/tools/install.sh)\"\n```\n\n### Manually\n\n```bash\n# Clone the repo\ngit clone https://github.com/LunarWatcher/upm\n# cd and and build the bootstrap\ncd upm\nmkdir build\ncd build\ncmake .. -DCMAKE_BUILD_TYPE=Release \nmake -j $(nproc)\n# Have the upm bootstrap install itself\nsudo ./bin/upm install upm@nightly --install_self=true\n```\n\nAfter this, you can delete the cloned repo. When upm later updates itself, the repo will be automatically re-cloned under /tmp for building.\n\n### Updating upm\n\nWhen upm has been installed, upm can update itself. Simply run `sudo upm upgrade upm@nightly` (or another tag if you prefer), and it'll fetch itself.\n\n[1]: https://imgs.xkcd.com/comics/standards.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flunarwatcher%2Fupm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flunarwatcher%2Fupm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flunarwatcher%2Fupm/lists"}