1. Project Overview & Quickstart (go-vikunja/LICENSE)
1. Project Overview & Quickstart (go-vikunja/LICENSE)
LICENSE
Open-source repository go-vikunja/LICENSE
Repository Details
- Repository: go-vikunja/LICENSE
- Primary Language: Code
Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.
2. Official Technical Reference & Guides (go-vikunja/website)
Vikunja Homepage
This project holds the source code for the Vikunja homepage at vikunja.io.
๐ Project Structure
Inside of your Astro project, you'll see the following folders and files:
/
โโโ public/
โ โโโ favicon.svg
โโโ src/
โ โโโ components/
โ โ โโโ Card.astro
โ โโโ layouts/
โ โ โโโ Layout.astro
โ โโโ pages/
โ โโโ index.astro
โโโ package.jsonAstro looks for .astro or .md files in the src/pages/ directory. Each page is exposed as a route based on its file name.
There's nothing special about src/components/, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
Any static assets, like images, can be placed in the public/ directory.
๐ง Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
|---|---|
pnpm install |
Installs dependencies |
pnpm run dev |
Starts local dev server at localhost:4321 |
pnpm run build |
Build your production site to ./dist/ |
pnpm run preview |
Preview your build locally, before deploying |
pnpm run astro ... |
Run CLI commands like astro add, astro check |
pnpm run astro -- --help |
Get help using the Astro CLI |
๐ Want to learn more?
Feel free to check our documentation or jump into our Discord server.
2. Official Technical Reference & Guides (go-vikunja/website)
File: README.md
Vikunja Homepage
This project holds the source code for the Vikunja homepage at vikunja.io.
๐ Project Structure
Inside of your Astro project, you'll see the following folders and files:
/
โโโ public/
โ โโโ favicon.svg
โโโ src/
โ โโโ components/
โ โ โโโ Card.astro
โ โโโ layouts/
โ โ โโโ Layout.astro
โ โโโ pages/
โ โโโ index.astro
โโโ package.jsonAstro looks for .astro or .md files in the src/pages/ directory. Each page is exposed as a route based on its file name.
There's nothing special about src/components/, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
Any static assets, like images, can be placed in the public/ directory.
๐ง Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
|---|---|
pnpm install |
Installs dependencies |
pnpm run dev |
Starts local dev server at localhost:4321 |
pnpm run build |
Build your production site to ./dist/ |
pnpm run preview |
Preview your build locally, before deploying |
pnpm run astro ... |
Run CLI commands like astro add, astro check |
pnpm run astro -- --help |
Get help using the Astro CLI |
๐ Want to learn more?
Feel free to check our documentation or jump into our Discord server.
File: scripts/screenshots/README.md
Screenshot Automation
Automated screenshot capture for the Vikunja website using Playwright.
Prerequisites
- Vikunja backend running on
:3456with testing token enabled:yamlservice: testingtoken: averyLongSecretToSe33dtheDB interface: ":3456" - Vikunja frontend served on
:4173(e.g.pnpm build && pnpm previeworpnpm dev)
Usage
# Install dependencies
pnpm install
# Run all screenshot specs
pnpm screenshots
# Run a specific spec
pnpm screenshots -- specs/dashboard.spec.ts
# Run in headed mode (see the browser)
pnpm screenshots:headed
# Run with Playwright inspector for debugging
pnpm screenshots:debugSpec Files
Help page specs (`specs/*.spec.ts`)
Generate screenshots for the end-user help documentation. Output: src/assets/images/help/
Homepage carousel (`specs/homepage-carousel.spec.ts`)
Generates 8 full-page (1280ร900) screenshots used in the homepage image carousel. Output: src/assets/images/vikunja/
| File | What it shows |
|---|---|
01-task-overview.png |
Dashboard with recently viewed projects + current tasks |
02-task-list.png |
List view of project |
03-task-gantt.png |
Gantt chart view |
04-task-table.png |
Table view |
05-task-kanban.png |
Kanban board with 3 buckets |
06-task-detail.png |
Task detail with description and embedded image |
07-quick-add.png |
Ctrl+K quick-add/search overlay |
08-task-kanban-background.png |
Kanban board with project background image |
Features page (`specs/features-page.spec.ts`)
Generates 5 cropped content-area screenshots for the features page. Output: src/assets/images/vikunja/features/
| File | What it shows |
|---|---|
task.png |
Task detail โ title, breadcrumb, description, embedded image |
list.png |
List view โ task list with quick-add input, labels, assignees |
gantt.png |
Gantt chart โ timeline area |
kanban.png |
Kanban board โ buckets with task cards |
table.png |
Table view โ sortable columns |
Flathub images
After all specs run, copy-flathub.ts copies select homepage carousel images to public/flathub-images/ for the Flathub app listing.
Output Directories
The screenshot fixture accepts a dir option to control the output subdirectory under src/assets/images/:
await screenshot('my-shot', page, {dir: 'vikunja'}) // โ src/assets/images/vikunja/my-shot.png
await screenshot('my-shot', page, {dir: 'vikunja/features'}) // โ src/assets/images/vikunja/features/my-shot.png
await screenshot('my-shot', page) // โ src/assets/images/help/my-shot.png (default)Test Image Assets
Two test images are stored in support/ for use in specs that need task attachments or project backgrounds:
test-image.jpgโ Used as an inline task attachment in task detail screenshotstest-background.jpgโ Used as a project background in the kanban background screenshot
To replace them, drop in new JPEG files with the same filenames and re-run the specs.
Adding New Screenshots
- Create a new spec file in
specs/(or add to an existing one) - Use the
testandscreenshotfixtures fromsupport/fixtures.ts - Use
createPopulatedProject()fromsupport/seed-helpers.tsto seed realistic data - Pass
{dir: 'your/subdir'}toscreenshot()for non-help output directories - Use locator targets for cropped shots of specific UI elements
- Use
page.screenshot({ clip })via the options parameter for custom-cropped areas - Run the spec to verify the screenshot looks correct
File: scripts/README.md
Scripts
publish-release
Cross-posts a release blog post to Mastodon, Bluesky, GitHub Releases, Discourse, Matrix, LinkedIn, and Listmonk.
Usage
node scripts/publish-release.js <version> [--dry-run]Example:
node scripts/publish-release.js 2.2.0
node scripts/publish-release.js 2.2.0 --dry-runThe script:
- Finds the blog post at
src/content/changelog/release-<version>.mdx - Generates short (tweet-style) and LinkedIn content variants using
claude -p - Opens
$EDITORto review and edit the generated content - Posts to each platform with a
[Y/n]confirmation prompt - Prints a summary of all posted links
--dry-run skips all API calls and prints what would be posted.
Prerequisites
- Node.js 20+
- Claude CLI (
claudemust be on PATH) - GitHub CLI (
gh) authenticated for GitHub Releases
API setup
Create a .env file in the project root (already gitignored) with the credentials for each platform. Platforms with missing credentials are skipped automatically.
# Mastodon (social.linux.pizza)
# Create an application at: https://social.linux.pizza/settings/applications
# Required scopes: write:statuses
MASTODON_TOKEN=
# Bluesky
# Create an app password at: https://bsky.app/settings/app-passwords
BLUESKY_HANDLE=
BLUESKY_APP_PASSWORD=
# Discourse (community.vikunja.io)
# Create an API key at: https://community.vikunja.io/admin/api/keys
# Scope: topics (create)
DISCOURSE_API_KEY=
DISCOURSE_USERNAME=
# Matrix (#vikunja:matrix.org)
# Get an access token by logging in via the client-server API or from Element's settings
MATRIX_ACCESS_TOKEN=
MATRIX_HOMESERVER=https://matrix.org
MATRIX_ROOM_ID=
# Listmonk
# Create an API user and token at: Admin -> Users
# Required permissions: campaigns:manage
LISTMONK_URL=https://your-listmonk-instance.example.com
LISTMONK_API_USER=
LISTMONK_API_TOKEN=
# List ID to send the campaign to (find at Lists -> click list -> ID in URL)
LISTMONK_LIST_ID=GitHub Releases uses the gh CLI's existing authentication โ no extra credentials needed. Run gh auth status to verify.
LinkedIn has no API integration โ the script prints the post text for you to copy and post manually.
File: src/content/help/accessibility.mdx
title: Accessibility slug: accessibility How to use Vikunja with a keyboard, adjust display and sound, and what works with screen readers, plus current limitations and how to report problems.
import Callout from '../../components/Callout.astro';
Vikunja is built to work without a mouse and to adapt to how you read and hear the interface. This page covers the keyboard shortcuts, the display and sound settings, and what currently works with assistive technology, including the parts that are still rough.
Using Vikunja with a keyboard
You can reach and open every task without dragging, clicking, or pointing. The shortcuts below work throughout the app; press ? at any time to open the shortcut reference for wherever you happen to be.
On every page
| Keys | Action |
|---|---|
Ctrl+K / Cmd+K |
Open search and quick actions |
Ctrl+E / Cmd+E |
Toggle the menu |
? |
Open the keyboard shortcut reference |
Search doubles as a command palette, so Ctrl+K also gets you to any task or project by name and lets you create new ones without leaving the page.
Moving around
These are chords: press the first key, release it, then press the second.
| Keys | Goes to |
|---|---|
g then o |
Overview |
g then u |
Upcoming |
g then p |
Projects |
g then a |
Labels |
g then m |
Teams |
Inside a project, the same pattern switches views: g then l for List, g then t for Table, g then k for Kanban, and g then g for Gantt.
In the List view
| Keys | Action |
|---|---|
j |
Highlight the next task |
k |
Highlight the previous task |
Enter |
Open the highlighted task |
On a task
When a task is open, single-key shortcuts jump straight to each field, so you never have to tab through the whole page to change one thing.
| Keys | Action |
|---|---|
t |
Mark done or undone |
a |
Assign to a user |
l |
Add labels |
d |
Change the due date |
Alt+R / Shift+R |
Manage reminders |
e |
Edit the description |
p |
Change the priority |
c |
Change the color |
f |
Add an attachment |
r |
Edit related tasks |
m |
Move to another project |
s |
Toggle favorite |
u |
Open the task's project |
Ctrl+S / Cmd+S |
Save |
Delete / Backspace |
Delete the task |
Pressing . copies the task identifier; press it twice for the identifier and title, three times to add the URL. Ctrl+. / Cmd+. copies the task URL on its own.
Doing without drag-and-drop
Most things you can drag, you can also do from the keyboard:
- Move a task between Kanban buckets: open the task and use the bucket dropdown in the breadcrumb line at the top. You don't need to drag the card.
- Reschedule in the Gantt view: press
Tabto land on a task bar, then use the Left and Right arrow keys to move it a day at a time. Separate buttons resize the start and end. HoldShiftwith an arrow to extend the bar, orCtrl/Cmdto shrink it. - Set dates without the calendar grid: in any date picker you can type the date directly, and there are separate month, year, and time controls if you'd rather step through them.
- Write descriptions by keyboard: the rich-text editor is fully operable without a mouse. Markdown shortcuts work as you type (
#for headings,-for a bullet,1.for a numbered list,[]for a checkbox),Ctrl+S/Cmd+Ssaves, andTabmoves focus out of the editor rather than trapping you in it.
On Safari, Tab skips over links by default, so keyboard navigation can feel like it's missing stops. Turn on Safari โ Settings โ Advanced โ "Press Tab to highlight each item" to Tab through everything, or hold Option while you press Tab.
Display and sound
- Color scheme: choose Light, Dark, or System (which follows your operating system) under Settings โ General โ Color Scheme. See Settings.
- Zoom: the layout reflows at 200% browser zoom without cutting off or hiding content, so you can enlarge text with your browser's own zoom.
- Completion sound: the pop that plays when you finish a task can be turned off under Settings โ General.
Screen readers and assistive technology
Vikunja is built with semantic structure that assistive technology can use: page landmarks, labeled controls, a skip-to-content link, and live-region announcements that read out the result of an action. The Gantt chart carries an ARIA description of what it shows. Images you add to a task description can be given alt text: select the image and choose Alt text in the bubble menu that appears.
If you're picking a combination, VoiceOver works best with Safari, and NVDA with Chrome or Firefox. VoiceOver paired with Firefox announces headings and languages poorly; that's a limitation of the browser, not something we can fix from Vikunja's side.
What doesn't work yet
We'd rather tell you plainly than have you fight the interface:
- Reordering cards within a Kanban bucket and manually reordering the List view are drag-and-drop only. The workaround is to sort instead: pick a sort order and the tasks arrange themselves.
- Renaming a Kanban bucket still needs a pointer.
- Some color-contrast and announcement issues are still being fixed. A July 2026 accessibility audit kicked off a round of improvements, and the work is ongoing.
Reporting an accessibility problem
If something gets in your way, report it the same way you'd report any bug:
- Open an issue on GitHub
- Post on the community forum
- Email [email protected]
Every one of these is text-based, so you can reach us however works for you.
File: src/content/help/caldav.mdx
title: CalDAV slug: caldav Sync tasks with external apps using CalDAV. Covers supported properties, URLs, and client compatibility.
import Screenshot from '../../components/Screenshot.astro'
import {VIKUNJA_CLOUD_LINK} from '../../helpers/vikunjaCloudLink'
Warning: The CalDAV integration is in an early alpha stage and has bugs.
It works well with some clients while having issues with others.
If you encounter issues, please report them
Vikunja supports managing tasks via the caldav VTODO extension.
You can find your CalDAV connection details in your Settings under the CalDAV tab.
Authentication
When you connect a CalDAV client, use your Vikunja username and one of the following as the password:
- Your account password โ the easiest option, and the one we recommend whenever it works for you. Local accounts, including those provisioned via LDAP, can use their normal password directly. If your account signs in through an external identity provider (OIDC) โ for example on Vikunja Cloud โ the CalDAV settings tab shows a hint asking you to use a dedicated token instead, because your password isn't stored in Vikunja. Passwords also don't work when two-factor authentication is enabled on your account.
- A dedicated CalDAV token generated on the CalDAV settings tab. Use this if your account signs in via OIDC, or if you have two-factor authentication enabled.
- An API token with the CalDAV permission group, available from Vikunja 2.3.0 onwards. Use the token value (it starts with
tk_) as the password. This is handy if you want to manage all your automation credentials in one place, or if you want a single token to cover both CalDAV sync and API access.
URLs
All URLs are located under the /dav subspace.
URLs are:
/principals//: Returns URLs for project discovery. Use this URL when connecting a new client./projects/: Used to manage projects/projects//: Used to manage a single project/projects//<Task UID>: Used to manage a task on a project
Supported properties
Vikunja currently supports the following properties:
UIDSUMMARYDESCRIPTIONPRIORITYCATEGORIESCOMPLETEDCREATED(only Vikunja โ Client)DUE(Due date)DURATIONDTSTAMPDTSTARTLAST-MODIFIED(only Vikunja โ Client)RELATED-TO(parent/child relations)RRULE(Recurrence) (only Vikunja โ Client)STATUS(onlyCOMPLETEDstatus, used to mark tasks as done)VALARM(Reminders)
Vikunja currently does not support these properties:
ATTACHCLASSCOMMENTCONTACTGEOLOCATIONORGANIZER(disabled)PERCENT-COMPLETERECURRENCE-IDRESOURCESSEQUENCEURL
Tested Clients
Working
Not working
- Thunderbird (68)
- iOS CalDAV Sync (See #753)
File: src/content/help/dashboard.mdx
title: Dashboard / Home Screen slug: dashboard The home screen you see after logging in. Shows upcoming tasks, a quick-add bar, and recently viewed projects.
import Screenshot from '../../components/Screenshot.astro'
After logging in, Vikunja takes you to the dashboard (home screen). This is your central hub for staying on top of tasks across all your projects.
Overview
From Vikunja 2.3.0 onwards, the greeting at the top rotates each day, so you will see a different phrasing for your current time of day each time you log in on a new day.
Quick-add bar
The input field at the top lets you create a new task without navigating to a specific project first. You can use Quick Add Magic syntax here to set due dates, labels, priorities, and more directly from the input.
Tasks created from the dashboard are added to your default project. See Default project below to learn how to change it.
Upcoming tasks
Below the quick-add bar you will find all tasks from every project you have access to. They are sorted by due date:
- Overdue tasks appear first.
- Remaining tasks are sorted with the closest due date on top.
This gives you a quick view of what needs attention right now and what is coming up next.
Default project
Tasks created from the dashboard go into your default project. You can change which project is the default in your Settings.
Customizing the home screen filter
By default, the dashboard shows all upcoming tasks from all projects. If you want to narrow this down, you can set a custom filter for the home screen:
- Create a saved filter that shows only the tasks you want to see.
- Open your Settings and find the option to set a filter for the home screen.
- Set the saved filter you created earlier to be shown on the dashboard.
This is useful if you work across many projects but only want to see certain priorities or labels on your dashboard.
Upcoming view (sidebar)
The left sidebar contains an Upcoming entry that shows your tasks in a dedicated, full-page view. By default it displays incomplete tasks due between today and next week.
Unlike the dashboard, the Upcoming view gives you controls to adjust what you see:
- Date range picker: Choose a custom start and end date. For example, select the next two weeks to plan ahead.
- No dates checkbox: Include tasks that have no due date set.
- Overdue checkbox: Include tasks that are past their due date.
Use this view when you want to focus on a specific time window without the other dashboard sections.
Recently viewed projects
Once you have opened a few projects, the dashboard will also show a recently viewed projects section.
This lets you quickly jump back to projects you have been working in without searching for them in the sidebar.
If you prefer a cleaner dashboard, you can hide this section in your Settings under Show last viewed projects on the overview page. This setting is available from Vikunja 2.3.0 onwards.
File: src/content/help/dates-and-reminders.mdx
title: Dates & Reminders slug: dates-and-reminders
import Screenshot from '../../components/Screenshot.astro'
import Callout from '../../components/Callout.astro';
Tasks can have due dates, start and end dates, reminders, and repeating schedules. Here's how each one works.
Due Date
The due date is when a task must be finished. Once the due date passes, the task is considered overdue. Overdue tasks are highlighted so you can quickly spot what needs attention.
If you've enabled it in the settings, you'll receive an email each morning with a list of the tasks that are overdue.
Due dates are also used for sorting in the Upcoming view and on the dashboard, making it easy to see what is coming up next.
Start and End Date
Start and end dates define the window during which you plan to work on a task. For example, a report due March 31 (due date) might have a start date of March 20 and an end date of March 28, meaning you plan to do the work during that week.
These dates are primarily used in the Gantt view, where each task appears as a bar spanning from its start date to its end date on the timeline.
Reminders
You can set one or more reminders on any task. When a reminder triggers, you receive a notification in the Vikunja UI. If you have email notifications enabled in your settings, you will also receive an email.
Reminders come in two types:
- Absolute reminders: Set for a specific date and time (e.g. "remind me on March 5th at 9:00 AM").
- Relative reminders: Set relative to one of the task's date fields (due date, start date, or end date). For example, "remind me 1 hour before the due date" or "remind me 2 days before the start date".
Repeating Tasks
Tasks can repeat on a schedule. Vikunja supports the same kind of recurrence rules you know from calendar applications. Some examples:
- Every day
- Every week
- Every month
- Every 2 weeks on Tuesday
- First Tuesday of the month
When a repeating task is marked as done, Vikunja automatically creates the next occurrence based on the recurrence rule.
Quick Add Magic
Due dates, reminders, and repeating schedules can all be set directly when creating a task using Quick Add Magic. Instead of filling in fields manually, you can type everything in natural language right in the task title.
For the full list of supported keywords and date formats, see Quick Add Magic.
File: src/content/help/desktop.mdx
title: Desktop App slug: desktop Sign in, use the quick-entry window, the system tray, and command-line flags in the Vikunja desktop app.
import Callout from '../../components/Callout.astro';
import {VIKUNJA_CLOUD_LINK} from '../../helpers/vikunjaCloudLink';
Vikunja has a dedicated desktop application for Linux, macOS, and Windows. For download and installation instructions, see Desktop Packages.
Logging in
The first time you open the desktop app, you'll be asked to pick which server to connect to:
- Vikunja Cloud: connect to the hosted Vikunja Cloud service.
- Try Demo: connect to
try.vikunja.io, the public demo instance. - Custom Server: enter the URL of your own self-hosted Vikunja instance.
After you pick a server, the desktop app opens your browser to sign in. If your instance uses an external login provider (for example a single sign-on system), you can sign in with it here as well. Once you approve the sign-in, the browser hands you back to the desktop app and you're signed in.
Quick-entry window
The desktop app has a dedicated quick-entry window: a small popup you can open from anywhere on your system to add a task without first switching to the main Vikunja window. It's the same quick-entry overlay you can already open from inside Vikunja with Ctrl / Cmd + K โ the desktop app just makes it available as a standalone, always-on-top window so you can reach it even when Vikunja isn't focused.
Opening the popup
Press the global shortcut to open the popup. The default is Ctrl + Shift + A (or Cmd + Shift + A on macOS).
You can change the shortcut in Settings > General, under the Desktop section. Click the shortcut recorder and press the key combination you want to use.
You can also open the popup from the system tray or by launching the app with the --quick-entry flag.
Creating a task
The popup uses the same quick-entry interface as the dashboard quick-add bar, so you can use Quick Add Magic to set due dates, labels, priorities, assignees, and the target project while you type.
- Enter creates the task and closes the popup.
Ctrl/Cmd+ Enter creates the task and opens it in the main Vikunja window.- Esc closes the popup without creating a task.
System tray
The desktop app places an icon in your system tray with these entries:
- Show Vikunja: open or focus the main window.
- Quick Add Task: open the quick-entry window. The current global shortcut is shown next to the menu item.
- Quit: close the app entirely.
Command-line flags
--quick-entry: launch the app and immediately open the quick-entry window. If Vikunja is already running, this opens the popup in the existing instance instead of starting a second one. This is useful if you want to bind your own shortcut or launcher to the quick-entry window.
File: src/content/help/filters.mdx
title: Filters slug: filters Filter tasks by due date, priority, labels, assignees, and more using Vikunja's query syntax.
import Screenshot from '../../components/Screenshot.astro'
import Callout from '../../components/Callout.astro';
import DateMathExamples from '../../components/partials/DateMathExamples.astro';
Filters let you narrow down your task list so you only see what matters right now. Instead of scrolling through everything, you write a short query and Vikunja shows only the matching tasks.
Common examples
Copy any of these into a filter field to try it out:
done = false |
All undone tasks |
dueDate < now |
Overdue tasks |
dueDate > now && dueDate < now+7d |
Tasks due in the next 7 days |
done = false && priority >= 3 |
Undone tasks with high priority (3+) |
assignees in currentUser |
Tasks assigned to you |
labels in urgent |
Tasks with the "urgent" label |
labels in urgent, logistics |
Tasks labeled "urgent" or "logistics" |
done = false && dueDate < now |
Undone overdue tasks |
You can combine any of these patterns. For example, undone high-priority tasks due this week:
done = false && priority >= 3 && dueDate > now && dueDate < now+7dWhere to use filters
- Views: Add a filter to any view so it only shows matching tasks.
- Saved filters: Create a reusable filter that appears in your sidebar and works across all your projects.
- Dashboard: Set a saved filter to control which tasks appear on your home screen.
How to write a filter
A filter query has three parts: a field, an operator, and a value.
priority >= 3priorityis the field (what you are checking)>=is the operator (how to compare)3is the value (what to compare against)
To combine conditions, use && (and) or || (or):
done = false && priority >= 3Use parentheses to group conditions:
(priority = 1 || priority = 2) && dueDate <= nowThe filter editor offers autocomplete for field names, label names, usernames, and project names as you type.
Fields
done |
Whether the task is completed (true or false) |
priority |
Priority level (1 to 5) |
percentDone |
Completion percentage (0 to 100) |
dueDate |
The due date |
startDate |
The start date |
endDate |
The end date |
doneAt |
When the task was completed |
assignees |
The assignees |
labels |
The labels on the task |
project |
The project (only in saved filters) |
reminders |
The reminders set on the task |
created |
When the task was created |
updated |
When the task was last updated |
Strings with spaces or special characters must be wrapped in quotes: "2024-03-11", "waiting on others".
Operators
= |
Equal to |
!= |
Not equal to |
> |
Greater than |
>= |
Greater than or equal to |
< |
Less than |
<= |
Less than or equal to |
like |
Matches a pattern (use % as wildcard) |
in |
Matches any value in a comma-separated list |
not in |
Does not match any value in a comma-separated list |
Relative dates
Instead of typing a fixed date, use now so your filter stays current automatically.
Add or subtract time from now using units like d (days), w (weeks), or M (months):
now |
Right now |
now+1d |
Tomorrow |
now-1d |
Yesterday |
now+7d |
One week from now |
now+1M |
One month from now |
Use /d to round down to the start of the day, which is useful for "today" or "this week" filters:
now/d |
Start of today |
now+7d/d |
Start of the day, 7 days from now |
All time units
s |
Seconds |
m |
Minutes |
h |
Hours |
d |
Days |
w |
Weeks |
M |
Months |
y |
Years |
API reference
If you use filters through the Vikunja API rather than the web UI, see the Filter API Reference for field names, query parameters, and other differences.
File: src/content/help/import-and-export.mdx
title: Import & Export slug: import-and-export Export your Vikunja data or import tasks from CSV files, TickTick, WeKan, Planka, Todoist, Trello, and Microsoft To Do.
import Screenshot from '../../components/Screenshot.astro'
import Callout from '../../components/Callout.astro';
Vikunja lets you export all of your data and import tasks from other services, making it easy to back up your work or migrate from another tool.
Export
You can export all your data from Vikunja, including projects, tasks, attachments, and more.
To start an export:
- Open your Settings and navigate to the Data Export section.
- Confirm your password to proceed.
Once confirmed, Vikunja will generate a ZIP file containing all of your data. You can download this file and keep it as a backup or use it to re-import your data into Vikunja later.
Import
To import data into Vikunja:
- Open your Settings and navigate to the Import tab.
- Select the source you want to import from.
- Follow the on-screen steps to complete the import.
Vikunja supports importing from the following sources:
- Vikunja export: Re-import a previously exported ZIP file.
- CSV: Import tasks from any CSV file with custom column mapping.
- TickTick
- WeKan (available from version 2.3.0)
- Planka (available from version 2.6.0)
- Todoist
- Trello
- Microsoft To Do
You can also sync tasks with external apps using CalDAV.
Importing from CSV
The CSV import lets you bring tasks into Vikunja from any spreadsheet or tool that can export CSV files. It works in three steps:
- Upload your CSV file. Select a
.csvor.txtfile. Vikunja will auto-detect the delimiter, date format, and column mappings. - Review and adjust the mapping. Each column in your file can be mapped to a task attribute: title, description, due date, start date, end date, priority, labels, project, reminder, or set to "ignore". The preview below the mapping updates automatically as you change settings.
- Import. Once you're happy with the preview, click "Import Tasks" to create all tasks in Vikunja.
Parsing options
You can adjust these settings if the auto-detection didn't get it right:
- Delimiter: Comma, semicolon, tab, or pipe.
- Date format: Choose the format that matches dates in your file (e.g. YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY, etc.).
- Skip rows: Skip a number of rows at the top of the file if they contain metadata or headers that aren't part of your task data.
Column mapping
At least one column must be mapped to Title for the import to work. All other attributes are optional:
- Labels are parsed as comma-separated values within a single column.
- Priority accepts numbers (0โ5) or text like "low", "medium", "high", "urgent".
- Done accepts values like "true", "yes", "1", "done", or "completed".
- Project groups tasks into sub-projects. If no project column is mapped, or all tasks have the same project value, they are imported into a single "Imported from CSV" project.
Importing from WeKan
To import a WeKan board, first export it as JSON in WeKan (board menu > Export board > JSON), then select the WeKan icon on the import page and upload the file.
Each board export creates one Vikunja project. Lists become kanban buckets, cards become tasks, and labels, checklists, comments, and dates are all preserved.
Importing from Planka
Vikunja imports directly from a running Planka instance (version 2 or later). There is no file to export. Select the Planka icon on the import page, enter the URL of your Planka instance and choose how Vikunja should log in:
- API key: A Planka administrator must create an API key for your account. Copying a token from your browser does not work.
- Username and password: Only works for local Planka accounts without two-factor authentication that have logged in to Planka at least once. Accounts using single sign-on need an API key.
Your credentials are only used for this import and are not stored.
Vikunja imports all projects and boards you have access to. A Planka project with a single board becomes one Vikunja project; a project with several boards becomes a parent project with one child project per board. Lists become kanban buckets, cards become tasks, and labels, due dates, comments, and file attachments are preserved. Archived and closed cards are imported as done tasks; trashed cards are skipped. Checklists and custom fields are added to the task description. Assignees and board members are not imported.