Helps Drupal developers manage the base-code development work cycle for custom recipes/distributions/profiles/starter-kit templates, on top of DDEV — no host-level Apache, PHP, or MySQL required.
Each of the folders below holds a set of cmd-*.sh scripts. Running one builds a fresh Drupal project into a subdirectory named after the project, wired up with its own DDEV environment (own containers, own database — nothing shared on the host).
~/workspace/products Custom distributions/profiles base code
~/workspace/dev Development, enhancements, and optimization work
~/workspace/test Testing and functional automated testing
~/workspace/demos Demo templates and default content
~/workspace/sandboxes Private custom content templates
~/workspace/projects Development on a project based on a distribution/profile
~/workspace/profiles Other contrib or private installation profiles
~/workspace/themes Other contrib or private themes
~/workspace/modules Other contrib or private modules
~/workspace/libraries Other contrib or private libraries
~/workspace/forked Forked/customized copies of any of the above
~/workspace/docs Documentation projects/repos
~/workspace/agents AI agent definition repos
~/workspace/skills AI skill definition repos
~/workspace/recipes Drupal recipe packages
~/workspace/components Reusable SDC/component library repos
Where the shared configs and script libraries live.
~/workspace/core/scripts
~/workspace/core/config
git clone --branch '1.0.x' https://github.com/webship/workspace.git ~/workspace
cd ~/workspace
That's the whole setup. There is nothing to install and no shell variables to export: every script locates the workspace from its own path, so the clone works for the user running it, wherever it lives — ~/workspace, /srv/workspace, a second checkout side by side.
cd ~/workspace/dev
bash cmd-webship11-0-x-project.sh webship11c1 --install
Set your own webmaster account and any extras in the settings file:
vim ~/workspace/core/config/settings.yml
host: 127.0.0.1
web: http://127.0.0.1/core
protocol: http
account:
name: webmaster
pass: CHANGE_ME
mail: info@webship.co
config_sync_directory: ../config/sync
workspaces:
- products
- dev
- test
- demos
- sandboxes
- profiles
- modules
- themes
- libraries
- forked
- recipes
- components
- agents
- skills
- prompts
- docsKeep real passwords and API keys in your own copy — never commit them back.
No paths are listed: root, path, scripts, config and backups are derived from the checkout (backups/ is created on first run). Add them to settings.yml, or export WEBSHIP_WORKSPACE_ROOT / _PATH / _SCRIPTS / _CONFIG, only to point the tooling somewhere else.
There is no database: section either: every DDEV project manages its own isolated database, and DDEV's settings.ddev.php owns the connection.
Make sure DDEV and Docker are installed — that's the only runtime dependency now; there's nothing to install at the OS/package level.
A visual dashboard + AI assistant for the whole workspace lives in
core/workspace-app (basic Node.js + HTMX, served through DDEV):
cd ~/workspace/core/workspace-app
ddev start
Then open https://workspace.ddev.site — workspace cards with live project
counts, per-workspace pages (/dev, /test, …) with build/backup/remove
actions, and an AI assistant on every page. See
core/workspace-app/README.md for details
(including the one per-machine docker-group tweak).
The dashboard manages a hierarchical domain scheme by default:
https://workspace.ddev.site— the dashboard homehttps://<workspace>.workspace.ddev.site— that workspace's page (e.g.dev.workspace.ddev.site,test.workspace.ddev.site)https://<project>.<workspace>.workspace.ddev.site— the project's real site (e.g.webship11demo.dev.workspace.ddev.site); the Launch button uses these, and the canonicalhttps://<project>.ddev.sitealways keeps working
No per-project configuration is needed — wildcard hostnames + an nginx
tier in core/workspace-app/.ddev/ route everything with valid TLS.
All navigation links and the Launch buttons follow this scheme by
default. The hub base domain is configurable (hub_domain: in
core/config/settings.yml) — the same system is designed to run as one
remote development workspace hub on a public domain, e.g.
workspace.example.com → dev.workspace.example.com →
myproject.dev.workspace.example.com (add matching additional_fqdns,
DNS wildcards, and nginx server_names).
Things you can do from the dashboard UI:
/dev→ pick "Drupal 11.4.0 (recommended project)" from the Build dropdown, name itblog1, press Build — and watch the real terminal output stream until the site is installed athttps://blog1.ddev.site.- Press Stop / Start / Launch on any project row (buttons follow
the live DDEV status), Backup to archive it, or open
/dev/backupsto Restore an archive (files + automatic DB import). /agents→ Generate with AI → describe the agent you want; then Install it into~/.claude/agents/for Claude Code./docs→ write a doc, press PDF or HTML to render it, or Screenshot a site to capture any URL intodocs/.
Things you can ask the Workspace AI Assistant (it really does them):
- "Build a Drupal 11.4 site named d114test"
- "Create a Drupal CMS 2.1 site called cms1"
- "Create a Webship 11 project called demo1 and open it"
- "can you back up my d114test site please, then show me the backups page"
- "what's running right now?"
- "Generate an agent that reviews cmd- scripts and save it as cmd-linter"
- "Write a doc about demo1 and make a PDF"
cd ~/workspace/dev/
bash cmd-drupal11-0-x-recommended-project.sh drupal11c1 --install
cd ~/workspace/dev/
bash cmd-webship11-0-0-project.sh webship11c1 --install --add-users
Each of these scripts creates the project folder, runs ddev config + ddev start, then ddev composer create-project and ddev drush site:install inside that project's own containers.
cd ~/workspace/dev/
bash cmd-tools-remove.sh myproject
bash cmd-tools-backup-dev.sh myproject
cmd-tools-remove.sh runs ddev delete -y -O before removing the folder. cmd-tools-backup-*.sh tars the project folder and runs ddev export-db for the database dump — no host MySQL client involved.
cd ~/workspace/dev/
vim cmd-example.sh
#!/bin/usr/env bash
# Bootstrap.
source ${WEBSHIP_WORKSPACE_SCRIPTS}/bootstrap.sh || exit 1 ;
# Load workspace settings and extra lists.
eval $(parse_yaml ${WEBSHIP_WORKSPACE_CONFIG}/workspace.dev.settings.yml);
echo "*---------------------------------------------------------------------------------------*";
echo "| Build a Drupal project via DDEV";
echo "*---------------------------------------------------------------------------------------*";Have your own YAML files, read them in as arrays of variables, and use them however you like:
eval $(parse_yaml ${path_to_the_yml_file}/name-of-file.yml);
Have a look at the other cmd-*.sh scripts under themes/, profiles/, or test/ for more examples — use whatever naming or scripting style works for you.