Official Vikunja import
Go to file
kolaente 9fb0d86c1b feat(search): rank ParadeDB search results by BM25 relevance (#2690)
When ParadeDB is in use and a search is run, results now keep the current
fuzzy/OR matching but are ordered by BM25 relevance so tasks matching all
query words rank above tasks matching only some.

Details:
- ParadeDB exposes the BM25 score via pdb.score(<key_field>); Vikunja's
  key_field is id, so we order by pdb.score(tasks.id) DESC, then the
  existing order-by (ending in a stable tasks.id tiebreak).
- Gating: relevance ordering only applies when ParadeDB is available, a
  search term is present, AND the user did not pass an explicit sort_by.
  An explicit user sort still wins; relevance only replaces the default
  (id / position) sort.
- DISTINCT requires every ORDER BY expression to appear in the SELECT
  list, so pdb.score(tasks.id) is added to the selected columns too (for
  both the plain and task_positions-join query shapes). Because xorm's
  Distinct() quotes each column and corrupts the function call, the
  ranking path uses Select(rawColumns).Distinct() instead.
- ParadeDB-only by nature: pdb.score is invalid SQL on sqlite, mysql and
  plain postgres, so those paths are completely unchanged.

A test (TestTaskSearchRelevanceRanking) creates a task matching all query
words plus tasks matching only one, then searches a multi-word query. On
ParadeDB it asserts the all-words task ranks first; on other databases it
only asserts the matching tasks are returned, so it stays green across the
whole CI database matrix. The CI ParadeDB matrix entry exercises the
ranking assertion.

Follow-up (not in this change): boosting results where the words appear in
order / in close proximity above plain all-words matches.

Fixes #2690
2026-06-19 20:46:28 +02:00
.claude feat(api/v2): report max_permission on label and project-view reads 2026-06-04 21:16:51 +00:00
.github fix(ci): generate config.yml.sample in release-os-package for vikunja 2026-05-27 18:16:38 +02:00
.vscode feat(dev): add frontend and api to launch config 2025-06-19 14:54:08 +02:00
.zed fix(dev): zed frontend task 2025-06-26 12:32:04 +02:00
build fix: prevent package postinstall hang when generating jwt secret 2026-05-30 12:39:49 +00:00
contrib feat: improve clean-translations script (#964) 2025-06-16 19:31:41 +00:00
desktop chore(deps): update dev-dependencies 2026-06-17 12:02:41 +00:00
examples/plugins/example feat(plugins): add example plugin 2026-03-30 20:44:46 +00:00
frontend fix(auth): preserve desktop authorize URL when not signed in (#2944) 2026-06-19 19:50:47 +02:00
pkg feat(search): rank ParadeDB search results by BM25 relevance (#2690) 2026-06-19 20:46:28 +02:00
rest chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
veans feat(init): use the hierarchical fuzzy picker for project selection 2026-06-10 13:51:46 +02:00
.devcontainer.json chore(dev): use latest devenv docker container for devcontainer 2025-07-02 20:17:29 +02:00
.dockerignore Revert "feat: improve docker layers (#803)" 2025-05-21 10:18:57 +02:00
.editorconfig chore(dev): insert final newline 2025-05-23 11:56:50 +02:00
.envrc chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
.gitignore refactor(task-attachment): share upload+download via pkg/web/files for v1+v2 2026-06-10 10:22:39 +00:00
.golangci.yml refactor(notifications): refresh users via an explicit type switch 2026-06-17 21:18:04 +00:00
.opensourcefinder-verify chore: add opensourcefinder verification 2026-02-26 17:12:26 +01:00
AGENTS.md docs: redirect translation requests to translation guide 2026-06-06 21:05:21 +02:00
CHANGELOG.md chore: v2.3.0 release preparations 2026-04-09 20:43:40 +02:00
CLAUDE.md docs: add AGENTS.md file with instructions for AI coding agents 2025-06-10 14:23:55 +02:00
CONTRIBUTING.md docs: rewrite CONTRIBUTING.md with setup, workflow, and style guides 2026-03-24 21:33:55 +01:00
Dockerfile fix(docker): make /tmp world-writable so exports work under any UID 2026-05-30 14:21:22 +00:00
LICENSE fix: correct license header references (#882) 2025-06-10 12:18:38 +02:00
README.md chore: v2.3.0 release preparations 2026-04-09 20:43:40 +02:00
cliff.toml fix: add \n between scoped and unscoped commits in git cliff config 2024-11-08 11:19:50 +01:00
code-header-template.txt fix: correct license header references (#882) 2025-06-10 12:18:38 +02:00
conductor.json chore(dev): add conductor config 2025-12-07 23:02:19 +01:00
config-raw.json feat(config): add audit logging config keys 2026-06-12 08:56:08 +00:00
crowdin.yml chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00
devenv.lock chore(deps): update devenv 2026-06-09 10:54:20 +02:00
devenv.nix feat: migrate cypress e2e tests to playwright (#1739) 2025-11-27 16:34:48 +01:00
devenv.yaml feat: switch from nix flakes to devenv 2024-08-12 12:17:31 +02:00
go.mod feat(api/v2): enable AutoPatch for automatic JSON Merge Patch 2026-05-31 12:56:57 +00:00
go.sum feat(api/v2): enable AutoPatch for automatic JSON Merge Patch 2026-05-31 12:56:57 +00:00
magefile.go feat(api/v2): serve Scalar docs UI at /api/v2/docs 2026-05-31 12:56:57 +00:00
main.go fix: correct license header references (#882) 2025-06-10 12:18:38 +02:00
mise.toml chore: add mise.toml to pin tool versions 2026-05-15 10:56:52 +00:00
nfpm.yaml feat(ci): sign RPM packages with GPG via nfpm 2026-04-14 15:47:31 +02:00
publiccode.yml chore: v2.3.0 release preparations 2026-04-09 20:43:40 +02:00
renovate.json chore(deps): group node and pnpm updates across mise and version files 2026-05-15 10:56:52 +00:00
tsconfig.json fix: correct trailing comma in tsconfig (#970) 2025-06-26 12:30:24 +00:00
vikunja.initd fix(release): use openrc for alpine (#1016) 2025-06-25 10:40:11 +00:00
vikunja.service chore: add missing eof newlines (#969) 2025-06-17 09:11:32 +00:00

README.md

Build Status License: AGPL-3.0-or-later Install Docker Pulls Swagger Docs Go Report Card

Vikunja

The Todo-app to organize your life.

If Vikunja is useful to you, please consider buying me a coffee, sponsoring me on GitHub or buying a sticker pack. I'm also offering a hosted version of Vikunja if you want a hassle-free solution for yourself or your team.

Table of contents

Security Reports

If you find any security-related issues you don't want to disclose publicly, please use the contact information on our website.

Features

See the features page on our website for a more exhaustive list or try it on try.vikunja.io!

Docs

All docs can be found on the Vikunja home page.

Roadmap

See the roadmap (hosted on Vikunja!) for more!

Contributing

Please check out the contribution guidelines on the website.

License

Most of this repository is licensed under AGPL3.0orlater. The contents of desktop/ are licensed under GPL3.0orlater.

Unsplash Images

Background images from Unsplash are distributed under the Unsplash License. The license requires giving credit to the photographer and Unsplash. See Unsplashs terms for more information.