Releases: ScaleCommerce-dev/scdev
v0.5.4
Update
scdev self-updateInstall
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shBug Fixes
- Fix
scdev updateignoring env/image/volume/command changes -serviceNeedsRecreateonly compared Traefik labels and bailed out with "Project is up to date" on any other change, leaving stale containers running. It now compares a deterministicscdev.config-hashlabel stamped on each container, covering image, env, volumes, command, working dir, routing, published ports, and network aliases. Containers created before the label existed are recreated once on first update after upgrade.
Improvements
- Skill updates for template creation and existing-project setup - expanded
skills/scdev/references (new stack-gotchas reference, richer config examples and template authoring notes, updated SKILL.md with rename/link commands and per-servicerouting.domainguidance) to help agents scaffold new templates and onboard scdev into existing projects. - README and template docs: Symfony/Sylius/Laravel trusted-proxies troubleshooting - documented the mixed-content / stuck debug toolbar / broken admin login failure mode caused by Traefik terminating HTTPS without a trusted-proxy env var, plus PHP template authoring tips (memory_limit drop-in, install-php-extensions, asset-pipeline builds).
v0.5.3
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shBug Fixes
- Fix systemcheck reporting "All checks passed" when CA is not trusted -
checkCAonly checked whether CA files exist, not whether the CA is trusted by the system. On a new install where the user skips CA installation, first-run would say "Setup incomplete" but systemcheck would say "All checks passed!" immediately after. Now systemcheck verifies trust status and reports "not trusted by system" with instructions to fix.
v0.5.2
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shBug Fixes
- Fix RedisInsights image not resolved on new installs -
${RedisInsightsImage}was missing from the substitution map ingenerateDefaultGlobalConfig(), causing the literal string to be written to~/.scdev/global-config.yamlon first run. Docker then failed with "invalid reference format". Existing installs were unaffected because their config file predated the redis_insights section.
Maintenance
- Bump Go toolchain from 1.25.1 to 1.26.2
- Bump just from 1.40.0 to 1.49.0
- Bump golang.org/x/term from v0.39.0 to v0.42.0
- Bump golang.org/x/sys from v0.40.0 to v0.43.0
- Bump github.com/spf13/pflag from v1.0.9 to v1.0.10
v0.5.1
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shFeatures
-
scdev linkcommand - create named link networks for direct container-to-container communication between separate projectsscdev link create <name>/scdev link delete <name>- manage named link networksscdev link join <name> <member>.../scdev link leave <name> <member>...- add/remove projects or individual servicesscdev link ls- list all links and their membersscdev link status <name>- show members and connection state- Members can be whole projects (
sec-scan) or specific services (redis-debug.app) - Each link creates a dedicated Docker network (
scdev_link_<name>) for isolation between link groups - Containers resolve each other by container name via Docker's embedded DNS (e.g.,
app.project-b.scdev) - Links persist in global state and auto-reconnect on
scdev start - Validation: link name characters, project/service existence, duplicate prevention
-
scdev info/scdev status/scdev listshow link information - links are displayed alongside services and shared services -
scdev renamecommand - rename a project with full Docker resource migration- Stops containers, migrates volume data (named + Mutagen sync), removes old network
- Updates state file and link memberships atomically
- Rewrites
name:in.scdev/config.yaml(preserves formatting and comments) - Restarts project with new name
- Confirmation prompt (skip with
--force) - Validates new name is DNS-safe and not already taken
Bug Fixes
- Fix variables in typed config fields -
${VAR}placeholders in int/bool fields (e.g.,port: ${PORT},router: ${ENABLE}) caused "cannot unmarshal !!str into int" errors. The first config parse pass now uses a minimal struct, deferring typed field parsing until after variable substitution.
Improvements
- Added
ContainerNameFor()standalone helper for building container names without a loaded Project - Added
CopyVolume()to Runtime interface for volume data migration
v0.5.0
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shFeatures
-
scdev linkcommand - create named link networks for direct container-to-container communication between separate projectsscdev link create <name>/scdev link delete <name>- manage named link networksscdev link join <name> <member>.../scdev link leave <name> <member>...- add/remove projects or individual servicesscdev link ls- list all links and their membersscdev link status <name>- show members and connection state- Members can be whole projects (
sec-scan) or specific services (redis-debug.app) - Each link creates a dedicated Docker network (
scdev_link_<name>) for isolation between link groups - Containers resolve each other by container name via Docker's embedded DNS (e.g.,
app.project-b.scdev) - Links persist in global state and auto-reconnect on
scdev start - Validation: link name characters, project/service existence, duplicate prevention
-
scdev info/scdev status/scdev listshow link information - links are displayed alongside services and shared services -
scdev renamecommand - rename a project with full Docker resource migration- Stops containers, migrates volume data (named + Mutagen sync), removes old network
- Updates state file and link memberships atomically
- Rewrites
name:in.scdev/config.yaml(preserves formatting and comments) - Restarts project with new name
- Confirmation prompt (skip with
--force) - Validates new name is DNS-safe and not already taken
Bug Fixes
- Fix variables in typed config fields -
${VAR}placeholders in int/bool fields (e.g.,port: ${PORT},router: ${ENABLE}) caused "cannot unmarshal !!str into int" errors. The first config parse pass now uses a minimal struct, deferring typed field parsing until after variable substitution.
Improvements
- Added
ContainerNameFor()standalone helper for building container names without a loaded Project - Added
CopyVolume()to Runtime interface for volume data migration
v0.4.2
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shBug Fixes
- Fix shared service hostnames not resolving from project containers -
docker network connectnow passes--aliasflags, so shared services (e.g.,mail,adminer,redis-insights) are resolvable by their short names on project networks, not just on the shared network - Fix
Down()not releasing TCP/UDP host ports -Down()now refreshes the router to drop ports the project was using, preventing port conflicts on subsequent starts (previously only done in CLI commands, not the library method)
Improvements
- Integration tests restore shared services - tests that tear down shared services now snapshot what's running beforehand and restore it after, preventing silent breakage of the developer's running environment
- Updated docs (README, SKILL.md, templates/README.md) with shared service hostname reference - container-internal hostnames and ports for accessing services from app code vs browser
v0.4.1
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shImprovements
Down()now handles state unregistration (previously only done incmd/down.go), fixing stale entries left by integration tests- Added integration tests for exec
--separator, config variables in running containers, per-service routing domain, and Down() state cleanup - Added CONTRIBUTING.md with developer guide, architecture decisions, and test strategy
v0.4.0
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shFeatures
scdev createcommand - scaffold new projects from templates (GitHub repos or local directories)- Template resolution: bare name (
express), full repo (myorg/repo), or local path (./dir) --branchand--tagflags for GitHub templates--auto-startand--auto-setupflags for non-interactive setup- DNS-safe project name validation
- GitHub tarball download with security hardening (symlink validation, size limits, mode masking, path traversal checks)
- Template resolution: bare name (
- Config variables -
variables:section for reusable${VAR}substitution across the config file (not passed to containers). Variables can reference built-in variables like${PROJECTNAME}. - Per-service routing domain -
routing.domainallows individual HTTP/HTTPS services to have custom domains (e.g.api.my-app.scalecommerce.sitefor a backend service) scdev start -q/--quiet- skip project info display after start (useful in scripts and setup.just)- Docker availability check - all Docker-dependent commands now check if Docker is running and show a clear error message instead of confusing Docker errors
scdev exechandles--separator -scdev exec app -- cmdnow works correctly
Templates
- Three official templates published:
- Template Authoring Guide at
templates/README.md .setup-completemarker pattern for solving container startup vs setup circular dependency
Improvements
shared.redis_insightsrenamed toshared.redisin project config (consistent withshared.router,shared.mail,shared.db)buildContainerConfigis now the single source of truth for container configuration (fixes divergence between start and update paths)connectRouteruses shared helper pattern (consistent with mail/db/redis)- Extracted
IsDBServiceByName()to eliminate duplicate DB detection logic - Reduced redundant
GlobalConfigloading in status command - Removed dead
sync_modecode from Mutagen sync - Fixed unsafe
appendin cleanup command - Supply chain security messaging in README
Documentation
- README: Templates section, multi-service routing, configuration reference tables, supply chain security callout
- Template Authoring Guide: setup lifecycle, scaffolding patterns (in-place vs /tmp), framework-specific notes
- CLAUDE.md: templates docs, Docker check, variables, routing.domain
- scdev skill restructured with progressive disclosure (222-line SKILL.md + references/)
v0.3.0
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shFeatures
- Sync-ready gate - containers wait for Mutagen sync automatically, no more
while [ ! -f ... ]workarounds - Default protocol -
routing.protocoldefaults tohttpwhenportis set - Default domain -
domaindefaults to{name}.scalecommerce.sitewhen not set - scdev skill - installable agent skill (
npx skills add scalecommerce-dev/scdev) with full CLI reference, config templates for Node/PHP/Python, debugging guides, and setup workflows
Documentation
- Complete README rewrite with architecture diagram, benchmark data, and coding agents section
- New tagline: "Ever seen a developer and an AI agent fall in love with a dev environment?"
- File sync benchmark: 5x faster cold start vs Docker bind mounts on macOS
- "Standing on the Shoulders of Giants" section crediting all underlying technologies
- TCP/UDP routing, volumes, and custom commands documented in detail
.pnpm-storemust be in Mutagen ignore for pnpm projects (prevents native binary corruption across image changes)
v0.2.0
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/ScaleCommerce-DEV/scdev/main/install.sh | shImprovements
- Shared service registry pattern — adding a new shared service is now one entry instead of editing 6+ locations
- Split
project.gogod file (1400→868 lines) intoshared_services.goandmutagen_sync.go - Single source of truth for global config defaults (
newDefaultGlobalConfig()) — fixes RedisInsights image missing bug - Removed unused
StartRouterWithPortsparameters and unnecessaryConnectToProject/DisconnectFromProjectaliases - Fixed
scdev infonot showing shared services section when onlyredis_insightsis enabled - Consistent display names across all shared service methods