{"id":21658433,"url":"https://github.com/n0stack/n0stack","last_synced_at":"2025-12-28T20:01:59.794Z","repository":{"id":51857748,"uuid":"103247143","full_name":"n0stack/n0stack","owner":"n0stack","description":"A simple cloud provider using gRPC","archived":false,"fork":false,"pushed_at":"2023-03-07T02:10:34.000Z","size":6158,"stargazers_count":53,"open_issues_count":59,"forks_count":9,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-08-14T12:58:32.308Z","etag":null,"topics":["cloud-providers","go","golang","grpc","virtualization"],"latest_commit_sha":null,"homepage":"https://n0st.ac/k/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/n0stack.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}},"created_at":"2017-09-12T09:00:07.000Z","updated_at":"2024-11-25T13:16:00.000Z","dependencies_parsed_at":"2023-07-14T03:23:35.084Z","dependency_job_id":null,"html_url":"https://github.com/n0stack/n0stack","commit_stats":null,"previous_names":["n0stack/n0core"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/n0stack/n0stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/n0stack%2Fn0stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/n0stack%2Fn0stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/n0stack%2Fn0stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/n0stack%2Fn0stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/n0stack","download_url":"https://codeload.github.com/n0stack/n0stack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/n0stack%2Fn0stack/sbom","scorecard":{"id":671982,"data":{"date":"2025-08-11","repo":{"name":"github.com/n0stack/n0stack","commit":"172f0417d3025ebd680dd4f7b29ab54fafc5be40"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.5,"checks":[{"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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: bin/n0version:1"],"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 2-Clause \"Simplified\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.2.134 not signed: https://api.github.com/repos/n0stack/n0stack/releases/22455421","Warn: release artifact 0.2.133 not signed: https://api.github.com/repos/n0stack/n0stack/releases/19063007","Warn: release artifact 0.2.132 not signed: https://api.github.com/repos/n0stack/n0stack/releases/19062861","Warn: release artifact 0.2.131 not signed: https://api.github.com/repos/n0stack/n0stack/releases/18457413","Warn: release artifact 0.2.129 not signed: https://api.github.com/repos/n0stack/n0stack/releases/18451602","Warn: release artifact v0.2.134 does not have provenance: https://api.github.com/repos/n0stack/n0stack/releases/22455421","Warn: release artifact 0.2.133 does not have provenance: https://api.github.com/repos/n0stack/n0stack/releases/19063007","Warn: release artifact 0.2.132 does not have provenance: https://api.github.com/repos/n0stack/n0stack/releases/19062861","Warn: release artifact 0.2.131 does not have provenance: https://api.github.com/repos/n0stack/n0stack/releases/18457413","Warn: release artifact 0.2.129 does not have provenance: https://api.github.com/repos/n0stack/n0stack/releases/18451602"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:10: pin your Docker image by updating debian:jessie to debian:jessie@sha256:32ad5050caffb2c7e969dac873bce2c370015c2256ff984b70c1c08b3a2816a0","Warn: containerImage not pinned by hash: build/go/Dockerfile:1: pin your Docker image by updating golang:1.11 to golang:1.11@sha256:e972c78795b22d5cfab02ac410aa2305fcc036319a7af51065d1af583cd3ec04","Warn: containerImage not pinned by hash: build/grpc/go/Dockerfile:1","Warn: containerImage not pinned by hash: build/grpc/python/Dockerfile:1: pin your Docker image by updating python:3.7 to python:3.7@sha256:eedf63967cdb57d8214db38ce21f105003ed4e4d0358f02bedc057341bcf92a0","Warn: goCommand not pinned by hash: build/go/Dockerfile:13","Warn: goCommand not pinned by hash: build/grpc/go/Dockerfile:4-6","Warn: goCommand not pinned by hash: build/grpc/go/Dockerfile:4-6","Warn: goCommand not pinned by hash: build/grpc/go/Dockerfile:4-6","Warn: pipCommand not pinned by hash: build/grpc/python/Dockerfile:4-6","Info:   0 out of   5 containerImage dependencies pinned","Info:   0 out of   4 goCommand dependencies pinned","Info:   0 out of   1 pipCommand 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: GO-2020-0017 / GHSA-w73w-5m7g-f7qc","Warn: Project is vulnerable to: GO-2021-0053 / GHSA-c3h9-896r-86jm","Warn: Project is vulnerable to: GO-2020-0019 / GHSA-3xh2-74w9-5vxm","Warn: Project is vulnerable to: GO-2022-0229 / GHSA-cjjc-xp8v-855w","Warn: Project is vulnerable to: GO-2020-0012 / GHSA-ffhg-7mh4-33c4","Warn: Project is vulnerable to: GO-2021-0227 / GHSA-3vm4-22fp-5rfm","Warn: Project is vulnerable to: GO-2022-0968 / GHSA-gwc9-m7rh-j2ww","Warn: Project is vulnerable to: GO-2021-0356 / GHSA-8c26-wmh5-6g9v","Warn: Project is vulnerable to: GO-2024-2961","Warn: Project is vulnerable to: GO-2023-2402 / GHSA-45x7-px36-x8w8","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2023-2153 / GHSA-m425-mq94-257g / GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: GO-2021-0061 / GHSA-r88r-gmrh-7j83","Warn: Project is vulnerable to: GO-2022-0956 / GHSA-6q6q-88xp-6f2r","Warn: Project is vulnerable to: GO-2020-0036 / GHSA-wxc4-f4m6-wwqv"],"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-21T20:25:31.448Z","repository_id":51857748,"created_at":"2025-08-21T20:25:31.448Z","updated_at":"2025-08-21T20:25:31.448Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28103386,"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-12-28T02:00:05.685Z","response_time":62,"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":["cloud-providers","go","golang","grpc","virtualization"],"created_at":"2024-11-25T09:29:15.605Z","updated_at":"2025-12-28T20:01:59.758Z","avatar_url":"https://github.com/n0stack.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# n0stack\n\n[![Build Status](https://travis-ci.org/n0stack/n0stack.svg?branch=master)](https://travis-ci.org/n0stack/n0stack)\n[![CircleCI](https://circleci.com/gh/n0stack/n0stack/tree/master.svg?style=shield)](https://circleci.com/gh/n0stack/n0stack/tree/master)\n[![Go Report Card](https://goreportcard.com/badge/github.com/n0stack/n0stack)](https://goreportcard.com/report/github.com/n0stack/n0stack)\n[![](https://img.shields.io/docker/pulls/n0stack/n0stack.svg)](https://hub.docker.com/r/n0stack/n0stack)\n\u003c!-- [![](https://img.shields.io/docker/build/n0stack/n0stack.svg)](https://hub.docker.com/r/n0stack/n0stack) --\u003e\n\nThe n0stack is a simple cloud provider using gRPC.\n\n## Description\n\nThe n0stack is...\n\n- a cloud provider.\n    - You can use some features: booting VMs, managing networks and so on (see also [n0proto](n0proto/).)\n- simple.\n    - There are shortcode and fewer options.\n- using gRPC.\n    - A unified interface increase reusability.\n- able to be used as library and framework.\n    - You can concentrate to develop your logic by sharing libraries and frameworks for middleware, test, and deployment.\n\n## Motivation\n\nCloud providers have various forms depending on users.\nThis problem has been solved with many options and add-ons (e.g. OpenStack configuration file is very long.)\nIt is difficult to adapt to the application with options, therefore it is necessary to read or rewrite long abstracted code.\nI think it is better to code it yourself from the beginning.\n\nThere are some problems to develop cloud providers from scratch: no libraries, software quality, man-hours, and deployment.\nThe n0stack wants to solve these problems.\n\n\u003c!-- ## Demo --\u003e\n\n## Getting started\n\n### Prerequisites\n\n- Docker\n- docker-compose\n- Ubuntu 18.04 LTS\n\n### Deploy all in one\n\n1. You can start controllers on docker and install agent as follows:\n\n```sh\nwget https://raw.githubusercontent.com/n0stack/n0stack/master/deploy/docker-compose.yml\ndocker-compose up -d\ndocker run -it --rm -v $PWD:/dst n0stack/n0stack cp /usr/local/bin/n0core /dst\n./n0core install agent -a \"--node-api-endpoint=localhost:20180 --location=////1\"\n```\n\n2. Download n0cli from [Github releases](https://github.com/n0stack/n0stack/releases/latest).\n3. Try [use cases](https://docs.n0st.ac/en/master/user/usecases/README.html).\n\n## Documentations\n\n[![Gitter](https://img.shields.io/gitter/room/n0stack/n0sack.svg)](https://gitter.im/n0stack/)\n[![Documentation Status](https://readthedocs.org/projects/n0stack/badge/?version=master)](https://docs.n0st.ac/en/master/?badge=master)\n[![GoDoc](https://godoc.org/github.com/n0stack/n0stack?status.svg)](https://godoc.org/github.com/n0stack/n0stack)\n\nUser documentations and specifications is [readthedocs](https://docs.n0st.ac/en/master/?badge=master).\n\nGolang library documentations is [GoDoc](https://godoc.org/github.com/n0stack/n0stack).\n\n## Components\n\nThe final goal of n0stack is to represent the state of all clusters with n0proto.\nImplementations such as n0core manipulates the cluster according to the information specified by n0proto.\nThe implementation of n0proto is left to each developer.\nThis repository is just a reference implementation.\nHowever, please share actively usable libraries such as `n0core/pkg/driver`.\n\n![](docs/_static/images/components.svg)\n\n### [n0proto](n0proto/)\n\nProtobuf definitions for all of n0stack services.\n\n### [n0cli](n0cli/)\n\nCLI for n0stack API.\n\n### n0ui\n\nWeb UI for n0stack API.\n\n### [n0bff](n0bff/)\n\nBFF(Backends for Frontend) of n0stack API. This provide features: API gateway, authentication, authorization and so on.\n\n### [n0core](n0core/)\n\nThe example for implementations about n0stack API.\n\n## Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create new Pull Request \n\n### How to develop\n\n- see also [Makefile](Makefile)\n\n1. Start containers\n\n```sh\nmake build-builder # once\nmake up\n```\n\n2.  Start a Agent\n    - Recommended way is...\n        1. Boot VM\n        2. [Deploy agent](n0core/README.md) to booted VM\n3. Develop features and restart containers or a agent\n\n## License\n\n[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fn0stack%2Fn0stack.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fn0stack%2Fn0stack?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fn0stack%2Fn0stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fn0stack%2Fn0stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fn0stack%2Fn0stack/lists"}