Deltabadger

deltabadger

An opinionated dollar-cost averaging bot as a private server

Deltabadger 1.6.9 · Feb 11, 2026 Try now →

Contributors:

janklosowski guillemap matkaczmarek balontomasz witoldkesek grzegorz-wcislo freefakesmile kshalot mrrazahussain RomanGirej rafalcymerys itsitesdev aberracja

Auto-DCA for crypto. Automate your Dollar Cost Averaging strategy across multiple exchanges. As a service, Deltabadger helped users invest over $72 million into Bitcoin and other digital assets. Now it's free and open-source!

Quick Start

Install Docker Desktop for your operating system, and make sure it's running, then run Deltabadger with a single command:

docker run -d --name deltabadger -p 3737:3000 -v deltabadger_data:/app/storage ghcr.io/deltabadger/deltabadger:latest standalone

That's it! Access the app at http://localhost:3737.

Running with Tauri (macOS and Linux)

  1. Download release.
  2. Run ./setup.sh first.
  3. Run ./start.sh to use the app.

On Mac, if you close the app, it continues working in the background. You can find it on the topbar.

Scripts should work on Linux as well, but have not been tested.

For Windows, the best way at the moment is to use Docker.

Are you a developer? Jump on the Telegram channel and help build the best DCA bot out there.

Running with Docker Compose

Alternative to the single command above, using Docker Compose:

  1. Download docker-compose.yml:
curl -O https://raw.githubusercontent.com/deltabadger/deltabadger/main/docker-compose.yml
  1. Start the app:
docker compose up -d

First run downloads the pre-built image. Secrets are auto-generated. Once complete, access the app at http://localhost:3737.

  1. Optional: Custom configuration

Create .env.docker to override defaults (copy from .env.docker.example for reference):

curl -O https://raw.githubusercontent.com/deltabadger/deltabadger/main/.env.docker.example
cp .env.docker.example .env.docker
# Edit .env.docker as needed

Updating to a New Version

First, stop and remove the old container:

docker stop deltabadger && docker rm deltabadger

Then pull the latest image and run:

docker pull ghcr.io/deltabadger/deltabadger:latest
docker run -d --name deltabadger -p 3737:3000 -v deltabadger_data:/app/storage ghcr.io/deltabadger/deltabadger:latest standalone

Docker Compose:

docker compose pull
docker compose up -d

Docker Commands Reference

Command Description
docker compose up -d Start in background
docker compose down Stop all containers
docker compose pull Pull latest image
docker compose logs -f View logs (Ctrl+C to exit)
docker compose logs -f web View web server logs only

Starting Fresh

If something goes wrong and you want to reset everything:

docker compose down
docker volume rm deltabadger_storage deltabadger_logs

Note: This deletes all data. Volume names may vary — run docker volume ls to see all volumes.

Production Notes

Secrets are auto-generated on first run and stored in /app/storage/.secrets (inside the volume). These persist across container restarts and upgrades.

For production deployments:

Building from Source

If you prefer to build the image locally instead of using the pre-built one:

docker compose -f docker-compose.build.yml up -d --build

Development Setup

Requirements

Use asdf or your preferred version manager.

1. Install dependencies

bin/setup

2. Database

bundle exec rails db:prepare

3. Start the app

bin/dev

This starts the Rails server with Solid Queue (background jobs) running in-process via Puma.

Alternatively, run services separately:

Terminal 1 — Rails (with background jobs):

rails s

Terminal 2 — JavaScript bundler (optional, for live reloading):

yarn build --watch

Running tests

bundle exec rspec

Auto-run tests on file changes:

bundle exec guard -c

Troubleshooting

Docker: Container won't start

Check logs for errors:

docker compose logs web

Common fixes:

Docker: Port already in use

Another app is using port 3737. Either stop that app, or change the port mapping. For example, to use port 4000:

Single command: Change -p 3737:3000 to -p 4000:3000

Docker Compose: Set in .env.docker:

APP_PORT=4000

macOS: fork() crash (development)

If you see this error when loading exchanges:

objc[86427]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.

Add to your shell config:

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

License

AGPL-3.0