Worklenz Logo

All-in-one open-source project management for efficient teams

License Release Stars Forks Issues Discord

Website β€’ Sign in β€’ Documentation

--- Meet [Worklenz](https://worklenz.com), a powerful, open-source project management platform built to help teams plan smarter, collaborate better, and ship faster. No bloated tools. No unnecessary complexity. Just everything your team needs, in one place. πŸš€ > Worklenz is growing every day. Your bug reports, feature ideas, and feedback shape what we build next. Jump into [Discord](https://discord.com/invite/6Qmm839mgr) or open a GitHub issue - we read everything! ## πŸš€ Getting Started Pick the setup that works best for you:
### ☁️ Worklenz Cloud The fastest way to get started - no setup, no infrastructure. Just sign up at [worklenz.com](https://worklenz.com) and start managing projects in minutes. ### πŸ–₯️ Self-Host Worklenz Prefer full control over your data? Run Worklenz on your own server. | Method | Guide | |--------|-------| | 🐳 Docker (Recommended) | [Quick Docker Setup](#quick-start-docker) | | πŸ”§ Manual Installation | [Manual Dev Setup](#manual-installation) |
## 🌟 Features - **πŸ—ΊοΈ Project Management** - Plan, execute, and monitor projects from start to finish with full visibility across every stage. - **πŸ“‹ Task Management** - Break projects into tasks, set priorities, due dates, and track progress with multiple views (list, board, Gantt). - **πŸ“ Resource Planning** - Allocate the right people to the right tasks at the right time - keep your team balanced and productive. - **πŸ‘₯ Team & Client Collaboration** - Bring your team and clients together in one shared space to align on goals, updates, and deliverables. - **πŸ’° Financial Insights** - Track budgets, costs, and financial performance across projects to keep spending on track and transparent. - **⏱️ Time Tracking** - Log time directly on tasks to understand where your team's hours are actually going. - **πŸ“Š Analytics & Reporting** - Get real-time insights into project health, team workload, and performance. - **πŸ—“οΈ Resource Management** - Plan team capacity, avoid overallocation, and schedule work with a visual scheduler. - **🧩 Project Templates** - Start new projects in seconds using pre-built templates for common workflows. - **🀝 Team Collaboration** - Comment on tasks, share files, and keep all communication in context - right where the work is. - **πŸ“… Planner** - Schedule and visualize project timelines across a cross-project view, with team-wide member utilization at a glance. - **πŸ”„ Import & Export** - Import tasks from a CSV file and export entire projects to CSV for easy data portability.

## πŸ“Έ Screenshots
[![Task Management Task List View](https://tinyurl.com/2cd35sk2)](https://worklenz.com/task-management/) _**Task Management Task List View**_ [![Task Management Kanban View](https://tinyurl.com/253o4fp7)](https://worklenz.com/task-management/) _**Task Management Kanban View**_ [![Resource Management](https://tinyurl.com/228kgt26)](https://worklenz.com/resource-management/) _**Resource Management**_ [![Projects & Tasks Templates](https://tinyurl.com/2are8yqt)](https://worklenz.com/project-templates/) _**Projects & Tasks Templates**_ [![Time Tracking](https://tinyurl.com/28t2gryx)](https://worklenz.com/time-tracking/) _**Time Tracking**_ [![Project Insights](https://tinyurl.com/23lxzxx9)](https://worklenz.com/analytics/) _**Project Insights**_ [![Team Utilization](https://tinyurl.com/2xox9a9v)](https://worklenz.com/team-utilization/) _**Team Utilization**_ [![Scheduler](https://tinyurl.com/239vjndh)](https://worklenz.com/timesheets/) _**Scheduler**_ [![Project Profitability Monitor](https://tinyurl.com/2y4husx3)](https://worklenz.com/project-finance/) _**Project Profitability Monitor**_ [![Client Portal](https://tinyurl.com/2yepbyt2)](https://worklenz.com/client-portal/) _**Client Portal**_

## βš™οΈ Tech Stack [![React](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)](https://reactjs.org/) [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![Express.js](https://img.shields.io/badge/Express.js-404D59?style=for-the-badge&logo=express&logoColor=white)](https://expressjs.com/) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org/) [![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://www.docker.com/) | Layer | Technology | |-------|-----------| | **Frontend** | React + Ant Design | | **Backend** | TypeScript + Express.js | | **Database** | PostgreSQL | | **Storage** | SeaweedFS (S3-compatible) / AWS S3 / Azure Blob | | **Cache** | Redis | | **Proxy** | Nginx | ### Requirements - Node.js version v22.12.0 or newer - PostgreSQL version v15 or newer - Docker and Docker Compose (for containerized setup) ## πŸ“ Documentation Explore Worklenz's [product documentation](https://docs.worklenz.com/en/start/introduction/) to learn about features, setup, and usage and more.
### 🐳 Quick Start (Docker β€” Recommended) The fastest way to get Worklenz running locally with all dependencies included. This setup includes **production-ready features** like nginx reverse proxy, SSL/TLS support, Redis caching, and automated backups. **πŸ“‹ Prerequisites:** - Docker and Docker Compose installed on your system - Git **πŸͺœ Steps:** #### Option 1: Automated Setup (Easiest) ```bash # πŸ“₯ Clone the repository git clone https://github.com/Worklenz/worklenz.git cd worklenz # Run the automated setup script ./quick-setup.sh ``` This script will: - βœ… Create `.env` file with auto-generated security secrets - βœ… Configure URLs based on your domain (localhost or production) - βœ… Set up SSL certificates (self-signed for localhost, Let's Encrypt for production) - βœ… Install and start all services #### Option 2: Manual Setup ```bash # πŸ“₯ Clone the repository git clone https://github.com/Worklenz/worklenz.git cd worklenz # πŸ“„ Copy and configure environment file cp .env.example .env # Edit .env and set required values (DB_PASSWORD, SESSION_SECRET, etc.) # ▢️ Start services (includes PostgreSQL, Redis, SeaweedFS) docker compose up -d ``` **🌐 Access the application:** - **Application**: https://localhost (or http://localhost) - **SeaweedFS S3 API**: http://localhost:8333 **πŸ› οΈ Management:** ```bash # Use the management script for common operations ./manage.sh status # View service status ./manage.sh logs # View logs ./manage.sh backup # Create database backup ./manage.sh stop # Stop all services ./manage.sh start # Start all services ``` **For detailed documentation**, see [DOCKER_SETUP.md](DOCKER_SETUP.md) **Video Guide**: For a visual walkthrough of the local Docker deployment process, check out our [step-by-step video guide](https://www.youtube.com/watch?v=AfwAKxJbqLg). ### πŸ› οΈ Manual Installation (For Development) Use this path to run the services individually, either for development or on a server that does not use Docker. **πŸ“‹ Prerequisites:** - Node.js (version 22.12.0 or higher) - PostgreSQL (version 15 or higher) - An S3-compatible storage service (SeaweedFS is bundled) or Azure Blob Storage **πŸͺœ Steps:** 1. πŸ“₯ Clone the repository: ```bash # Open a terminal and navigate to the directory where you want to clone Worklenz. cd /path/to/your/projects git clone https://github.com/Worklenz/worklenz.git cd worklenz git switch main ``` 2. βš™οΈ Set up environment variables: ```bash cp worklenz-backend/.env.template worklenz-backend/.env # Update the environment variables with your configuration ``` #### Self-hosted features and email The OSS distribution is self-hosted by default. Planner, Finance, and Client Portal are included for every organization; do not change `WORKLENZ_DEPLOYMENT_MODE=self_hosted`. Email invitations use the SMTP relay you configure in `worklenz-backend/.env`: ```env EMAIL_PROVIDER=smtp EMAIL_FROM="Worklenz " SMTP_HOST=smtp.your-provider.com SMTP_PORT=587 SMTP_SECURE=false SMTP_USER=your-smtp-username SMTP_PASSWORD=your-smtp-password CLIENT_PORTAL_HOSTNAME=client.your-domain.com ``` Use `SMTP_SECURE=true` for an implicit-TLS SMTP service (normally port 465). For submission with STARTTLS, use port 587 and leave it `false`. 3. πŸ“¦ Install dependencies: ```bash # Backend dependencies cd worklenz-backend npm install # πŸ–₯️ Frontend dependencies cd ../worklenz-frontend npm install ``` 4. πŸ—„οΈ Set up the database: ```bash # Create a PostgreSQL database named worklenz_db cd worklenz-backend # Execute the SQL setup files in the correct order psql -U your_username -d worklenz_db -f database/sql/0_extensions.sql psql -U your_username -d worklenz_db -f database/sql/1_tables.sql psql -U your_username -d worklenz_db -f database/sql/indexes.sql psql -U your_username -d worklenz_db -f database/sql/4_functions.sql psql -U your_username -d worklenz_db -f database/sql/triggers.sql psql -U your_username -d worklenz_db -f database/sql/3_views.sql psql -U your_username -d worklenz_db -f database/sql/2_dml.sql psql -U your_username -d worklenz_db -f database/sql/5_database_user.sql # Apply versioned migrations after the base schema is initialized npm run migrate:up ``` 5. ▢️ Start the development servers: ```bash # Backend (builds, watches, and auto-restarts) cd worklenz-backend npm run dev # Frontend (in another terminal) cd worklenz-frontend npm run dev ``` 6. 🌐 Access the application at http://localhost:5000 #### Production server (without Docker) For a production server, build the applications and run the backend through a process manager such as systemd or PM2. Do not leave `npm start` running only in an SSH session. ```bash cd worklenz-backend npm run build npm run migrate:up cd ../worklenz-frontend npm run build ``` The frontend production files are written to `worklenz-frontend/build`. Configure your web server to serve that directory and proxy `/api` and `/socket.io` to the backend. Configure the process manager to run `npm start` from the `worklenz-backend` directory. To update a manual deployment, back up the database, then pull the latest `main` branch, rebuild both applications, apply migrations, and restart the backend process: ```bash cd /path/to/your/projects/worklenz git pull --ff-only origin main cd worklenz-backend npm ci npm run build npm run migrate:up cd ../worklenz-frontend npm ci npm run build ``` ## 🚒 Deployment ### 🏠 Local Development For local development, follow the [Quick Start (Docker)](#quick-start-docker) section above. ### 🌍 Production Deployment The new Docker setup includes production-ready features for secure and scalable deployments. #### ⚑ Quick Production Setup ```bash # Clone and navigate to the repository git clone https://github.com/Worklenz/worklenz.git cd worklenz # Run the automated setup ./quick-setup.sh # When prompted, enter your production domain (e.g., worklenz.example.com) # The script will configure SSL with Let's Encrypt automatically ``` #### πŸ”§ Manual Production Setup 1. **Configure environment for your domain:** ```bash cp .env.example .env # Edit .env and set: # - DOMAIN=your-domain.com # - VITE_API_URL=https://your-domain.com # - VITE_SOCKET_URL=wss://your-domain.com # - ENABLE_SSL=true # - LETSENCRYPT_EMAIL=your-email@domain.com # - Generate secure secrets for DB_PASSWORD, SESSION_SECRET, etc. ``` 2. **Point your domain's DNS A record to your server IP** 3. **Start services with SSL:** ```bash docker compose up -d ``` 4. **Access your application at:** https://your-domain.com #### πŸ› οΈ Management Commands ```bash ./manage.sh install # Interactive installation ./manage.sh upgrade # Upgrade to latest version ./manage.sh backup # Create database backup ./manage.sh restore # Restore from backup ./manage.sh ssl # Manage SSL certificates ./manage.sh status # View service status ``` #### πŸ—‚οΈ Deployment Modes - 🟒 **Express Mode** (default): All services bundled (PostgreSQL, Redis, SeaweedFS) ```bash docker compose up -d ``` - πŸ”΅ **Advanced Mode**: Use external services (AWS S3, Azure Blob, external PostgreSQL) ```bash # Set DEPLOYMENT_MODE=advanced in .env docker compose up -d ``` **For complete deployment documentation**, see [DOCKER_SETUP.md](DOCKER_SETUP.md) **Video Guide**: For a complete walkthrough of deploying Worklenz to a remote server, check out our [deployment video guide](https://www.youtube.com/watch?v=CAZGu2iOXQs&t=10s). ## βš™οΈ Configuration ### Environment Variables Worklenz uses a comprehensive environment configuration system. Copy `.env.example` to `.env` and configure according to your needs. **πŸ“‚ Key Configuration Areas:** - **Infrastructure Mode**: `DEPLOYMENT_MODE=express` (all services bundled) or `advanced` (external services) - **OSS Feature Entitlement**: `WORKLENZ_DEPLOYMENT_MODE=self_hosted` enables Planner, Finance, and Client Portal for all organizations - **Domain & URLs**: Configure for localhost or production domain - **Database**: PostgreSQL credentials and connection settings - **Security Secrets**: Session, cookie, and JWT secrets (auto-generated by setup scripts) - **Storage**: SeaweedFS (default), AWS S3, or Azure Blob Storage - **Redis**: Cache configuration (Express mode) - **SSL/TLS**: Let's Encrypt for production, self-signed for localhost - **Backups**: Automated backup retention settings - **Optional Features**: Google OAuth, reCAPTCHA, email notifications **OSS entitlement and email defaults:** - `WORKLENZ_DEPLOYMENT_MODE`: always `self_hosted` in this public distribution; this enables Planner, Finance, and Client Portal for all organizations. - `EMAIL_PROVIDER`: `smtp`; configure `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`, and `EMAIL_FROM` before sending invitations. - `CLIENT_PORTAL_HOSTNAME`: public client-portal hostname used in invitation and password-reset links. **⚑ Quick Configuration:** ```bash # Auto-generate all secrets and configure based on domain ./manage.sh auto-configure # Or manually generate secrets openssl rand -hex 32 # Use for SESSION_SECRET, COOKIE_SECRET, JWT_SECRET ``` **πŸ“Œ Important Variables:** - `DOMAIN`: Your domain (localhost for local testing) - `DEPLOYMENT_MODE`: express or advanced - `WORKLENZ_DEPLOYMENT_MODE`: self_hosted (OSS default; do not change) - `STORAGE_PROVIDER`: s3 (SeaweedFS/AWS) or azure - `ENABLE_SSL`: true/false for SSL/TLS - `BACKUP_RETENTION_DAYS`: Days to keep backups (default: 30) For a complete list of variables with detailed documentation, see `.env.example`. ## πŸͺ£ SeaweedFS Integration The Docker setup uses SeaweedFS as its bundled S3-compatible object storage service. The default bucket is created automatically when the service starts. ### πŸ”§ Working with SeaweedFS SeaweedFS exposes an S3-compatible API on port `8333`. Worklenz uses a private container endpoint for API calls and a separate public bucket URL for attachment links. - **πŸ–₯️ S3 API**: http://localhost:8333 - **Access key**: configured with `S3_ACCESS_KEY_ID` - **Secret key**: configured with `S3_SECRET_ACCESS_KEY` - **πŸͺ£ Default Bucket**: worklenz-bucket (created automatically when the containers start) ### ⬆️ Upgrading from MinIO SeaweedFS uses a different on-disk format. An existing `worklenz_minio_data` Docker volume is intentionally left untouched and is not mounted into SeaweedFS. Copy existing objects through the S3 API before removing the old volume; do not copy the raw volume contents into `worklenz_seaweedfs_data`. ### πŸ› οΈ Backend Storage Configuration The backend is pre-configured to use SeaweedFS with the following settings: ```javascript export const REGION = process.env.S3_REGION || "us-east-1"; export const BUCKET = process.env.S3_BUCKET || "worklenz-bucket"; export const S3_ENDPOINT = process.env.S3_ENDPOINT; export const S3_URL = process.env.S3_PUBLIC_URL || process.env.S3_URL; export const S3_ACCESS_KEY_ID = process.env.S3_ACCESS_KEY_ID || ""; export const S3_SECRET_ACCESS_KEY = process.env.S3_SECRET_ACCESS_KEY || ""; ``` ## πŸ”’ Security Worklenz is built with security in mind: - πŸ” Non-root Docker containers - 🌐 Network isolation (backend is internal-only) - πŸ”‘ SSL/TLS (Let's Encrypt for production, self-signed for localhost) - πŸ›‘οΈ Rate limiting on API and login endpoints - πŸ”’ Security headers (HSTS, CSP, X-Frame-Options, etc.) - πŸ—οΈ Auto-generated secure secrets via `openssl rand -hex 32` Found a security vulnerability? Please **do not** open a public issue. Email us at [info@worklenz.com](mailto:info@worklenz.com) instead. We take all legitimate reports seriously.
## πŸ“ˆ Analytics Worklenz uses Google Analytics, Mixpanel, and Microsoft Clarity to understand how the application is used - helping us prioritize improvements and make smarter product decisions. **What we track:** - πŸ“Š Usage statistics - πŸ—ΊοΈ Page views and navigation patterns - 🧩 Feature usage - πŸ’» Browser and device information **Privacy and consent:** - πŸͺ Microsoft Clarity loads only after consent. The cookie banner's "Reject All" / "Accept" choice is stored in your browser's local storage and applies to Clarity only. - πŸ“ˆ Google Analytics (always) and Mixpanel (when `VITE_MIXPANEL_TOKEN` is set) are initialized without waiting for that choice, so declining the banner does **not** disable them. - πŸ”Ž Analytics data may include identifiers such as cookies, IP-derived location, and device details. Data is handled according to the providers' policies, including [Google's Privacy Policy](https://policies.google.com/privacy).
## 🀝 Contributing We love contributions from the community! Here's how you can help: - πŸ› [Report bugs](https://github.com/Worklenz/worklenz/issues/new) - ✨ [Request features](https://github.com/Worklenz/worklenz/issues/new) - πŸ“– Improve the documentation - πŸ’¬ Share Worklenz with your team or write about it Please read [CONTRIBUTING.md](https://github.com/Worklenz/worklenz/blob/main/CONTRIBUTING.md) before submitting a pull request.
## Contributors Thanks to everyone who has contributed to Worklenz! πŸ’™ [![Contributors](https://contrib.rocks/image?repo=Worklenz/worklenz)](https://github.com/Worklenz/worklenz/graphs/contributors)
## πŸ’™ Community Join the Worklenz community: - πŸ’¬ [Discord Server](https://discord.gg/6Qmm839mgr) - chat with contributors and users - πŸ™ [GitHub Discussions](https://github.com/Worklenz/worklenz/discussions) - longer form conversations - 🐦 Follow updates on our [website](https://worklenz.com) We follow a [Code of Conduct](https://github.com/Worklenz/worklenz/blob/main/CODE_OF_CONDUCT.md) across all community spaces.
## πŸ“„ License Worklenz is open source, released under the [GNU Affero General Public License v3.0](https://github.com/Worklenz/worklenz/blob/main/LICENSE). By contributing to Worklenz, you agree your contributions will be licensed under AGPL v3.0.
---
Built with πŸ’™ by the Worklenz team and amazing contributors around the world.
www.worklenz.com