Vikunja
vikunja.io Web, Android LinuxVikunja is an open-source to-do application. It is suitable for a wide variety of projects, supporting List, Gantt, Table and Kanban views to visualize all tasks in different contexts. For collaboration, it has sharing support via private teams or public links. It can be self-hosted or used as a managed service for a small fee.
- Homepage: vikunja.io
- GitHub: github.com/go-vikunja/vikunja
- Web info: web-check.xyz/check/vikunja.io
Vikunja Source Code
Author
Description
The to-do app to organize your life.
Homepage
https://vikunja.ioLicense
AGPL-3.0
Created
28 Nov 18
Last Updated
16 Jun 26
Latest version
Primary Language
Go
Size
81,794 KB
Stars
4,517
Forks
506
Watchers
4,517
Language Usage
Star History
Top Contributors
-
@kolaente (6994)
-
@renovate[bot] (966)
-
@dpschen (778)
-
@vikunja-bot (185)
-
@tink-bot (78)
-
@Elscrux (35)
-
@Copilot (28)
-
@dependabot[bot] (26)
-
@maggch97 (17)
-
@WofWca (16)
-
@claude (14)
-
@JohnStarich (13)
-
@mdrkrg (13)
-
@xela-zone (6)
-
@adrinux (6)
-
@profi248 (5)
-
@jyte (4)
-
@davidangel (4)
-
@shilch (4)
-
@jtojnar (4)
-
@freaktechnik (4)
-
@andreymal (4)
-
@Tokra110 (3)
-
@eljef (3)
-
@LucaBernstein (3)
-
@mithileshgupta12 (3)
-
@NeoHuncho (3)
-
@rhclayto (3)
-
@Viehlieb (3)
-
@surfingbytes (3)
-
@zapp88 (2)
-
@bradmartin333 (2)
-
@azymondrian (2)
-
@vlasov-y (2)
-
@CrazyWolf13 (2)
-
@MGChecker (2)
-
@Quiwy (2)
-
@mnr73 (2)
-
@furai (2)
-
@KaibutsuX (2)
-
@javabrett (2)
-
@Saxos-Simone (1)
-
@subnut (1)
-
@TheEdgeOfRage (1)
-
@deadLocks21 (1)
-
@v-yarotsky (1)
-
@vovochka404 (1)
-
@XiangCany (1)
-
@TheZoker (1)
-
@blacksmith-sh[bot] (1)
-
@cr1xu5 (1)
-
@treysu (1)
-
@IAMSamuelRodda (1)
-
@remilapeyre (1)
-
@RyanHecht (1)
-
@RoboMagus (1)
-
@rhysmcneill (1)
-
@Rein-R3 (1)
-
@Raymi306 (1)
-
@capriolo (1)
-
@pano9000 (1)
-
@n-nkm (1)
-
@the-darkvoid (1)
-
@stephen-hill (1)
-
@SteffeyDev (1)
-
@simonsmd (1)
-
@rudd6617 (1)
-
@rriski (1)
-
@primeapple (1)
-
@nithinvarma411 (1)
-
@naleo (1)
-
@leggettc18 (1)
-
@kompetenzbolzen (1)
-
@jontyms (1)
-
@jonastheis (1)
-
@jayden-chan (1)
-
@j-hugo (1)
-
@graves501 (1)
-
@erri120 (1)
-
@edelgrace (1)
-
@earnestma (1)
-
@devadattas (1)
-
@hcuk94 (1)
-
@HarryEMartland (1)
-
@hangya (1)
-
@Jackymancs4 (1)
-
@Hudint (1)
-
@fleaz (1)
-
@ZeWaren (1)
-
@SDonCode (1)
-
@waza-ari (1)
-
@danstewart (1)
-
@JimChr-R4GN4R (1)
-
@civascu (1)
-
@chau-intl (1)
-
@Bouni (1)
-
@Biagio00 (1)
-
@belidzs (1)
-
@ariep (1)
-
@thelicato (1)
Recent Commits
-
renovate[bot] (16 Jun 26)
chore(deps): update dev-dependencies
-
kolaente (16 Jun 26)
fix(deps): bump js-yaml to >=4.2.0 where possible Desktop only has the v4 copy, so a plain override pins it to >=4.2.0 (resolves alert #245). The frontend also pulls js-yaml v3 via gray-matter (histoire story tooling), which has no v4-compatible release, so a scoped 'js-yaml@4' override bumps only the v4 copies (eslint/cosmiconfig) and leaves gray-matter on 3.14.2. Alert #256 stays open for that dev-only, trusted-input path.
-
kolaente (16 Jun 26)
fix(deps): force @babel/core >=7.29.6 Resolves the @babel/core <=7.29.0 advisory. Transitive; pinned via pnpm override. Dependabot alert #255 (frontend).
-
kolaente (16 Jun 26)
fix(deps): force launch-editor >=2.14.1 Resolves the launch-editor <=2.14.0 advisory. Transitive (via vite-plugin-vue-devtools); pinned via pnpm override. Dependabot alert #257 (frontend).
-
kolaente (16 Jun 26)
fix(deps): force markdown-it >=14.2.0 to fix ReDoS advisory Resolves the markdown-it <=14.1.1 advisory. Transitive; pinned via pnpm override. Dependabot alert #266 (frontend).
-
kolaente (16 Jun 26)
fix(deps): tighten tar override to >=7.5.16 The ^7.5.11 override resolved to the vulnerable 7.5.15. Pin to >=7.5.16. Resolves Dependabot alert #246 (desktop).
-
kolaente (16 Jun 26)
fix(deps): force form-data >=4.0.6 to fix unsafe boundary advisory Resolves the form-data <4.0.6 advisory (predictable multipart boundary). Transitive in both workspaces; pinned via pnpm overrides. Dependabot alerts #247 (desktop) and #258 (frontend).
-
kolaente (16 Jun 26)
fix(deps): bump dompurify to 3.4.9 to fix XSS advisories dompurify 3.4.0 was affected by several stacked advisories (mXSS / sanitizer bypasses). 3.4.9 is past all vulnerable ranges. Resolves Dependabot alerts #248-#254 (package.json) and #259-#265 (lockfile).
-
kolaente (16 Jun 26)
fix(deps): force esbuild >=0.28.1 to fix transitive advisories The frontend pins esbuild 0.28.1 directly, but vite/histoire and @intlify/bundle-utils pulled in transitive copies (0.27.7 and 0.25.12) still affected by GHSA-gv7w-rqvm-qjhr (RCE via missing binary integrity verification) and GHSA-g7r4-m6w7-qqqr (dev-server file read on Windows). A pnpm override forces all copies to the patched 0.28.1. Dependabot alerts #239 and #241.
-
kolaente (16 Jun 26)
fix(deps): bump tmp to >=0.2.7 to fix path traversal advisory Resolves GHSA-7c78-jf6q-g5cm (type-confusion bypass of _assertPath allowing path traversal). tmp was pinned to >=0.2.6 via pnpm overrides in both the frontend and desktop workspaces, which resolved to the vulnerable 0.2.6. Dependabot alerts #243 (desktop) and #244 (frontend).
-
Frederick [Bot] (16 Jun 26)
chore(i18n): update translations via Crowdin
-
dependabot[bot] (12 Jun 26)
chore(deps-dev): bump esbuild from 0.28.0 to 0.28.1 in /frontend Bumps [esbuild](https://github.com/evanw/esbuild) from 0.28.0 to 0.28.1. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.28.0...v0.28.1) --- updated-dependencies: - dependency-name: esbuild dependency-version: 0.28.1 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <[email protected]>
-
kolaente (12 Jun 26)
test(api/v2): cover the v2 file and CSV migrator endpoints Webtests for the file migrators (status, migrate, auth, missing-file) and the CSV importer (status, detect, preview, migrate happy path, missing/malformed config, empty file, auth). Each rejected upload is asserted to map to a 4xx domain error rather than a 500.
-
kolaente (12 Jun 26)
feat(api/v2): add the generic CSV importer on /api/v2 Port the CSV importer's status/detect/preview/migrate endpoints to the Huma API. detect/preview/migrate take a multipart upload; preview and migrate also carry the import config as a JSON form value (modeled as a typed multipart form field), unmarshaled in one shared place and reused via csv.RunMigration.
-
kolaente (12 Jun 26)
feat(api/v2): add file migrators (vikunja-file, ticktick, wekan) on /api/v2 Port the file-based migrators' status + migrate endpoints to the Huma API. A single registerFileMigrator helper wires all three (mirroring the OAuth migrator registrar); the migrate endpoint takes a multipart upload under the "import" field and reuses handler.RunFileMigration. POST migrate returns 200 since it runs an import rather than creating a REST resource.
-
kolaente (12 Jun 26)
refactor(migration): extract file/CSV migrate orchestration into shared funcs Pull the StartMigration -> Migrate -> FinishMigration orchestration out of the v1 echo handlers into handler.RunFileMigration and csv.RunMigration so the v2 API can reuse the exact same business logic. v1 is refactored onto them and stays byte-identical on the wire. Also tag the CSV detect/preview/config DTOs with doc:/enum: so they carry descriptions in the v2 OpenAPI schema (ignored by v1 swaggo/xorm).
-
kolaente (12 Jun 26)
feat(api/v2): add project background upload on /api/v2 Port PUT /projects/{project}/backgrounds/upload to the Huma-backed v2 API. The multipart handler reuses handler.ValidateAndSaveBackgroundUpload (shared with v1), checks project write access explicitly, and is gated on the upload provider config flag. Adds webtests covering the happy path, auth/permission failures, non-image rejection, the disabled-provider case and the multipart spec shape.
-
kolaente (12 Jun 26)
refactor(background): share upload validation between v1 and v2 handlers Extract the MIME validation, file storage and project reload from the v1 UploadBackground handler into ValidateAndSaveBackgroundUpload so the upcoming v2 handler can reuse it instead of duplicating the logic. The v1 handler keeps its exact wire behaviour; the inline "not an image" check now returns a typed ErrFileIsNoImage that the handler maps to the same message.
-
kolaente (12 Jun 26)
chore(lint): suppress contextcheck on OIDC provider init call sites Adding a context parameter to the shared package put its call chains in contextcheck's scope; the flagged background context in the provider setup is deliberate since provider lifetime exceeds any request.
-
kolaente (12 Jun 26)
feat(audit): emit the login event for the OAuth code exchange The new v2 OAuth token endpoint mints a fresh session without going through NewUserAuthTokenResponse, so those logins were missing from the audit trail. The refresh grant stays unaudited like the v1 refresh.
-
kolaente (12 Jun 26)
fix(events): handle nil auth when building event doers ProjectUser.Create and friends are called with a nil auth in tests; the old interface-typed Doer just serialized as null, so a nil doer keeps that behavior (and maps to the system actor in the audit entry).
-
kolaente (12 Jun 26)
fix(events): build event doers without re-fetching the user GetUserOrLinkShareUser re-fetches the account and fails its status check, which broke deleting a disabled user's projects (the deletion runs with the disabled account as doer). Convert the authenticated principal directly instead — it also matches what the events serialized before the doer became concrete, and drops a query per event.
-
kolaente (11 Jun 26)
refactor(events): use a concrete doer on project and team events ProjectUpdated/Deleted, ProjectSharedWith* and TeamCreated/Deleted carried an interface-typed Doer that could not be unmarshaled, forcing the audit registrations to decode anonymous mirror structs. Hydrate the doer via GetUserOrLinkShareUser at the dispatch sites like the task events already do, register the events directly and drop the untyped audit registration path. Webhook payloads for these events now serialize link share doers as their pseudo-user (negative id) instead of the raw link share object, consistent with task events.
-
kolaente (11 Jun 26)
feat(audit): attribute failed logins to the originating request Thread the request context through CheckUserCredentials so the LoginFailedEvent carries IP, user agent and request id — without it, failed logins were the one auth event useless for brute-force tracing. All four callers have the request at hand.
-
kolaente (11 Jun 26)
fix(audit): only attribute the logout event to user tokens Link share JWTs carry no sid claim so they returned before the event fired, but the id claim was read without checking the token type. Make the guard explicit so a link share id can never appear as a user id.
-
kolaente (11 Jun 26)
fix(audit): handle reopen failure after a failed rotation If both the rename and the reopen fail, logFile stayed nil while initialized was still true, panicking on the next write. Propagate the reopen error and retry the open on the next write so it self-heals.
-
kolaente (11 Jun 26)
fix(routes): generate request IDs at the start of the middleware chain Echo's RequestID middleware reuses the X-Request-Id header from a proxy or generates one, so logging and audit all see the same ID. RequestMeta previously read the request header before any later middleware could have set one, leaving the audit request_id mostly empty.
-
kolaente (11 Jun 26)
refactor(audit): move package docs into entry.go
-
kolaente (10 Jun 26)
fix: dispatch pending events after user creation commits The register handler, local/LDAP login and the OIDC callback all queue the user.created event via DispatchOnCommit but never called DispatchPending, so the event was silently dropped and its queue entry leaked. Flush after commit and discard on rollback.
-
kolaente (10 Jun 26)
refactor(events): pass context to DispatchPending directly Every DispatchPending caller either has the request context in scope or is genuinely request-less, so passing it as a parameter replaces the stored-context mechanism on the pending queue and satisfies contextcheck. Also fixes lint findings in the audit package.
Vikunja Security
Security Advisories (36)
- medium Unpatched CVSS 4.3
CVE-2026-40103 Scoped API tokens with projects.background permission can delete project backgrounds
- high Patched CVSS 7.4
CVE-2026-34727 TOTP Two-Factor Authentication Bypass via OIDC Login Path
- medium Patched CVSS 4.1
CVE-2026-35601 iCalendar Property Injection via CRLF in CalDAV Task Output
- medium Patched CVSS 5.4
CVE-2026-35600 HTML Injection via Task Titles in Overdue Email Notifications
- medium Patched CVSS 6.5
CVE-2026-35599 Algorithmic Complexity DoS in Repeating Task Handler
- medium Patched CVSS 5.4
CVE-2026-35602 File Size Limit Bypass via Vikunja Import
- medium Patched CVSS 4.3
CVE-2026-35598 Missing Authorization on CalDAV Task Read
- medium Patched CVSS 5.9
CVE-2026-35597 TOTP Brute-Force Due to Non-Functional Account Lockout
- medium Patched CVSS 4.3
CVE-2026-35596 Broken Access Control on Label Read via SQL Operator Precedence Bug
- high Patched CVSS 8.3
CVE-2026-35595 Privilege Escalation via Project Reparenting
- medium Patched CVSS 6.5
CVE-2026-35594 Link Share JWT tokens remain valid for 72 hours after share deletion or permission downgrade
- medium Patched
CVE-2026-33700 Link Share Delete IDOR — Missing Project Ownership Check Allows Cross-Project Link Share Deletion
- high Patched
CVE-2026-33668 Disabled/Locked User Accounts Can Still Authenticate via API Tokens, CalDAV, and OpenID Connect
- medium Patched CVSS 6.4
CVE-2026-33679 SSRF via OpenID Connect Avatar Download Bypasses Webhook SSRF Protections
- medium Patched CVSS 6.4
CVE-2026-33675 SSRF via Todoist/Trello Migration File Attachment URLs Allows Reading Internal Network Resources
- medium Patched CVSS 6.5
CVE-2026-33676 Cross-Project Information Disclosure via Task Relations — Missing Authorization Check on Related Task Read
- medium Patched CVSS 6.5
CVE-2026-33677 Webhook BasicAuth Credentials Exposed to Read-Only Project Collaborators via API
- high Patched CVSS 8.1
CVE-2026-33678 IDOR in Task Attachment ReadOne Allows Cross-Project File Access and Deletion
- high Patched CVSS 7.5
CVE-2026-33680 Link Share Hash Disclosure via ReadAll Endpoint Enables Permission Escalation
- critical Patched CVSS 9.1
GHSA-2pv8-4c52-mf8j Unauthenticated Instance-Wide Data Breach via Link Share Hash Disclosure Chained with Cross-Project Attachment IDOR
- high Unpatched
CVE-2026-33334 Any frontend XSS escalates to Remote Code Execution due to nodeIntegration in Vikunja Desktop
- high Unpatched
CVE-2026-33335 Arbitrary local application invocation via unvalidated shell.openExternal in Vikunja Desktop
- critical Unpatched
CVE-2026-33336 Remote Code Execution via same-window navigation in Vikunja Desktop
- medium Patched
CVE-2026-33313 IDOR in Task Comments Allows Reading Arbitrary Comments
- medium Unpatched
CVE-2026-33312 Read-only users can delete project background images via broken object-level authorization
- medium Patched
CVE-2026-33315 2FA Bypass via Caldav Basic Auth
- high Patched CVSS 8.1
CVE-2026-33316 Improper Access Control Enables Bypass of Administrator-Imposed Account Disablement
- medium Unpatched CVSS 5.7
CVE-2026-33473 TOTP Reuse During Validity Window
- high Unpatched
CVE-2026-33474 DoS via Image Preview Generation
- medium Unpatched CVSS 5.3
CVE-2026-29794 Rate-Limit Bypass for Unauthenticated Users via Spoofed Headers
- critical Patched CVSS 9.8
CVE-2026-28268 Account Takeover via Password Reset Token Reuse
- high Patched CVSS 7.2
CVE-2026-27819 Path Traversal in CLI Restore
- critical Patched CVSS 9.1
CVE-2026-27575 Weak Password Policy Combined with Persistent Sessions After Password Change
- high Patched CVSS 7.3
CVE-2026-27616 Stored Cross-Site Scripting (XSS) via Unsanitized SVG Attachment Upload Leading to Token Exposure
- medium Patched CVSS 6.1
CVE-2026-27116 Reflected HTML Injection via filter Parameter in Projects Module
- high Unpatched
CVE-2026-25935 XSS Via Task Preview
Vikunja Website
Website
Vikunja: The task manager you actually own
Vikunja is open-source task management you can self-host. Lists, Kanban, Gantt, and more — on your server or ours. Made and hosted in the EU.
Redirects
Does not redirect
Security Checks
All 65 security checks passed
Server Details
- IP Address 104.21.47.206
- Location San Francisco, California, United States of America, NA
- ISP CloudFlare Inc.
- ASN AS13335
Associated Countries
-
US -
DE
Safety Score
Website marked as safe
100%
Blacklist Check
vikunja.io was found on 0 blacklists
- AntiSocial Blacklist
- Artists Against 419
- Badbitcoin
- Bambenek Consulting
- CERT Polska
- CoinBlockerLists
- CRDF
- CryptoScamDB
- EtherAddressLookup
- EtherScamDB
- Fake Website Buster
- MetaMask EthPhishing
- NABP Not Recommended Sites
- OpenPhish
- PetScams
- PhishFeed
- PhishFort
- Phishing.Database
- PhishStats
- PhishTank
- Phishunt
- RPiList Not Serious
- Scam.Directory
- SecureReload Phishing List
- Spam404
- StopGunScams
- Suspicious Hosting IP
- ThreatFox
- ThreatLog
- TweetFeed
- URLhaus
- ViriBack C2 Tracker
Website Preview
Vikunja Docker
Container Info
Vikunja
The to-do app to organize your life.| Before use create custom template and Edit: VIKUNJA_SERVICE_FRONTENDURL , VIKUNJA_API_URL & VIKUNJA_SERVICE_JWTSECRET
Run Command
docker run -d \
-e PUID=${PUID} \
-e PGID=${PGID} \
-e PORT=${PORT} \
Compose File
version: 3.8
services:
vikunja:
environment:
PUID: 1000
PGID: 1000
PORT: Environment Variables
- Var Name Default
- PUID 1000
- PGID 1000
- PORT null
Vikunja Reviews
More Cloud Productivity Suites
-
A zero knowledge cloud productivity suite. Provides Rich Text, Presentations, Spreadsheets, Kanban, Paint a code editor and file drive. All notes and user content, are encrypted by default, and can only be accessed with specific URL. The main disadvantage, is a lack of Android, iOS and desktop apps - CryptPad is entirely web-based. You can use their web service, or you can host your own instance. Price for hosted: free for 50mb or $5/ month for premium.
-
A platform providing online services based on principles of freedom, privacy, federation and decentralization. It is an implementation of NextCloud, with strong encryption configured - it is widely used by journalists, activists and whistle-blowers. It is free to use, but there have been reported reliability issues of the cloud services.
-
A complete self-hosted productivity platform, with a strong community and growing app store. NextCloud is similar to (but arguably more complete than) Google Drive, Office 365 and Dropbox. Clear UI and stable native apps across all platforms, and also supports file sync. Supports encrypted files, but you need to configure this yourself. Fully open source.
-
An open source platform for self-hosting web apps. Once you've set it up, you can install items from the Sandstorm App Market with -click, similar to NextCloud in terms of flexibility.
About the Data: Vikunja
Change History
- Added #36
API
You can access Vikunja's data programmatically via our API. Simply make a GET request to:
https://api.awesome-privacy.xyz/v1/services/vikunja The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.
Share Vikunja
Help your friends compare Cloud Productivity Suites, and pick
privacy-respecting software and services.
Share Vikunja and Awesome Privacy with your network!