selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

Windshift logo

Self-host Windshift

v0.9.1

Self-hosted Jira alternative for team work management

BetaOpen SourceAGPL-3.0
Updated4 days ago
LanguageGo
Setup difficultyModerate
MobileResponsive
ThemeDark mode
Stars
383
RAM
512 MiB minimum process memory
Ports
8080 (HTTP server), 23234 (SSH TUI server (optional))
Docker
ghcr.io/windshiftapp/windshift
Install with Docker

What is Windshift?

Should you self-host Windshift?

Windshift scores 50/100 on selfhost.directory (how scoring works) and ranks #31 of 45 in Project Management. It has 383 GitHub stars.

It shipped 10 stable releases in the past year. The latest, v0.9.1, came out on 21 October 2026. New versions land roughly every 9 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in Go.

Its closest alternative on selfhost.directory is Plane (86/100, 61 588 stars). It scores higher overall, so compare the two before you pick. See Windshift vs Plane side by side.

Features

  • Asset/CMDB register
  • Automation Rules
  • Custom fields and screens
  • Custom workflows and statuses
  • Git integration (GitHub, GitLab, Gitea, Forgejo)
  • Jira importer
  • JQL-style query language (WQL)
  • Kanban boards and backlogs
  • Knowledge Base
  • REST API
  • Service management (SLAs, customer portal)
  • Sprints and iterations
  • Test Management
  • Time Tracking
  • Work item hierarchy (epics, stories, sub-tasks)

Windshift README

How to install Windshift

Install Windshift with Docker

Docker or Podman
Environment variables
BASE_URL, SSO_SECRET, WEBAUTHN_RP_ID, PORT, USE_PROXY, DB_PATH, ATTACHMENT_PATH, POSTGRES_CONNECTION_STRING, etc.

docker run -d
--name windshift
-p 8080:8080
--tmpfs /tmp:exec,size=64M
-v windshift-data:/data
-e BASE_URL=http://localhost:8080
-e WEBAUTHN_RP_ID=localhost
-e SSO_SECRET=$(openssl rand -hex 32)
ghcr.io/windshiftapp/windshift:latest

Local trial only; generates random secret each run. For production, use Docker Compose with pinned version.

How to configure Windshift

  • AI_PROMPTS_DIR/data/prompts in DockerDirectory for custom AI prompt overrides.

    Directory for custom AI prompt overrides.

  • ALLOWED_HOSTSderived from BASE_URLComma-separated browser origins for CORS, CSRF, WebAuthn, and SSO redirect validation.

    Comma-separated browser origins for CORS, CSRF, WebAuthn, and SSO redirect validation.

  • ALLOW_INSECURE_HTTPfalseAllow browser access via plain http on non-localhost origins. Trusted LANs and testing only.

    Allow browser access via plain http on non-localhost origins. Trusted LANs and testing only.

    values: true, false

  • ALLOW_LOCAL_CONNECTIONStrueAllow server-side HTTP clients to reach local, loopback, and private-network addresses.

    Allow server-side HTTP clients to reach local, loopback, and private-network addresses.

    values: true, false

  • ATTACHMENT_PATHDirectory for uploaded file attachments. Use a persistent volume in Docker.

    Directory for uploaded file attachments. Use a persistent volume in Docker.

  • BASE_URLPublic URL users access Windshift from. Required for correct links, SSO redirects, WebAuthn, calendar feeds, and runners.

    Public URL users access Windshift from. Required for correct links, SSO redirects, WebAuthn, calendar feeds, and runners.

  • CODING_AGENT_ENABLEDfalseSet to true to enable the coding-agent system.

    Set to true to enable the coding-agent system.

    values: true, false

  • CODING_AGENT_WS_API_URLBASE_URL + /apiAPI URL agent containers use to reach Windshift.

    API URL agent containers use to reach Windshift.

  • DB_PATHwindshift.dbSQLite database file path.

    SQLite database file path.

  • DB_TYPESet to postgres to build a connection string from the POSTGRES_* variables.

    Set to postgres to build a connection string from the POSTGRES_* variables.

    values: postgres

  • DISABLE_PLUGINSfalseDisable the plugin system entirely.

    Disable the plugin system entirely.

    values: true, false

  • ENABLE_ADMIN_FALLBACKfalseEnable password-based admin fallback when SSO is restrictive or unavailable.

    Enable password-based admin fallback when SSO is restrictive or unavailable.

    values: true, false

  • JIRA_CAPTURE_PAYLOADSDirectory for Jira import request/response payload debugging.

    Directory for Jira import request/response payload debugging.

  • LLM_ENDPOINTLegacy/fallback OpenAI-compatible inference endpoint.

    Legacy/fallback OpenAI-compatible inference endpoint.

  • LLM_PROVIDERS_FILEPath to a custom LLM provider catalog JSON file.

    Path to a custom LLM provider catalog JSON file.

  • LOG_FORMATtextLog format: text, json, or logfmt.

    Log format: text, json, or logfmt.

    values: text, json, logfmt

  • LOG_LEVELinfoLog level: debug, info, warn, or error.

    Log level: debug, info, warn, or error.

    values: debug, info, warn, error

  • MAX_READ_CONNS30Read connection pool size.

    Read connection pool size.

  • MAX_WRITE_CONNS1SQLite write connection pool size.

    SQLite write connection pool size.

  • MCP_ENABLEDfalseEnable the MCP server at /mcp.

    Enable the MCP server at /mcp.

    values: true, false

  • PLUGIN_DIRPrimary plugin directory.

    Primary plugin directory.

  • PLUGIN_DIRSAdditional plugin directories, comma-separated.

    Additional plugin directories, comma-separated.

  • PORT8080HTTP server port inside the container/process.

    HTTP server port inside the container/process.

  • POSTGRES_CONNECTION_STRINGPostgreSQL connection string. If set, PostgreSQL is used instead of SQLite.

    PostgreSQL connection string. If set, PostgreSQL is used instead of SQLite.

  • POSTGRES_DBwindshiftDatabase name for generated PostgreSQL connection strings.

    Database name for generated PostgreSQL connection strings.

  • POSTGRES_HOSTpostgresHost for generated PostgreSQL connection strings.

    Host for generated PostgreSQL connection strings.

  • POSTGRES_PASSWORDPassword for generated PostgreSQL connection strings.

    Password for generated PostgreSQL connection strings.

  • POSTGRES_PORT5432Port for generated PostgreSQL connection strings.

    Port for generated PostgreSQL connection strings.

  • POSTGRES_SSLMODEdisableTLS mode for a connection built from the split POSTGRES_* variables.

    TLS mode for a connection built from the split POSTGRES_* variables.

    values: disable, allow, prefer, require, verify-ca, verify-full

  • POSTGRES_USERwindshiftUser for generated PostgreSQL connection strings.

    User for generated PostgreSQL connection strings.

  • SESSION_IP_BINDINGlogHandle a client-IP change on an existing session. Use log, strict, or off.

    Handle a client-IP change on an existing session. Use log, strict, or off.

    values: log, strict, off

  • SESSION_SECRETLegacy fallback if SSO_SECRET is unset.

    Legacy fallback if SSO_SECRET is unset.

  • SSH_ENABLEDfalseEnable the SSH TUI server.

    Enable the SSH TUI server.

    values: true, false

  • SSH_HOSTlocalhostSSH server bind address.

    SSH server bind address.

  • SSH_PORT23234SSH server port.

    SSH server port.

  • SSO_SECRETSession-cookie and SSO-state signing/encryption secret. Generate once with openssl rand -hex 32 and keep it stable.

    Session-cookie and SSO-state signing/encryption secret. Generate once with openssl rand -hex 32 and keep it stable.

  • TLS_SKIP_VERIFYfalseDisable certificate-chain and hostname verification for outbound HTTPS, SMTP, IMAP, and LDAP connections.

    Disable certificate-chain and hostname verification for outbound HTTPS, SMTP, IMAP, and LDAP connections.

    values: true, false

  • USE_PROXYfalseTrust forwarded protocol/client-IP headers from reverse proxies.

    Trust forwarded protocol/client-IP headers from reverse proxies.

    values: true, false

  • VAPID_PRIVATE_KEYauto-generatedWeb Push (VAPID) private key.

    Web Push (VAPID) private key.

  • VAPID_PUBLIC_KEYauto-generatedWeb Push (VAPID) public key.

    Web Push (VAPID) public key.

  • VAPID_SUBJECTBASE_URLContact URI or mailto: for the push subscription.

    Contact URI or mailto: for the push subscription.

  • WEBAUTHN_RP_IDBASE_URL hostWebAuthn relying-party ID. Use a hostname, or a full HTTP or HTTPS URL from which Windshift extracts the hostname.

    WebAuthn relying-party ID. Use a hostname, or a full HTTP or HTTPS URL from which Windshift extracts the hostname.

  • WEBAUTHN_RP_NAMEWindshiftDisplay name shown by authenticators.

    Display name shown by authenticators.

  • WINDSHIFT_CONTEXT_PATHOptional subpath such as /windshift when serving below a domain root.

    Optional subpath such as /windshift when serving below a domain root.

  • WINDSHIFT_MEMORY_LIMIT_MB2048Total Windshift process-memory budget in MiB. Values below 512 MiB fail at startup.

    Total Windshift process-memory budget in MiB. Values below 512 MiB fail at startup.

  • WINDSHIFT_METRICS_TOKENOptional bearer token for the Prometheus /metrics endpoint.

    Optional bearer token for the Prometheus /metrics endpoint.

Windshift releases & version history

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…