Docker CI Chrome Support Firefox Support Safari Support

Demo Video


pojde is a distributed multi-tenant development environment with web access to all components.

It strives to be …

With pojde, you can develop from any device with a browser!


To install pojdectl, the management tool for pojde, paste the following into your terminal:

curl https://raw.githubusercontent.com/pojntfx/pojde/main/bin/pojdectl | bash -s -- upgrade-pojdectl

Works on Linux, macOS and Windows (WSL2).


pojde supports running many isolated instances on a host, where the host can be your local machine, a cloud server or even a Raspberry Pi. Before you continue to the next step, please install Docker on the host that you wish to run the instance on.

To create your first instance, use pojdectl apply:

$ pojdectl apply my-first-instance 5000 # Append `-n root@your-ip:ssh-port` to create the instance on a remote host instead

Now follow the instructions. pojdectl apply will ask you to download the CA certificate to your system, which you should do when creating the first instance; future instances will share this certificate. To trust the CA certificate, follow the videos we’ve created for you:

Note that you’ll have to select the CA certificate you’ve downloaded in the step before, not download the certificate as described in the videos.

Once you’ve done so, list your instances with pojdectl list:

$ pojdectl list # Append `-n root@your-ip:ssh-port` to list the instances on a remote host instead
NAME                           STATUS     PORTS
my-first-instance              running    5000-5005

As you can see, our first instance (my-first-instance) is running and has exposed ports 5000 through 5005. This port range has been selected when we ran pojdectl apply above. You can now access the services (replace localhost with your remote host’s IP or domain if you deployed to a remote host):

Icon Service Address Description
Cockpit https://localhost:5000/ A general management interface
code-server https://localhost:5001/ VSCode in the browser
ttyd https://localhost:5002/ Shell access from the browser
noVNC https://localhost:5003/ Graphical access from the browser
JupyterLab https://localhost:5004/ An interactive development environment

Additionally, there is a SSH server running on port 5005 which you can use to forward ports with pojdectl forward:

$ pojdectl forward my-first-instance # Append `-n root@your-ip:ssh-port` to also forward from the remote host to the local host

This, for example, forwards port 1234 in the instance to port 4200 on the local host and port 1235 to port 4201.

🚀 That’s it! We hope you enjoy using pojde.


pojde is based on a minimal base image; additional functionality can be added by enabling any of the following modules when running pojdectl apply:

Language Modules

Icon Name Description
C/C++ GCC, GDB, CMake, the C/C++ VSCode extensions and C++ Jupyter kernel
Go Go, TinyGo, the Go/TinyGo VSCode extensions and Go Jupyter kernel
Python Python, pip, the Python VSCode extensions and Python Jupyter kernel
Rust Rust, Cargo, the Rust VSCode extensions and Rust Jupyter kernel
JavaScript Node, the JavaScript/TypeScript VSCode extensions and JavaScript Jupyter kernel
Ruby Ruby, the Ruby VSCode extensions and Ruby Jupyter kernel
C# Mono, .NET, the C# VSCode extensions and C#/F#/PowerShell Jupyter kernels
Java Java, Maven, Gradle, the Java VSCode extensions and Java Jupyter kernel
Julia Julia, the Julia VSCode extensions and Julia Jupyter kernel
Octave Octave, the Octave VSCode extensions and Octave Jupyter kernel
R R, the R VSCode extensions and R Jupyter kernel
SQL SQLite, MariaDB, PostgreSQL, the SQL VSCode extensions and SQL Jupyter kernel
Bash Bash, the Bash VSCode extensions and Bash Jupyter kernel

Tool Modules


$ pojdectl --help
pojdectl is the management tool for pojde.
Global Flags:
[-n]ode <user@host:port>            Remote host to execute on.
                                    If not specified, execute locally.

Modification Commands:
apply <name> <startPort>            Create or upgrade an instance.
    [-f]orce                            Skip confirmation prompts.
    [-u]pgrade                          Pull latest image.
    [-r]ecreate                         Re-create the container.
    [-i]solate                          Block Docker daemon access.
remove [name...]                    Remove instances(s).
    [-f]orce                            Skip confirmation prompts.
    [-c]ustomization                    Remove customizations.
    [-p]references                      Remove preferences.
    [-s]ecurity                         Remove CA.
    [-u]ser data                        Remove user data.
    [-t]ransfer                         Remove transfer data.
    [-d]eb cache                        Remove .deb cache.
    [-a]ll                              Remove everything.
list                                List all instances.

Lifecycle Commands:
start [name...]                     Start instance(s).
stop [name...]                      Stop instance(s).
restart [name...]                   Restart instance(s).

Utility Commands:
logs <name>                                 Get the logs of an instance.
enter <name>                                Get a shell in an instance.
forward <name> [lhost:lport:rhost:rport...] Forward port(s) from an instance.

Miscellaneous Commands:
upgrade-pojdectl                    Upgrade this tool.
reset-ca [-f]orce                   Reset the CA.

For more information, please visit https://github.com/pojntfx/pojde#Usage.

Further Resources


pojde (c) 2021 Felix Pojtinger and contributors

SPDX-License-Identifier: AGPL-3.0