pad.ws is a whiteboard app that acts as a dev environment in your browser
This uses Excalidraw for the whiteboard interface while Coder powers the cloud development environments.
Visit pad.ws for an official managed instance. During this beta, we offer free ubuntu dev environments without any setup
⚠️ IMPORTANT NOTICE: This repository is in early development stage. The setup provided in docker-compose.yml is for development and testing purposes only.
This simplified example lets you host pad on localhost but is not safe for real-life use without further configurations ⚠️
bash
cp .env.template .envEnsure persistence for the whole deployment (canvases and configs)
Run the PostgreSQL container using the provided configuration (e.g., in your docker-compose.yml)
bash
docker compose up -d postgres
In-memory data store for caching and session management with password authentication
bash
docker compose up -d redis.env file using the REDIS_PASSWORD variableOIDC provider for access and user management (within coder and pad app) * Run the Keycloak container
bash docker compose up -d keycloak* Access the Keycloak admin console http://localhost:8080 * Create a Realm: Name it appropriately (e.g.,pad-ws) * Create a Client: * Give it aClient ID(e.g.,pad-ws-client) * Enable Client Authentication * Add * to the valid redirect urls * You can leave other settings as default for now * Get Credentials: * Navigate toClients->[Your Client ID]->Credentialstab * Note the Client secret. * Update your environment variables file (.env) with:dotenv OIDC_REALM=your_oidc_realm OIDC_CLIENT_ID=your_client_id OIDC_CLIENT_SECRET=your_client_secret* Create a User: * Navigate toUsers->Create user* Fill in the details * Important: TickEmail verified* Go to theCredentialstab for the new user and set a password * Create an Audience: * Navigate toClients->[Your Client ID]->Client Scopes* Click on the dedicated scope of your Client ([clientid]-dedicated) * Click onConfigure a new mapper* Then click onAudience* EnsureIncluded Client Audiencematches yourClient ID* EnsureAdd to access tokenis On
bash
getent group docker | cut -d: -f3.env file with the DOCKER_GROUP_ID:
dotenv
DOCKER_GROUP_ID=your_docker_group_idbash
docker compose up -d coderadmin)docker-containers or a simple Ubuntu). Configure it as neededAccount -> API Keys.env
dotenv
CODER_API_KEY=your_coder_api_keyhttp://localhost:7080/api/v2/templates in your browser (or use curl)id of the template you created.env
dotenv
CODER_TEMPLATE_ID=your_coder_template_id # Example: 85fb21ba-085b-47a6-9f4d-94ea979aaba9http://localhost:7080/api/v2/organizations in your browser (or use curl)id of your organization (usually the default one).env:
dotenv
CODER_DEFAULT_ORGANIZATION=your_organization_id # Example: 70f6af06-ef3a-4b4c-a663-c03c9ee423bbCODER_WORKSPACE_NAME in your .env. Otherwise, it will assume your workspace name is the default we chose: ubuntu.The fastAPI app that both serves the build frontend and the backend API to interface with Coder
.env file are correctly setRun the pad application container
bash
docker compose up -d pad
🎉 Congratulations! You should now be able to access and login to your self-hosted pad at localhost:8000
🚧 Did you have any issue while following this guide?
Please let us know so we can improve the onboarding flow
$ claude mcp add pad.ws \
-- python -m otcore.mcp_server <graph>