{"id":13416369,"url":"https://github.com/TomasTomecek/sen","last_synced_at":"2025-03-14T23:31:39.797Z","repository":{"id":1779111,"uuid":"43115475","full_name":"TomasTomecek/sen","owner":"TomasTomecek","description":"Terminal User Interface for containers.","archived":false,"fork":false,"pushed_at":"2024-08-14T07:50:34.000Z","size":2996,"stargazers_count":990,"open_issues_count":30,"forks_count":61,"subscribers_count":28,"default_branch":"master","last_synced_at":"2024-10-29T14:55:56.467Z","etag":null,"topics":["containers","docker","docker-tui","podman","pypi","python","python3","sen","terminal","tui","vim"],"latest_commit_sha":null,"homepage":"","language":"Python","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/TomasTomecek.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":"2015-09-25T07:13:43.000Z","updated_at":"2024-10-27T11:50:20.000Z","dependencies_parsed_at":"2024-09-23T10:03:13.365Z","dependency_job_id":"7fe2d048-7abc-4ee0-b407-c00b0eaacc84","html_url":"https://github.com/TomasTomecek/sen","commit_stats":{"total_commits":372,"total_committers":17,"mean_commits":21.88235294117647,"dds":0.07795698924731187,"last_synced_commit":"4df40c6d24a263d4990297e25335a03509223365"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomasTomecek%2Fsen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomasTomecek%2Fsen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomasTomecek%2Fsen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TomasTomecek%2Fsen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TomasTomecek","download_url":"https://codeload.github.com/TomasTomecek/sen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243345588,"owners_count":20275870,"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":["containers","docker","docker-tui","podman","pypi","python","python3","sen","terminal","tui","vim"],"created_at":"2024-07-30T21:00:57.762Z","updated_at":"2025-03-14T23:31:39.791Z","avatar_url":"https://github.com/TomasTomecek.png","language":"Python","readme":"# sen\n\n![Build Status](https://travis-ci.org/TomasTomecek/sen.svg?branch=master)\n\n\n`sen` is a terminal user interface for containers:\n * it can interactively manage your containers and images:\n  * start, stop, restart, kill, delete,...\n * there is a \"dashboard\" view for containers and images\n * you are able to inspect containers and images\n * sen can fetch logs of containers and even stream logs real-time\n * some buffers support searching and filtering\n * sen receives real-time updates from docker when anything changes\n  * e.g. if you pull a container in another terminal, sen will pick it up\n * sen notifies you whenever something happens (and reports slow queries)\n * supports a lot of vim-like keybindings (`j`, `k`, `gg`, `/`, ...)\n * you can get interactive tree view of all images (equivalent of `docker images --tree`)\n * see how much space containers, images and volumes occupy (just type `:df`)\n\nYou can [see the features yourself](/docs/features.md).\n\n![Preview of sen](/data/sen-preview.gif)\n\n\n# Status\n\n**maintenance mode**\n\nI lost interest in working on new features for sen. I will continue providing\nsupport for sen as much as I can, but only bug fixes. Please don't expect any\nnew features written by me. If you want some feature in sen, you need to write\nit yourself — I will gladly accept such pull request.\n\n\n# Installation and running `sen`\n\nI strongly advise to run `sen` from a docker container provided on docker hub:\n\n```\n$ docker pull tomastomecek/sen\n```\n\nThis repository has set up automated builds on docker hub. In case you run into some issue, try pulling latest version first before opening an issue.\n\nThis is the recommended way of running `sen` in a container:\n\n```\n$ docker run -v /var/run/docker.sock:/run/docker.sock -ti -e TERM tomastomecek/sen\n```\n\nSome distros have `/var/run` simlinked to `/run`, so you can do `/run/docker.sock:/run/docker.sock` instead.\n\nIn case you would like to try development version of sen, you can pull `tomastomecek/sen:dev`.\n\nDon't forget to bindmount the socket inside with `:Z` on SELinux systems.\n\n\n## docker\n\nYou can easily build a docker image with sen inside:\n\n```\n$ docker build --tag=$USER/sen https://github.com/tomastomecek/sen\n$ docker run -v /var/run/docker.sock:/run/docker.sock -ti -e TERM $USER/sen\n```\n\n\n## PyPI\n\n`sen` is using [`urwidtrees`](https://github.com/pazz/urwidtrees) as a dependency. Unfortunately, the upstream\nmaintainer doesn't maintain it on PyPI so we need to install it directly from\ngit, before installing sen (the forked PyPI version has a [bug](https://github.com/TomasTomecek/sen/issues/128) in\nthe installation process):\n\n```\n$ pip3 install git+https://github.com/pazz/urwidtrees.git@9142c59d3e41421ff6230708d08b6a134e0a8eed#egg=urwidtrees-1.0.3.dev\n```\n\n`sen` releases are available on PyPI:\n\n```\n$ pip3 install sen\n```\n\nIf `pip3` executable is not available on your system, you can run pip like this:\n\n```\n$ python3 -m pip install sen\n```\n\nAnd then start sen like this:\n\n```\n$ sen\n```\n\n\n## git\n\n`sen` is a python 3 only project. I recommend using at least python 3.4. This is how you can install `sen` from git:\n\n```\n$ git clone https://github.com/TomasTomecek/sen\n$ cd sen\n$ pip3 install --user -r ./requirements.txt\n$ ./setup.py install\n$ sen\n```\n\nOr even run `sen` straight from git:\n\n```\n$ git clone https://github.com/TomasTomecek/sen\n$ cd sen\n$ pip3 install --user -r ./requirements.txt\n$ PYTHONPATH=\"$PWD:$PYTHONPATH\" ./sen/cli.py\n```\n\n\n# Prerequisite\n\nEither:\n\n* The unix socket with the API for docker engine needs to be accessible. By default it's located at `/run/docker.sock`.\n\nOr:\n\n* Have the `DOCKER_HOST`, `DOCKER_TLS_VERIFY`, and `DOCKER_CERT_PATH` set properly.\n\n\n# Podman\n\nStarting Podman v2.0, there is a [Docker-compatible\nAPI](https://docs.podman.io/en/latest/_static/api.html) provided by Podman.\n`sen` works well while talking to Podman over this API.\n\n\n## Connecting to Podman\n\nRun Podman as:\n```\n$ podman system service -t 0\n```\n\nLet's discover the unix socket path now:\n```\n$ podman info --format={{\".Host.RemoteSocket.Path\"}}\n/run/user/1000/podman/podman.sock\n```\n\nAnd finally tell `sen` to connect to it:\n```\n$ DOCKER_HOST=unix://$(podman info --format={{\".Host.RemoteSocket.Path\"}}) sen\n```\n\n\n# Keybindings\n\nSince I am heavy `vim` user, these keybindings are trying to stay close to vim.\n\n\n## Global\n\n```\n/         search (provide empty query to disable searching)\nn         next search occurrence\nN         previous search occurrence\nf4        display only lines matching provided query (provide empty query to clear filtering)\nf5        open a tree view of all images (`docker images --tree` equivalent)\nctrl o    navigate to next buffer\nctrl i    navigate to previous buffer\nx         remove buffer\nq         remove buffer, quit if no buffer is left\nctrl l    redraw user interface\nh, ?      show help\n:         open command prompt\n```\n\n## Movement\n\n```\ngg, home  go to first item\nG, end    go to last item\nj         go one line down\nk         go one line up\npg up\nctrl u    go 10 lines up\npg down\nctrl d    go 10 lines down\n```\n\n## Listing\n\n```\n@         refresh listing\nf4        filtering, for more info run `help filter` in sen\n```\n\n## Image commands in listing\n\n```\ni         inspect image\nd         remove image (irreversible!)\nD         remove image forcibly (irreversible!)\nenter     display detailed info about image (when layer is focused)\n```\n\n## Container commands in listing\n\n```\ni         inspect container\nl         display logs of container\nf         follow logs of container\nd         remove container (irreversible!)\nD         remove container forcibly (irreversible!)\nt         stop container\ns         start container\nr         restart container\np         pause container\nu         unpause container\nb         open container's mapped ports in a web-browser\nX         kill container\n!         toggle realtime updates of the interface (this is useful when you are removing multiple\n          objects and don't want the listing change during that so you accidentally remove something)\n```\n\n## Tree buffer\n\n```\nenter  display detailed info about image (opens image info buffer)\n```\n\n## Image info buffer\n\n```\nenter     display detailed info about image (when an image is focused)\ni         inspect image or container, whatever is focused\n```\n\n\n## Container info buffer\n\n```\nenter     display detailed info about image (when image of the container is focued)\ni         inspect image (when image of the container is focued)\n```\n\n\n## Disk usage buffer\n\nYou can enter it by typing command `df`.\n\n\n# Why I started sen?\n\nSince I started using docker, I always dreamed of having a docker TUI.\nSomething like [tig](https://github.com/jonas/tig),\n[htop](http://hisham.hm/htop/) or [alot](https://github.com/pazz/alot). Some\nappeared over time. Such as\n[docker-mon](https://github.com/icecrime/docker-mon) or\n[ctop](https://github.com/yadutaf/ctop). Unfortunately, those are not proper\ndocker TUIs. They are meant for monitoring and diagnostics.\n\nSo I realized that if I want make my dream come true, I need to do it myself.\nThat's where I started working on *sen* (*dream* in Slovak).\n\nBut! As the time went, [someone](https://github.com/moncho) else had the same\nidea as I did: [dry](https://github.com/moncho/dry).\n","funding_links":[],"categories":["Container Operations","Python","Terminal User Interface","vim","Table of Contents","\u003ca name=\"devops\"\u003e\u003c/a\u003eDevOps"],"sub_categories":["User Interface"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTomasTomecek%2Fsen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTomasTomecek%2Fsen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTomasTomecek%2Fsen/lists"}