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.
Experience Taskist in action: π demo.taskist.org
Looking for detailed setup guides, module explanations, and screenshots?
Check out the complete Taskist Documentation Site below π
π Visit: π docs.taskist.org
Stay connected with the Taskist community on Zulip β our hub for collaboration, support, and ideas.
| 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.
- β¨ Features
- π Master Modules
- β‘ Transaction Modules
- π Module Hierarchy
- π Technology Stack
- π³ Quick Start with Docker
- π Local Development Setup
- βοΈ Configuration
- πΎ Database Migrations
- π Security
- π GitHub Issues & Contribution
- π License
- π€ 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.
| 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. |
| 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. |
| Module | Description |
|---|---|
| π Backlog | Manage pending tasks, CRs, and bugs. |
| π Sprint | Plan, track, and close sprints. |
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.
- 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
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 -dOpen http://localhost:8080 and sign in:
| 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 dataWant sample projects and tasks to explore? Set SEED_DUMMY_DATA=true in .env before the first start.
Prerequisites: .NET 8 SDK and SQL Server (Express or LocalDB is fine).
- Clone and restore:
git clone https://github.com/Taskist/taskist.git
cd taskist
dotnet restore src/Taskist.sln- Configure your connection string and encryption key.
appsettings.Development.jsonis 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"
}
}- Create the schema:
cd src/Libraries/Taskist.Data
dotnet ef database update --startup-project ../../Presentation/Taskist.Web- 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.
- Run:
cd src/Presentation/Taskist.Web
dotnet runBrowse to the URL shown in the console (typically https://localhost:7169).
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.
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 |
| 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.
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.WebUpgrading an existing install? See UPGRADING.md β the security hardening release requires new configuration and a migration.
To report a vulnerability, please follow SECURITY.md rather than opening a public issue.
Deployment checklist:
- Serve over HTTPS and keep
Security:RequireHttpsCookiesset totrue - Set a unique
Security:EncryptionKey - Change the default
admin@taskist.orgpassword (Admin@12345) - Use a least-privilege SQL account rather than
sa - Back up
App_Data/DataProtectionKeysβ losing it invalidates every session
New contributors are very welcome. CONTRIBUTING.md covers environment setup, coding conventions and what CI expects.
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.
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/YourFeatureNameCode 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.
This project is licensed under the MIT License β see the LICENSE file for details.
We gratefully acknowledge the generous support of the following providers who offer free licenses or services to our open-source project:
|
|
|
|
|
If you find Taskist helpful, please consider supporting it! β€οΈ Your support helps keep the project growing and maintained.
- β Star this repository on GitHub to show appreciation
- πͺ Share it with other developers or teams
- β Buy Me a Coffee to support ongoing development
