{"id":15117432,"url":"https://github.com/openmultiplayer/web","last_synced_at":"2026-01-17T04:16:37.683Z","repository":{"id":37046831,"uuid":"303166166","full_name":"openmultiplayer/web","owner":"openmultiplayer","description":"The open.mp web services monorepo. Homepage, documentation, server index, and more! All in one place.","archived":false,"fork":false,"pushed_at":"2025-12-29T00:43:15.000Z","size":288869,"stargazers_count":135,"open_issues_count":12,"forks_count":443,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-12-31T17:09:18.462Z","etag":null,"topics":["auto","grand","hacktoberfest","multiplayer","omp","open-mp","openmp","openmultiplayer","sa-mp","samp","san-andreas","sanandreas","server","tehft"],"latest_commit_sha":null,"homepage":"https://open.mp/","language":"TypeScript","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/openmultiplayer.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":"CODEOWNERS","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":"2020-10-11T16:40:24.000Z","updated_at":"2025-12-28T23:20:52.000Z","dependencies_parsed_at":"2024-05-30T02:03:05.795Z","dependency_job_id":"59bcbe05-45e5-46c3-bffc-95da294bb230","html_url":"https://github.com/openmultiplayer/web","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/openmultiplayer/web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmultiplayer%2Fweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmultiplayer%2Fweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmultiplayer%2Fweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmultiplayer%2Fweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openmultiplayer","download_url":"https://codeload.github.com/openmultiplayer/web/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openmultiplayer%2Fweb/sbom","scorecard":{"id":709823,"data":{"date":"2025-08-11","repo":{"name":"github.com/openmultiplayer/web","commit":"d0eda3c18b220131125afcc56b48003c2827008e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Code-Review","score":5,"reason":"Found 9/16 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/labeler.yml:8","Warn: no topLevel permission defined: .github/workflows/deploy-api.yml:1","Warn: no topLevel permission defined: .github/workflows/deploy-web.yml:1","Warn: no topLevel permission defined: .github/workflows/labeler.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-api.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-api.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-api.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-api.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-api.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-api.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-web.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-web.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-web.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-web.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy-web.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-web.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-web.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-web.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy-web.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/deploy-web.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/labeler.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/labeler.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/openmultiplayer/web/test.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating golang:latest to golang:latest@sha256:9e56f0d0f043a68bb8c47c819e47dc29f6e8f5129b8885bed9d43f058f7f3ed6","Warn: containerImage not pinned by hash: Dockerfile.frontend:1","Warn: containerImage not pinned by hash: Dockerfile.frontend:7","Warn: containerImage not pinned by hash: Dockerfile.frontend:16","Warn: downloadThenRun not pinned by hash: Dockerfile:10-14","Warn: npmCommand not pinned by hash: Dockerfile:20","Warn: npmCommand not pinned by hash: Dockerfile.frontend:5","Warn: npmCommand not pinned by hash: .github/workflows/deploy-web.yml:33","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   4 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   1 out of   4 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"16 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-cpj6-fhp6-mr6j","Warn: Project is vulnerable to: GHSA-f46r-rw29-r322","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GO-2022-0470 / GHSA-9w9f-6mg8-jp7w","Warn: Project is vulnerable to: GO-2025-3770","Warn: Project is vulnerable to: GO-2023-2074 / GHSA-m9xq-6h2j-65r2","Warn: Project is vulnerable to: GO-2024-3205 / GHSA-xhr3-wf7j-h255","Warn: Project is vulnerable to: GO-2024-2958 / GHSA-3669-72x9-r9p3","Warn: Project is vulnerable to: GO-2022-0322 / GHSA-cg3q-j54f-5p7p","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T07:47:37.510Z","repository_id":37046831,"created_at":"2025-08-22T07:47:37.510Z","updated_at":"2025-08-22T07:47:37.510Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28494633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T02:39:23.645Z","status":"ssl_error","status_checked_at":"2026-01-17T02:34:19.649Z","response_time":85,"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":["auto","grand","hacktoberfest","multiplayer","omp","open-mp","openmp","openmultiplayer","sa-mp","samp","san-andreas","sanandreas","server","tehft"],"created_at":"2024-09-26T01:45:57.516Z","updated_at":"2026-01-17T04:16:37.660Z","avatar_url":"https://github.com/openmultiplayer.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003ca aria-label=\"open.mp logo\" href=\"https://open.mp\"\u003e\n    \u003cimg src=\"https://assets.open.mp/assets/images/assets/wordmark-light-mono.png\" width=\"420\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eopen.mp multiplayer game framework\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca\n    href=\"https://open.mp/docs\"\n  \u003eWiki\u003c/a\u003e\n  |\n  \u003ca\n    href=\"https://discord.gg/samp\"\n  \u003eDiscord\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  A multiplayer mod for Grand Theft Auto: San Andreas that is fully backwards\n  compatible with San Andreas Multiplayer.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.open.mp\"\u003eopen.mp\u003c/a\u003e\n\u003c/p\u003e\n\n\u003chr\u003e\n\n# open.mp Web Services\n\nThis monorepo contains the web services and documentation for open.mp and SA-MP.\n\n## Overview\n\n- `docs/` Wiki documentation for SA-MP and open.mp in Markdown format including translations.\n- `frontend/` [Next.js](https://nextjs.org) app for the https://open.mp site.\n- `prisma/` [Prisma](https://prisma.io/) database models for generating Go code and SQL migrations.\n- `app/` Backend API for server listings, accounts, etc.\n\n## Frontend Development\n\nTo work on the frontend, you mostly only need to focus on the `frontend/` directory. Run `npm` commands in there such as `npm run dev`. See the readme file in there for more details.\n\nThe only files that the frontend need that _are not_ in that directory are `docs/` which it uses to for the https://open.mp/docs pages. `.env` is not used for frontend development.\n\n## Backend/Full Stack Development\n\nWhen working on the backend, the root of the repository is where you need to be. The server application will assume it's being run from the root, _not_ from within `cmd/`.\n\nTo start the API server, use [Taskfile](https://taskfile.dev) and run `task`, the default task is to build and run the API server.\n\nThe frontend, by default, only uses the live API. To change this you must edit any URLs from `https://api.open.mp/...` to `http://localhost/...`.\n\nYou can run the following command to get a minimal development environment ready:\n\n```\ndocker-compose -f .\\docker-compose.dev.yml up -d\n```\n\nThe `.dev.yml` Compose configuration contains services that aren't secure or production ready and suitable for local testing.\n\n## Deployment\n\nThe frontend is deployed directly to [Vercel](https://vercel.com) from the `master` branch.\n\nThe backend is deployed to a server from the `master` branch using the `docker-compose.yml` file. You can simulate a production deployment by running `docker-compose up`.\n\n### Uploading Assets\n\nWe host large static assets such as images and videos on an S3-compatible object storage. This runs at `assets.open.mp` and you can use the task `upload-assets` to upload all public assets from `frontend/public`.\n\nThe easiest way to do this is via the [Minio client](https://docs.min.io/docs/minio-client-quickstart-guide.html). Once installed, set up an alias called `omp`:\n\n```\nmc alias set omp https://assets.open.mp ACCESS_KEY SECRET_KEY\n```\n\nReplace the two keys with the real keys.\n\nThen run the task:\n\n```\ntask upload-assets\n```\n","funding_links":[],"categories":["MDX"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenmultiplayer%2Fweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenmultiplayer%2Fweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenmultiplayer%2Fweb/lists"}