This guide provides detailed instructions for setting up and running Vesper on your local machine or server.
- Prerequisites
- Quick Start
- Detailed Installation
- Running the Application
- Docker Installation
- Development Setup
- Troubleshooting
Before installing Vesper, ensure you have the following:
- Go 1.24 or higher - Download Go
- Git - Install Git
- SQLite - Included via embedded Go driver (no separate installation needed)
# Check Go version
go version
# Should output: go version go1.24.x or higher
# Check Git
git --versionFor the impatient, here's the fastest way to get started:
Option 1: Using the setup script (recommended)
# Clone the repository
git clone https://github.com/Adjanour/vesper.git
cd vesper
# Run the automated setup script
./setup.sh
# Start the server
make runOption 2: Using Make commands
# Clone the repository
git clone https://github.com/Adjanour/vesper.git
cd vesper
# Set up and run
make setup
make runThe server will be available at http://localhost:8080.
git clone https://github.com/Adjanour/vesper.git
cd vespermake installThis will download all required Go modules.
Create a .env file for custom configuration:
cp .env.example .envEdit .env to customize settings:
PORT=8080
DATA_DIR=./data
DATABASE_PATH=./data/tasks.dbCreate the database and apply migrations:
make migrateThis creates the SQLite database at ./data/tasks.db with the necessary tables.
make buildThis creates a binary named vesper in the project root.
make runOr run the binary directly:
./vesperThe server will start and listen on port 8080. You should see:
2026/02/07 19:17:00 Connected to database
2026/02/07 19:17:00 Server starting on :8080
Test the health endpoint:
curl http://localhost:8080/api/healthExpected response:
{"status":"ok"}# Build and run
make run
# Run in development mode with hot reload (requires Air)
make dev
# Run with custom options
PORT=9000 ./vesper# Build first
go build -o vesper ./cmd/server
# Run
./vesper# Run in background (Linux/macOS)
./vesper &
# Or use nohup
nohup ./vesper > vesper.log 2>&1 &
# Check if running
ps aux | grep vesper# Build the Docker image
make docker-build
# Run the container
make docker-runOr use Docker commands directly:
# Build image
docker build -t vesper:latest .
# Run container
docker run -p 8080:8080 -v $(pwd)/data:/data vesper:latestCreate a docker-compose.yml:
version: '3.8'
services:
vesper:
build: .
ports:
- "8080:8080"
volumes:
- ./data:/data
environment:
- PORT=8080
restart: unless-stoppedRun with:
docker-compose up -d-
Air (for hot reload):
go install github.com/cosmtrek/air@latest
-
golangci-lint (optional, for linting):
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
make devThis will:
- Watch for file changes
- Automatically rebuild and restart the server
- Show build errors in real-time
make help # Show all available commands
make build # Build the binary
make run # Build and run
make clean # Clean build artifacts
make test # Run tests
make migrate # Run database migrations
make migrate-down # Rollback migrations
make fmt # Format code
make vet # Run go vet
make lint # Run all linters
make setup # Complete project setupIf port 8080 is already in use:
# Find the process using port 8080
lsof -i :8080 # macOS/Linux
netstat -ano | findstr :8080 # Windows
# Use a different port
PORT=9000 ./vesperIf you get a "database is locked" error:
# Stop all running instances
pkill vesper
# Remove database lock files
rm -f ./data/tasks.db-shm ./data/tasks.db-wal
# Restart the application
make runIf you encounter build errors:
# Clean and rebuild
make clean
go clean -cache
make install
make buildIf migrations fail:
# Remove the database and start fresh
rm -f ./data/tasks.db
# Run migrations again
make migrateIf you get permission errors:
# Make the binary executable
chmod +x vesper
# Ensure data directory has proper permissions
chmod 755 data- Use PowerShell or Git Bash for running commands
- The
.air.tomlfile has Windows-specific paths (already configured) - Use
./vesper.exeinstead of./vesper
- Ensure Go is added to your PATH
- You may need to allow the binary in Security & Privacy settings
- Works out of the box on most distributions
- For systemd service setup, see below
Create a systemd service file /etc/systemd/system/vesper.service:
[Unit]
Description=Vesper Time Block Planner
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/vesper
ExecStart=/opt/vesper/vesper
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.targetEnable and start:
sudo systemctl daemon-reload
sudo systemctl enable vesper
sudo systemctl start vesper
sudo systemctl status vesperAfter installation:
- Read the API Documentation to learn about available endpoints
- Try the example workflow in the API docs
- Check out the Contributing Guide if you want to contribute
- Star the repository if you find it useful!
If you encounter issues not covered here:
- Check existing GitHub Issues
- Open a new issue with details about your problem
- Include your OS, Go version, and error messages
Installation complete! Start building your time blocks! 🎯