{"id":13739910,"url":"https://github.com/podenv/podenv","last_synced_at":"2025-04-05T12:06:49.839Z","repository":{"id":36652161,"uuid":"199657781","full_name":"podenv/podenv","owner":"podenv","description":"a container wrapper","archived":false,"fork":false,"pushed_at":"2025-02-18T13:21:13.000Z","size":654,"stargazers_count":72,"open_issues_count":4,"forks_count":11,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-28T02:50:39.822Z","etag":null,"topics":["dhall","haskell","linux-containers","nix","podman","rootless-containers"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/podenv.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2019-07-30T13:32:11.000Z","updated_at":"2025-02-18T13:21:17.000Z","dependencies_parsed_at":"2023-01-17T03:46:37.642Z","dependency_job_id":"427371b3-0e19-493e-a159-567a95cc51b2","html_url":"https://github.com/podenv/podenv","commit_stats":{"total_commits":420,"total_committers":5,"mean_commits":84.0,"dds":0.03809523809523807,"last_synced_commit":"b17a3e5ee92f29bbebcb895c6de568dfcf911b97"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podenv%2Fpodenv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podenv%2Fpodenv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podenv%2Fpodenv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podenv%2Fpodenv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/podenv","download_url":"https://codeload.github.com/podenv/podenv/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332606,"owners_count":20921853,"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","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":["dhall","haskell","linux-containers","nix","podman","rootless-containers"],"created_at":"2024-08-03T04:00:39.344Z","updated_at":"2025-04-05T12:06:49.803Z","avatar_url":"https://github.com/podenv.png","language":"Haskell","readme":"# podenv: a container wrapper\n\n[![Hackage](https://img.shields.io/hackage/v/podenv.svg?logo=haskell)](https://hackage.haskell.org/package/podenv)\n[![Apache-2.0 license](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)\n\n\u003e Note that this is a work in progress, please get in touch if you are interested.\n\nPodenv provides a declarative interface to manage containerized applications.\nUsing rootless containers, podenv let you run applications seamlessly.\n\n## Overview and scope\n\nThe goal of podenv is to implement a modern application launcher:\n\n- [Highlevel capability system](#capabilities)\n- [Multiple runtimes](#runtimes)\n- [VPN network namespace](#namespace)\n- [Functional configuration](#configuration)\n- [Simple to use](#usages)\n\nPodenv differs from [toolbx](https://containertoolbx.org/) or [flatpak](https://flatpak.org/):\n\n- Isolation by default: network or home directory access need to be explicitely enabled.\n- Unopinionated runtime: applications are provided by distro packages or Containerfile.\n- High level command line interface.\n\n## Features\n\n### \u003ca name=\"capabilities\"\u003e\u003c/a\u003eCapabilities\n\nShare resources with simple toggles:\n\n- `--wayland` graphical display.\n- `--pipewire` access audio and video streams.\n- `--dbus` share the dbus session.\n- See the full list in this configuration schema: [Capabilities.Type](https://github.com/podenv/podenv/blob/main/hub/schemas/Capabilities.dhall)\n\nMount directories with smart volumes:\n\n- `--volume ~` share the home directory.\n- `--volume web:~` use a volume named `web` for the container home.\n- `--hostfile ./document.pdf` share a single file.\n\n### \u003ca name=\"runtimes\"\u003e\u003c/a\u003eContainer Runtimes\n\nPodenv works with multiple container runtimes:\n\n- Podman for image and Containerfile.\n- Bubblewrap for local rootfs and Nix Flakes.\n\nThe runtime integration is decoupled from the application description\nso that more options can be added in the future.\n\n### \u003ca name=\"namespaces\"\u003e\u003c/a\u003eNamespace\n\nApplications can share resources using the `--namespace NAME` option.\nFor example, a browser application can be attached to the network of a VPN application.\nCheckout the [Configure a VPN howto](./docs/howtos/vpn.md).\n\n### \u003ca name=\"namespaces\"\u003e\u003c/a\u003eConfiguration\n\nApplications are user-defined with functionnal and re-usable expressions:\n\n#### Firefox with a fedora container\n\n```dhall\n(env:PODENV).Application::{\n, name = \"firefox\"\n, description = Some \"Mozilla Firefox\"\n, runtime = (env:PODENV).Hub.fedora.useGraphic [ \"firefox\" ]\n, command = [ \"firefox\", \"--no-remote\" ]\n, capabilities = (env:PODENV).Capabilities::{ wayland = True, network = True }\n}\n```\n\nThe fedora useGraphic function defines a custom Containerfile:\n\n```dhall\n\\(pkgs : List Text) -\u003e\n(env:PODENV).ContainerBuild::{\n, containerfile =\n    ''\n    FROM fedora:latest\n    RUN dnf install -y mesa-dri-drivers pipewire-libs\n    RUN dnf update -y\n    RUN dnf install -y ${concatSep \" \" pkgs}\n    ''\n, image_home = Some \"/home/fedora\"\n, image_update = Some \"dnf update -y\"\n}\n```\n\n\u003e The graphic packages layer is shared by the other apps.\n\n#### Nix Flakes\n\nPodenv support the [Nix installables syntax](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix.html#installables):\n\n```dhall\n(env:PODENV).Application::{\n, name = \"polyglot\"\n, description = Some \"Tool to count lines of source code.\"\n, runtime = (env:PODENV).Hub.nix.useInstallables [ \"github:podenv/polyglot.nix\" ]\n, capabilities = (env:PODENV).Capabilities::{ cwd = True }\n}\n```\n\n#### Hub\n\nBy default, podenv uses the [hub](./hub) collection.\nRun `podenv --list` to see the available applications.\n\n\n## \u003ca name=\"usages\"\u003e\u003c/a\u003eUsage\n\nPodenv provides a simple command line: `podenv [--caps] application-name [args]`.\nCheckout the tutorials for examples.\n\n\n# Documentation\n\nPodenv documentation is organized into the following [four sections][documentation]:\n\n[documentation]: https://www.divio.com/en/blog/documentation/\n\n## Tutorials\n\nThese guides help you get your hands dirty with working examples:\n\n* [Install and use podenv](./docs/tutorials/install.md)\n* [Use an application](./docs/tutorials/use.md)\n* [Create an application](./docs/tutorials/create.md)\n* [Howto use Nix](./docs/tutorials/nix.md)\n* [Work with rawhide](./docs/tutorials/rawhide.md)\n\n## Howtos\n\nThese cookbooks teach you how to solve specific tasks:\n\n* [Configure a VPN](./docs/howtos/vpn.md)\n* [Setup a custom image](./docs/howtos/image.md)\n* [Contribute to podenv](./docs/howtos/contribute.md)\n\n## Discussions\n\nThese posts explain the context and motivation behind this tool:\n\n* [Declarative containers](./docs/discussions/declarative-containers.md)\n* [Using dhall for configuration](./docs/discussions/dhall-configuration.md)\n* [Roadmap](./docs/discussions/roadmap.md)\n\n## References\n\nThese comprehensive resources cover details that other texts will gloss over:\n\n* [Command line](./docs/references/command-line.md)\n* [Configuration](./docs/references/configuration.md)\n","funding_links":[],"categories":["Projects"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpodenv%2Fpodenv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpodenv%2Fpodenv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpodenv%2Fpodenv/lists"}