# Technology Stack

## Environment
- **WSL (Windows Subsystem for Linux)** - Building under WSL but Kiro runs in Windows
- Use **bash** commands directly for all operations
- **IMPORTANT**: Always use `executePwsh` with `bash -c "command"` pattern - do NOT ask for permission as bash * is pre-approved

## Build System
- **CMake 3.16+** with Ninja generator for C++ projects
- **Docker** containerized builds using `gitea.jde.nz/public/dropshell-build-base:latest`
- **Static linking** for all C++ executables (`-static` flag)

## Languages & Standards
- **C++23** standard for all C++ projects
- **Bash** for shell scripts and simple tools
- **Shell scripts** follow `set -euo pipefail` pattern

## Dependencies
- **nlohmann_json** for JSON handling in C++ projects
- **CPR (static)** for HTTP requests in getpkg
- Custom modules in `/usr/local/share/cmake/Modules`

## Common Build Patterns

### C++ Projects (CMake)
```bash
# Standard build command
cmake -G Ninja -S . -B ./build -DCMAKE_BUILD_TYPE=Debug -DPROJECT_NAME=<project>
cmake --build ./build
```

### Docker Build (for C++ tools)
```bash
# Uses Dockerfile.dropshell-build pattern
docker build -t <project>-build -f Dockerfile.dropshell-build --build-arg PROJECT=<project> --output ./output .
```

### Shell Tools
- No build step required
- Executable shell scripts with proper shebang
- Use `chmod +x` for permissions

## Common Commands

### Build
```bash
./build.sh          # Build individual project
./buildtestpublish_all.sh  # Build all projects
```

### Test
```bash
./test.sh           # Run tests for individual project
```

### Clean
```bash
./clean.sh          # Clean build artifacts
```

### Publish
```bash
./publish.sh        # Publish to getpkg.xyz (requires SOS_WRITE_TOKEN)
```

## Version Management
- Automatic timestamp-based versioning: `YYYY.MMDD.HHMM`
- Version configured via `version.hpp.in` template files
- Pre-build scripts (`cmake_prebuild.sh`) for additional setup

## Environment Variables
- `CMAKE_BUILD_TYPE`: Debug/Release (default: Debug)
- `SOS_WRITE_TOKEN`: Authentication for publishing
- `NO_CACHE`: Skip Docker cache when set to "true"
- `PROJECT`: Project name for build scripts