{"id":13623816,"url":"https://github.com/progrium/envy","last_synced_at":"2025-10-25T13:14:01.180Z","repository":{"id":33949967,"uuid":"37676549","full_name":"progrium/envy","owner":"progrium","description":"Lightweight dev environments with a twist","archived":false,"fork":false,"pushed_at":"2018-10-24T01:43:02.000Z","size":741,"stargazers_count":323,"open_issues_count":27,"forks_count":19,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-05-25T08:06:42.693Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/progrium.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}},"created_at":"2015-06-18T18:15:32.000Z","updated_at":"2025-03-31T03:38:02.000Z","dependencies_parsed_at":"2022-07-13T21:43:32.437Z","dependency_job_id":null,"html_url":"https://github.com/progrium/envy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/progrium/envy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progrium%2Fenvy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progrium%2Fenvy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progrium%2Fenvy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progrium%2Fenvy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/progrium","download_url":"https://codeload.github.com/progrium/envy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/progrium%2Fenvy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280960233,"owners_count":26420689,"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-25T02:00:06.499Z","response_time":81,"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":[],"created_at":"2024-08-01T21:01:35.977Z","updated_at":"2025-10-25T13:14:01.139Z","avatar_url":"https://github.com/progrium.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# envy\n\nDevelopment environment manager. Work in progress, but join the process!\n\n## Running Envy\n```\n$ docker run -d --name envy \\\n    -v /mnt/envy:/envy \\\n    -v /var/run/docker.sock:/var/run/docker.sock \\\n    -p 80:80 \\\n    -p 22:22 \\\n    -e HOST_ROOT=/mnt/envy \\\n    progrium/envy\n```\n\n## Using Envy\n\nYou connect to Envy via SSH or HTTP. [See this screencast for a demo.](https://vimeo.com/131329120)\n\nUsers are authenticated against GitHub using HTTP auth (user,pass or user,token) or SSH keys.\n\n## Concepts\n\n * **environment** This refers to a Docker image defining an environment\n   * An environment is a Docker image\n   * It can also refer to the directory used to build the Docker image\n   * Each environment comes with a Docker-in-Docker instance\n * **session** This is an active shell in a Docker container instance for an environment\n\n## Envy Commands\n\nAll sessions have access to the `envy` binary and can run management commands. Some of the commands\nare only available to users with admin privileges. Here are current commands:\n```\nUsage: envy \u003ccommand\u003e [options] [arguments]\n\nCommands:\n\n    admin ls         list admin users\n    admin rm         remove admin user\n    admin add        add admin user\n    environ rebuild  rebuild environment image\n    session reload   reload session from environment image\n    session commit   commit session changes to environment image\n    session switch   switch session to different environment\n\nRun 'envy help [command]' for details.\n```\n\n## Aliased Commands\n\nAs long as you keep the default `envyrc` in your environment, you'll have these aliases set up:\n```\nalias commit='exec envy session commit'\nalias reload='exec envy session reload'\nalias switch='exec envy session switch'\nalias rebuild='exec envy environ rebuild'\n```\nExec is necessary to exit to the session manager with status 128, which gets Envy to create a new container\nfrom the environment image. This happens quickly behind the scenes, so a session feels\nlike a continuous experience even if happening across multiple containers.\n\n## Envy Root\n\nWhen Envy is run it expects a host bind mount at /envy so it can initialize and persist its\nfile tree. This is where most of the state in Envy is kept. Most configuration is kept here in plain\nfiles. Here is an explanation of the tree:\n\n```\n/envy\n  /users\n    /\u003cuser\u003e\n      /environs       # directory of environs for this user\n      /sessions       # directory of sessions for this user\n      /home           # home directory mounted into all sessions\n      /root           # root home mounted in all sessions (see #3)\n  /config\n    users             # file of users allowed to login. defaults to * (any)\n    admins            # file of admin users. defaults to first logged in user\n  /bin\n    envy              # staging of the envy binary to put into sessions\n```\n\n## Startup Scripts\n\nBoth Bash and POSIX shells are set up to source `/root/environ/envyrc` when started interactively.\nFor Bash, this is done with a default `.bashrc`, and for POSIX by setting `ENV`.\n\nAlthough you can edit your `/root/environ/envyrc`, by default it will source a few other\nRC files. First, `~/.envyrc` if it exists, and then `/home/\u003cenvy-user\u003e/.envyrc_\u003ccontainer-user\u003e`\nif it exists. The latter allows you to specify an RC for the root user of all\nenvironments. One use case for this is to symlink `/root/.ssh` to your envy user's\n`.ssh` directory so ssh will have access to your identity keys in all environments.\n\n## Moving Host SSH\n\nEnvy is best experienced running on port 22 on a host. If you want to move your current OpenSSH\nto port 2222, here is a one-liner that is likely to work:\n```\n$ sed -i -e 's/Port 22/Port 2222/' /etc/ssh/sshd_config\n```\nThen restart SSH.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogrium%2Fenvy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprogrium%2Fenvy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogrium%2Fenvy/lists"}