{"id":13745953,"url":"https://github.com/raiyanyahya/freshenv","last_synced_at":"2026-04-08T12:02:25.874Z","repository":{"id":39856946,"uuid":"439973330","full_name":"raiyanyahya/freshenv","owner":"raiyanyahya","description":"🥗 Provision, share, manage local and cloud developer environments.","archived":false,"fork":false,"pushed_at":"2024-09-30T19:10:21.000Z","size":173,"stargazers_count":173,"open_issues_count":5,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-22T09:23:52.235Z","etag":null,"topics":["cli","command-line","developer-tools","docker","productivity","python"],"latest_commit_sha":null,"homepage":"https://freshenv.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raiyanyahya.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":"contributing.md","funding":".github/FUNDING.yml","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},"funding":{"github":"raiyanyahya"}},"created_at":"2021-12-19T21:38:32.000Z","updated_at":"2025-07-11T11:53:54.000Z","dependencies_parsed_at":"2024-04-12T18:47:29.388Z","dependency_job_id":"82304996-6331-463a-b5d9-f5fa5d4f0dca","html_url":"https://github.com/raiyanyahya/freshenv","commit_stats":{"total_commits":187,"total_committers":3,"mean_commits":"62.333333333333336","dds":"0.14973262032085566","last_synced_commit":"2ea9d9cc93b4e1548ce5f940a96afec47266a332"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/raiyanyahya/freshenv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raiyanyahya%2Ffreshenv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raiyanyahya%2Ffreshenv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raiyanyahya%2Ffreshenv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raiyanyahya%2Ffreshenv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raiyanyahya","download_url":"https://codeload.github.com/raiyanyahya/freshenv/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raiyanyahya%2Ffreshenv/sbom","scorecard":{"id":759702,"data":{"date":"2025-08-11","repo":{"name":"github.com/raiyanyahya/freshenv","commit":"08ce41c72bdcf98ec07ef13070dab8f82f4c2197"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/10 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":"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":"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":"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/codeql-analysis.yml:15","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:14","Warn: no topLevel permission defined: .github/workflows/Build-Test.yml:1","Warn: no topLevel permission defined: .github/workflows/Integration-Tests.yml:1","Warn: no topLevel permission defined: .github/workflows/Package-Release.yml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.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":"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Build-Test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Build-Test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Build-Test.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Build-Test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Build-Test.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Build-Test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Build-Test.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Build-Test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Integration-Tests.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Integration-Tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Integration-Tests.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Integration-Tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/Integration-Tests.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Integration-Tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Package-Release.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Package-Release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/Package-Release.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/Package-Release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/raiyanyahya/freshenv/codeql-analysis.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/Build-Test.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/Integration-Tests.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/Integration-Tests.yml:24","Warn: pipCommand not pinned by hash: .github/workflows/Integration-Tests.yml:25","Warn: pipCommand not pinned by hash: .github/workflows/Package-Release.yml:16","Warn: pipCommand not pinned by hash: .github/workflows/Package-Release.yml:17","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   6 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":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Mozilla Public License 2.0: 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":"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":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 1 commits out of 23 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"}}]},"last_synced_at":"2025-08-22T22:58:13.878Z","repository_id":39856946,"created_at":"2025-08-22T22:58:13.878Z","updated_at":"2025-08-22T22:58:13.878Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31554110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"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":["cli","command-line","developer-tools","docker","productivity","python"],"created_at":"2024-08-03T06:00:41.369Z","updated_at":"2026-04-08T12:02:25.812Z","avatar_url":"https://github.com/raiyanyahya.png","language":"Python","funding_links":["https://github.com/sponsors/raiyanyahya"],"categories":["Terminal","Virtual Environments","cli","Python"],"sub_categories":["Visual Studio Code"],"readme":"\n[![Actions Status](https://github.com/raiyanyahya/freshenv/workflows/Build%20Test/badge.svg)](https://github.com/raiyanyahya/freshenv/actions) [![Actions Status](https://github.com/raiyanyahya/freshenv/workflows/Package%20Release/badge.svg)](https://github.com/raiyanyahya/freshenv/actions) [![Actions Status](https://github.com/raiyanyahya/freshenv/workflows/Integration%20Tests/badge.svg)](https://github.com/raiyanyahya/freshenv/actions) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=raiyanyahya_freshenv\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=raiyanyahya_freshenv) [![CodeQL](https://github.com/raiyanyahya/freshenv/workflows/CodeQL/badge.svg)](https://github.com/raiyanyahya/freshenv/actions?query=workflow%3ACodeQL) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/786fd03c3cc5450c8ad6cf7c00302a94)](https://www.codacy.com/gh/raiyanyahya/freshenv/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=raiyanyahya/freshenv\u0026amp;utm_campaign=Badge_Grade) [![](https://img.shields.io/badge/python-3.6+-blue.svg)] [![freshenv](https://snapcraft.io/freshenv/badge.svg)](https://snapcraft.io/freshenv)\n [![PyPI version](https://badge.fury.io/py/freshenv.svg)](https://badge.fury.io/py/freshenv) [![PyPI download month](https://img.shields.io/pypi/dm/freshenv.svg)](https://pypi.python.org/pypi/freshenv/)\n\n\n# Freshenv 🥗\n```freshenv``` is a  command line application to provision and manage local developer environments. Build and develop your projects in completely isolated environments. Save, switch and restart your environments. Push and fetch developer environments from the cloud.  Choose from a wide variety of flavours to get the developer tools you need.\\\n\\\n\u003ckbd\u003e\n[![download-17adc07640182f121.gif](https://s10.gifyu.com/images/download-17adc07640182f121.gif)](https://gifyu.com/image/Sbsim)\n\u003c/kbd\u003e\n## The Story\n\nThis is a solution to a problem I have always had. I like my system to be clean, minimal and structured. \nIt gets quite tricky to manage multiple projects on my on machine, projects tend to gather and are placed everywhere. \nOvertime managing system wide dependencies becomes a problem. It is quite easy to mess up a system setting or to \nkeep track of a package I wont need tomorrow. This is why I built ```freshenv```. It is a command line application\n which helps developers in running and managing completely isolated developer environments locally. \nIt fetches and lets you run environment flavours in the form of docker containers\nwhich are preconfigured with tools and packages developer needs everyday. Read about the usage below. \nI imagine it would help developers like me. I hope you like it.\n\n## Flavours\n\n```freshenv flavours``` are different configurations for freshenv environments. You choose a flavour and provision it as an environment. A flavour can be a combination of operating systems, language packs, tools and application bundles. By default freshenv provisions you with a ```base``` flavour which runs ubuntu 18.04 and has packages like ```wget git python3-pip curl zsh wget nano zsh``` and more. The base flavour is a 260mb environment when provisioned. There are bigger flavours like ```devenv``` which runs on the latest ubuntu and has been loaded and configured with ```docker (run docker inside your freshenv environment), golang, python, node, java, a vscode server, build-essential automake make cmake sudo g++ wget git python3-pip curl zsh wget nano nodejs npm fonts-powerline``` and more. This environment is around 1.6gb large. Freshenv also gives you the option to provision a language based environment which contains necessary developer tools for that language. Checkout the usage section below on the flavours command to see a list of flavours available.\n\n## Custom Environments\n\nFreshenv lets developers build and provision custom environments. A custom flavour is a configuration of the base operating system, packages to install and the command to run when your environment is provisioned. Custom flavours are configured in a config file placed under $HOME/.freshenv/freshenv. This file will be automatically created once you run ```freshenv build config```. Below is an example of a custom flavour.\n\n```yml\n[MyEnv]\nbase=ubuntu\ninstall=apt update -y \u0026\u0026 apt upgrade -y \u0026\u0026 apt install arandr\ncmd=bash\n```\n\n## Cloud Environments\n\nFreshenv cloud introduces cloud capabilities to the developer environments. It lets developers ```push``` and ```fetch``` custom environments to the cloud. It currently supports personal clouds and a freshenv hosting plan is being worked on. To use the cloud features of freshenv you have to configure freshenv with the cloud provider and the bucket name. A sample of the config is present below. It currently supports aws s3 as a provider and more providers are being worked on. Please run ```fr cloud --help``` for more information.\n\n```yml\n[cloud.personal]\nprovider=aws\nbucket=myenvironments\naws_profile=default\n```\n\n\n## Installation Linux\n\nI recommend using the snap package manager to install freshenv. \n\n```console\n  snap install freshenv \n  \n  # give it access to the docker interface\n  snap connect freshenv:docker docker:docker-daemon \n```\n\nIf you dont have or use snap, install the freshenv python package from pypi. \n\n```console\n  pip install freshenv\n```\n\nI would recommend using pipx instead of pip to install cli applications on you machine.\n\n## Installation MacOS\n\nI am trying to get freshenv on homebrew-core but I need more stars on the repository for them to accept my pull request. The self hosted tap is available on the repo raiyanyahya/homebrew-freshenv. Install the freshenv python package from a self hosted homebrew tap.\n\n```console\n  brew tap raiyanyahya/freshenv\n  brew install freshenv\n```\n\n## Usage\n\n```console\nUsage: fr [OPTIONS] COMMAND [ARGS]...\n\n  A cli to provision and manage local developer environments.\n\nOptions:\n  --version  Show the version and exit.\n  --help     Show this message and exit.\n\nCommands:\n  build      Build a custom freshenv flavour.\n  check      Check system compatibility for running freshenv.\n  clean      Remove all freshenv flavours and environments.\n  cloud      Save and share your custom environments on the cloud.\n  flavours   Show all available flavours for provisioning.\n  provision  Provision a developer environment.\n  remove     Remove a freshenv environment.\n  start      Resume working in an environment.\n  view       View local freshenv managed environments\n```\n\n### Commands and Options\n\n**```flavours```**\n```console\nUsage: fr flavours [OPTIONS]\n\n  Show all available flavours for provisioning.\n\nOptions:\n  --help  Show this message and exit.\n```\n\n\n**```provision```**\n```console\nUsage: fr provision [OPTIONS]\n\n  Provision a developer environment.\n\nOptions:\n  -f, --flavour TEXT   The flavour of the environment.  [default: base]\n  -c, --command TEXT   The command to execute at startup of environment.\n  -p, --ports INTEGER  List of ports to forward.  [default: 3000]\n  -n, --name TEXT      Name of your environment.\n  --help               Show this message and exit.\n```\n\n\n**```start```**\n```console\nUsage: fr start [OPTIONS] NAME\n\n  Resume working in an environment.\n\nOptions:\n  --help  Show this message and exit.\n```\n\n**```remove```**\n```console\nUsage: fr remove [OPTIONS] NAME\n\n  Remove a freshenv environment.\n\nOptions:\n  -f, --force      Force remove an environment.\n  --help           Show this message and exit.\n```\n\n**```view```**\n```console\nUsage: fr view [OPTIONS]\n\n  View local freshenv managed environments.\n\nOptions:\n  --help  Show this message and exit.\n```\n\n**```check```**\n```console\nUsage: fr check [OPTIONS]\n\n  Check system compatibility for running freshenv.\n\nOptions:\n  --help  Show this message and exit.\n```\n\n**```clean```**\n```console\nUsage: fr clean [OPTIONS]\n\n  Remove all freshenv flavours and environments.\n\nOptions:\n  -f, --force  Force remove freshenv flavours and environments.\n  --help       Show this message and exit.\n```\n\n**```build```**\n```console\nUsage: fr build [OPTIONS] FLAVOUR\n\n  Build a custom freshenv flavour.\n\nOptions:\n  -l, --logs  Show build logs.\n  --help      Show this message and exit\n```\n\n**```cloud```**\n```console\nUsage: fr cloud [OPTIONS] COMMAND [ARGS]...\n\n  Save and share your custom environments on the cloud.\n\nOptions:\n  --help  Show this message and exit.\n\nCommands:\n  config  View personal and freshenv cloud configurations.\n  fetch   Download an environment from the cloud.\n  ls      List cloud environments.\n  push    Upload an environment to the cloud.\n```\n\n## License\n\nFreshenv is a free for open-source projects, however, if you are using the library for business and commercial projects you could choose to buy me a coffee.\n\n## Contributing\n\nContributions are always welcome!\n\nSee `contributing.md` for ways to get started. Please adhere to this project's `code of conduct`.\n\n\n## Contact\n\nContact me through email at contact@freshenv.io\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraiyanyahya%2Ffreshenv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraiyanyahya%2Ffreshenv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraiyanyahya%2Ffreshenv/lists"}