Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Development

⚠️ Warning: Docs for develop branch

This guide outlines the current development process and is intended for contributing to the develop branch.
It may differ from the steps used in the latest stable release.

This guide outlines the steps necessary to set up your development environment for TaskMinder. This includes installing redis, PostgreSQL, bun with optional setup for ClamAV, Ghostscript and mdbook (requires rust and cargo).

⚠️ Warning: License Notice

Please make sure to review our license before contributing to the project!

ℹ️ Info

Windows is currently not supported, as the primary development and testing of this tool are carried out on Linux and macOS platforms. This may result in compatibility issues or unexpected behavior when attempting to run the server on Windows.


Installing Redis and PostgreSQL

Recommended versions: PostgreSQL 18.1+ and Redis v8.6+ (Redis Open Source).

Linux (Ubuntu / Debian)

Follow this guide to install Redis Open Source: Install Redis on Linux. Return here once complete.

Download PostgreSQL here: Download page of PostgreSQL. Return here once installed.

Don’t forget to start and enable both services to run at system startup:

# Redis setup is covered in the installation guide
sudo systemctl enable redis-server
sudo systemctl start redis-server
# PostgreSQL setup – this part is often not included in guides
sudo systemctl enable postgresql
sudo systemctl start postgresql
macOS

Follow this guide to install Redis Open Source: Install Redis on MacOS. Return here once finished.

Download PostgreSQL here: Download page of PostgreSQL. Return here once finished.

Service startup instructions are included in the respective guides.

GitHub Codespaces

Since Codespaces run on Ubuntu, the setup is similar to the Linux instructions. Auto-starting services on boot is skipped to save memory and runtime.

Install and start Redis:

sudo apt-get update
sudo apt-get install redis
sudo service redis-server start

Install and start PostgreSQL:

sudo apt-get update
sudo apt-get -y install postgresql
sudo service postgresql start

Installing Bun

Bun is required for this project.

To check if it’s already installed, run:

bun --version

You should see at least Bun 1.3.12 (last checked: April 10th, 2026).

If not installed, retrieve the download instructions from the Bun Download Page. For Github Codespaces, follow the npm instructions under the Mac/Linux Tab.


Installing ClamAV and Ghostscript - optional

This step installs the tools that scan files uploaded to the server. This is optional for development environments, as you typically wouldn’t enable scanning in that context. However, if you’re developing or testing upload functionality, please install these tools to ensure your code changes work correctly with the scanning pipeline.

Linux (Ubuntu / Debian) and Github Codespaces

Install ClamAV via apt package manager

sudo apt install clamav clamav-daemon -y
  • clamav: the command-line scanner (clamscan)
  • clamav-daemon: runs the clamd background service for faster scanning

Stop the daemon before updating virus definitions

# Github Codespaces
sudo service clamav-freshclam stop
# Ubuntu/Debian (Linux)
sudo systemctl stop clamav-freshclam

Update virus definitions

# fetches the latest virus signatures from ClamAV's servers
sudo freshclam

Start services

# Github Codespaces
sudo service clamav-freshclam start
sudo service clamav-daemon start
# Ubuntu/Debian (Linux)
sudo systemctl enable clamav-freshclam
sudo systemctl start clamav-freshclam
sudo systemctl enable clamav-daemon
sudo systemctl start clamav-daemon

Install Ghostscript via apt package manager

sudo apt install ghostscript -y
gs --version

Ghostscript should at least return version 10.02.1 (last checked: November 7th, 2025).

macOS

Install ClamAV via Homebrew

brew install clamav

Verify the installation

brew list clamav
clamscan --version

You should see binaries like clamd, clamdscan, clamscan, and configuration files in /opt/homebrew/etc/clamav/. The version of ClamAV should at least be 1.5.1 (last checked: January 5th, 2026).

Copy sample configuration files

ClamAV ships with sample configuration files that you’ll need to customize:

cd /opt/homebrew/etc/clamav
cp clamd.conf.sample clamd.conf
cp freshclam.conf.sample freshclam.conf

Configure clamd.conf

nano /opt/homebrew/etc/clamav/clamd.conf

Edit or uncomment these lines:

# Where the database files are stored
DatabaseDirectory /opt/homebrew/var/lib/clamav
    
# Temporary directory
TemporaryDirectory /tmp
    
# Log file location
LogFile /opt/homebrew/var/log/clamav/clamd.log
LogFileMaxSize 5M
    
# Local socket (used by clamdscan)
LocalSocket /opt/homebrew/var/run/clamav/clamd.sock
FixStaleSocket yes
    
# Run as daemon
Foreground no

Configure freshclam.conf

nano /opt/homebrew/etc/clamav/freshclam.conf

Edit these lines:

DatabaseDirectory /opt/homebrew/var/lib/clamav
UpdateLogFile /opt/homebrew/var/log/clamav/freshclam.log
DatabaseOwner _clamav
Checks 12

Create required directories

sudo mkdir -p /opt/homebrew/var/lib/clamav
sudo mkdir -p /opt/homebrew/var/log/clamav
sudo mkdir -p /opt/homebrew/var/run/clamav
sudo chown -R $(whoami) /opt/homebrew/var/{lib,log,run}/clamav

Download virus definitions

freshclam

This downloads the latest virus definitions to /opt/homebrew/var/lib/clamav.

Start the ClamAV daemon

brew services start clamav

Note: Homebrew services don’t automatically update virus definitions. Remember to run freshclam regularly to keep your definitions up-to-date.

Install Ghostscript via Homebrew

brew install ghostscript
gs --version

Ghostscript should at least return version 10.06.0 (last checked: January 5th, 2026).


Clone Repository and Install Bun Packages

Visit the repo at https://github.com/TaskMinder/TaskMinder and fork it.

Then, on your local machine, choose a directory and run:

git clone https://github.com/YOUR_GITHUB_USERNAME/TaskMinder.git
cd TaskMinder

Replace YOUR_GITHUB_USERNAME with your actual GitHub username.

Install all dependencies:

bun install

Initialize the Database

Before using the database, you need to log into the PostgreSQL terminal (psql) and create a database. It’s also recommended to change the default postgres password.

Replace your_db_name with your actual database name.

Linux (Ubuntu / Debian)
sudo -u postgres psql
\password
CREATE DATABASE your_db_name;
macOS
psql postgres
\password
CREATE DATABASE your_db_name;
GitHub Codespaces
sudo su postgres
psql postgres
\password
CREATE DATABASE your_db_name;

Create the .env File

To securely manage credentials, create a .env file in the root directory of your project. Use the .env.example file located in the root folder as a reference.


Setup mdbook (documentation) - optional

Follow the official guide: Installation mdbook. mdbook requires rust and cargo.


Applying database changes

Run bunx prisma migrate dev to apply schema changes from previously pulled commits to your local database. You should also run this command during development if the schema has been modified.

If you make changes to the schema while developing—especially on a feature branch—don’t forget to generate a migration file. Otherwise, your changes might be lost or overwritten when switching branches (e.g., to develop or main).


Start the Server

Run this command to compile the typescript code and start the development server:

bun run build
bun run dev

Notes:

  • You can manually compile the code by running bun run build, or use bun run build:fe and bun run build:be to compile the frontend and backend separately. After building, start the server with bun run dev.

  • We use linting/formatting tools to maintain code quality. To use ESLint and Prettier (frontend only) on this project, simply run: bun run lint (NOT bun run lint .!).

  • When updating the Prisma schema, remember to run bunx prisma generate to regenerate the client and TypeScript types in node_modules/. Before committing your changes, make sure to run bunx prisma migrate dev to create and apply the necessary migration files to your local database—skipping this step may result in broken or inconsistent code.