Skip to content

Repository files navigation

πŸ“ Open-Source Task & Bug Tracking - Designed for Simplicity.

A web-based Task, Change Request (CR), and Bug Management System built with ASP.NET Core MVC (.NET 8), using Microsoft SQL Server as the database.

This system helps teams manage tasks, track bugs, handle change requests, and organize projects efficiently.

CI License Issues Stars .NET

πŸš€ Live Demo

Experience Taskist in action: πŸ‘‰ demo.taskist.org

πŸ“š Documentation

Looking for detailed setup guides, module explanations, and screenshots?
Check out the complete Taskist Documentation Site below πŸ‘‡

πŸ”— Visit: πŸ‘‰ docs.taskist.org

πŸ’¬ Join the Discussion on Zulip

Stay connected with the Taskist community on Zulip β€” our hub for collaboration, support, and ideas.

Chat on Zulip

Channel Purpose Link
πŸ“’ General General discussions, announcements, and community updates. Join #general
πŸ’» Development Development discussions, code reviews, and architecture planning. Join #dev
πŸ› οΈ Support Get help setting up Taskist, report bugs, or troubleshoot issues. Join #support

πŸ“ Tip:
You can join directly with your GitHub or email account β€” no setup required.
All discussions are public and searchable to help new contributors learn quickly.

πŸ“‘ Table of Contents

  1. ✨ Features
  2. πŸ› Master Modules
  3. ⚑ Transaction Modules
  4. πŸ—‚ Module Hierarchy
  5. πŸ›  Technology Stack
  6. 🐳 Quick Start with Docker
  7. πŸš€ Local Development Setup
  8. βš™οΈ Configuration
  9. πŸ’Ύ Database Migrations
  10. πŸ” Security
  11. πŸ› GitHub Issues & Contribution
  12. πŸ“„ License

✨ Features

  • πŸ‘€ User authentication and authorization with roles & permissions.
  • 🏒 Client and project management.
  • 🐞 Task, Change Request, and Bug tracking with status, severity, and reporter.
  • πŸ“† Sprint and backlog management.
  • 🧩 Modular system design with configurable menus and settings.
  • πŸ“Š Full audit and tracking for project activities.

πŸ› Master Modules

Module Description
πŸ‘€ User System users who can create or manage tasks.
πŸ”‘ User Roles & Permissions Define roles (Admin, Manager, Developer, Tester) and access rights.
🏒 Client Organizations or clients associated with projects.
πŸ“ Project Projects under a client.
🧩 Module Main functional modules of a project.
πŸ”Ή SubModule Sub-divisions under each module.
πŸ“ Reporter Person reporting a task, bug, or CR.
⚠️ Severity Priority/impact of tasks/bugs (High, Medium, Low).
πŸ”„ Status Current status of a task (Open, In Progress, Closed, etc.).
πŸ—‚ TaskType Type of work (Task, Bug, CR).
πŸ“œ Menu Configurable navigation menu items.
βš™οΈ Setting Application or system-wide settings.

⚑ Transaction Modules

Module Description
πŸ“‹ Backlog Manage pending tasks, CRs, and bugs.
πŸƒ Sprint Plan, track, and close sprints.

πŸ—‚ Module Hierarchy

Master Modules
β”œβ”€ User
β”œβ”€ User Roles & Permissions
β”œβ”€ Client
β”œβ”€ Project
β”œβ”€ Module
β”‚  └─ SubModule
β”œβ”€ Reporter
β”œβ”€ Severity
β”œβ”€ Status
β”œβ”€ TaskType
β”œβ”€ Menu
└─ Setting

Transaction Modules
β”œβ”€ Backlog
└─ Sprint

πŸ’‘ Note: Master modules define core entities. Transaction modules handle activities/records based on master data.

πŸ›  Technology Stack

  • Backend: ASP.NET Core MVC (.NET 8)
  • Frontend: Razor Views, Bootstrap
  • Database: Microsoft SQL Server 2019+
  • ORM: Entity Framework Core 8
  • Background jobs: Hangfire
  • Validation: FluentValidation
  • Containers: Docker & Docker Compose

🐳 Quick Start with Docker

The fastest way to try Taskist. This starts SQL Server, applies migrations, seeds reference data and runs the app.

Prerequisites: Docker Desktop (or Docker Engine with Compose v2).

git clone https://github.com/Taskist/taskist.git
cd taskist

# 1. Create your environment file
cp .env.example .env

# 2. Generate an encryption key and paste it into .env
openssl rand -base64 32

# 3. Start everything
docker compose up -d

Open http://localhost:8080 and sign in:

Email Password
admin@taskist.org Admin@12345

Warning

Change this password immediately after the first sign-in, and never expose the seeded account on a reachable network. Taskist upgrades the stored hash to PBKDF2 automatically the first time this account signs in.

Useful commands:

docker compose logs -f web     # follow application logs
docker compose down            # stop, keeping data
docker compose down -v         # stop and delete all data

Want sample projects and tasks to explore? Set SEED_DUMMY_DATA=true in .env before the first start.

πŸš€ Local Development Setup

Prerequisites: .NET 8 SDK and SQL Server (Express or LocalDB is fine).

  1. Clone and restore:
git clone https://github.com/Taskist/taskist.git
cd taskist
dotnet restore src/Taskist.sln
  1. Configure your connection string and encryption key. appsettings.Development.json is git-ignored, so it is safe for local values:
{
  "ConnectionStrings": {
    "AppContext": "Server=.\\SQLEXPRESS;Database=Taskist;Integrated Security=True;TrustServerCertificate=True;"
  },
  "Security": {
    "EncryptionKey": "a-local-development-key-at-least-32-chars"
  }
}
  1. Create the schema:
cd src/Libraries/Taskist.Data
dotnet ef database update --startup-project ../../Presentation/Taskist.Web
  1. Seed reference data by running the scripts in sql script/mssql/ in order:
Script Required Contents
1_defaults.sql βœ… Menus, roles, permissions, language and the administrator account
2_locale_resource.sql βœ… English (India) translations
3_dummy_data.sql Optional Sample clients, projects and tasks for evaluation

Each script runs in a transaction and is safe to re-run β€” rows are matched on their business key, so nothing is duplicated.

  1. Run:
cd src/Presentation/Taskist.Web
dotnet run

Browse to the URL shown in the console (typically https://localhost:7169).

βš™οΈ Configuration

Taskist reads configuration from appsettings.json, environment variables prefixed with TASKIST_, and user-secrets. Environment variables win, so they are the preferred way to supply secrets.

Nested keys use a double underscore: Security:EncryptionKey becomes TASKIST_Security__EncryptionKey.

Required

The application will not start without these.

Setting Environment variable Description
ConnectionStrings:AppContext TASKIST_ConnectionStrings__AppContext SQL Server connection string
Security:EncryptionKey TASKIST_Security__EncryptionKey Minimum 32 characters, unique per deployment. Generate with openssl rand -base64 32

Optional

Setting Default Description
Security:MaxFailedAccessAttempts 5 Failed sign-ins before an account locks
Security:LockoutMinutes 15 How long the lockout lasts
Security:RequireHttpsCookies true Restrict cookies to HTTPS. Set false only when deliberately serving plain HTTP
Sentry:Enabled false Enable Sentry error reporting

Important

Security:RequireHttpsCookies defaults to true, so sign-in will not work over plain HTTP. The Docker Compose stack sets it to false because it serves HTTP on localhost. Set it back to true once you are behind TLS.

πŸ’Ύ Database Migrations

Run EF Core commands from the src/Libraries/Taskist.Data folder:

cd src/Libraries/Taskist.Data

# apply pending migrations
dotnet ef database update --startup-project ../../Presentation/Taskist.Web

# add a migration after changing an entity
dotnet ef migrations add YourMigrationName --startup-project ../../Presentation/Taskist.Web

# remove the last migration (only if not yet applied)
dotnet ef migrations remove --startup-project ../../Presentation/Taskist.Web

Upgrading an existing install? See UPGRADING.md β€” the security hardening release requires new configuration and a migration.

πŸ” Security

To report a vulnerability, please follow SECURITY.md rather than opening a public issue.

Deployment checklist:

  • Serve over HTTPS and keep Security:RequireHttpsCookies set to true
  • Set a unique Security:EncryptionKey
  • Change the default admin@taskist.org password (Admin@12345)
  • Use a least-privilege SQL account rather than sa
  • Back up App_Data/DataProtectionKeys β€” losing it invalidates every session

πŸ› GitHub Issues & Contribution

New contributors are very welcome. CONTRIBUTING.md covers environment setup, coding conventions and what CI expects.

Raising an Issue

Open a new issue and pick a template. Bug reports ask for reproduction steps, your version and how you deploy Taskist β€” that detail is usually what decides whether a bug can be fixed.

Found a security vulnerability? Please report it privately following SECURITY.md instead of opening an issue.

Setup questions are usually answered faster on Zulip.

Submitting a Pull Request

For anything beyond a small fix, please discuss it first via an issue or on Zulip, so your time is not spent on something that does not fit the project's direction.

# 1. Fork, then branch
git checkout -b feature/YourFeatureName

# 2. Make your changes, then verify what CI will check
dotnet build src/Taskist.sln
dotnet test src/Taskist.sln

# 3. Push and open a pull request against main
git push origin feature/YourFeatureName

Code guidelines

  • Follow C# naming conventions and match the structure of the file you are editing
  • Keep methods short and modular
  • Use EF Core migrations for schema changes β€” CI fails if the model changes without one
  • Add tests for authentication, permissions, data access or file upload changes

By participating, you agree to uphold our Code of Conduct.

πŸ“„ License

This project is licensed under the MIT License – see the LICENSE file for details.

πŸ’– Open Source Sponsors & Partners

We gratefully acknowledge the generous support of the following providers who offer free licenses or services to our open-source project:

Sentry Atlassian Confluence MonsterASP.Net Zulip - Organized team chat app Create and publish beautiful documentation

🌟 Support the Project

If you find Taskist helpful, please consider supporting it! ❀️ Your support helps keep the project growing and maintained.

πŸͺ™ Ways to Support

  • ⭐ Star this repository on GitHub to show appreciation
  • πŸͺ™ Share it with other developers or teams
  • β˜• Buy Me a Coffee to support ongoing development

Buy Me A Coffee