Skip to main content

FTS SQL - Releases

← App details

Nextcloud 35

FTS SQL 1.1.0
Release Details
UpdatedOct. 26, 2026, 10:03 a.m.
Changelog

Added

  • Nextcloud 35 support: the manifest now pins majors 34–35. Checked against the 35 upgrade notes point by point — the PHP 8.3 server floor (the app keeps its own 8.2 floor so 34 installs keep updating), Symfony Console 7, the OCP\DB\Schema wrapper, the removed front-end globals and the removed Remote/preview APIs — nothing the app or the card uses was removed, and files_fulltextsearch 35 still fires its extension events as GenericEvent, so the streaming fast path registers exactly as on 34. Both ends of the range pass the four-engine integration matrix: 34.0.5 on PHP 8.2 and 35.0.2 on PHP 8.3.

Changed

  • The CI's framework checkout falls back to the app's default branch while fulltextsearch has not cut its stableNN branch — it cuts its branches after the server cuts its own.
  • Every dependency that could move moved: the card's npm set (notably @nextcloud/vue 9.13 and vue 3.5.43) and the dev shell's nixpkgs (which still ships PHP 8.2, so the manifest floor stays guarded). TypeScript stays 5.9 on purpose: the native 7 no longer exports the JS API vue-tsc still resolves, and bumping would leave the card without a typecheck.
  • A second dependency round: vue 3.5.44, vite 7.3.7, php-scoper 0.18.20, nixpkgs of 2026-10-15 (PHP 8.2.34), and the CI workflows synced with the current Nextcloud templates.
  • The value models are readonly classes and the services' injected dependencies are readonly constructor parameters; the last four hand-written constructor assignments promote their properties.

Security

  • composer.lock was gitignored, so every release resolved afresh: one built with a Composer older than 2.9 — which does not skip versions with advisories — would have bundled phpoffice/phpspreadsheet 4.5.0, under nine open advisories (phppresentation admits the 4 line, which has no patched release). The locks are now committed, resolved for PHP 8.2; composer.json conflicts with every affected version; and CI audits the committed lock and a refresh resolved with advisory blocking off.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhQtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTI0MTE1NTIzWhcNMzYxMjMwMTE1NTIzWjASMRAwDgYD
VQQDDAdmdHNfc3FsMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1SAw
Jmfae5ieoueiL8M2rWzbZhtNK7braqp17ydnHDs/yfhsDSH7ieZCxAwZUHrOKo/E
sgEyrelc8VkZt32t6MXQyivmsu5hynQvnXG6JCE/dxsFIMfeMEw908BEQEDZ7CWM
vybYgGlS0GyjmP/sJmycgOIQu6bSWF/Pj9Q/PrQNGbeHb/RYnR2ezJZxjZUmKoJB
AuLKuu7PvtqVWNnT4lrFNmmuzE5QOW7qKLBtfQTgPh3ICcDa4Nou1dw1j8GbgkP2
1gUvRs6kt/tWmvzDBC5LJMM0FyGGIkIzbflVaVpAEbhamjc+rJdm8mI5NmhDcjyQ
nmrvo7S6Pez4lwnxK7ZppvIEKCCwDIrPW/DNurO6CS9Fp2Wzd2woPbipSjJlVTHW
kCyfef3dPewT6Tfvu1ZeoIdYoHY63sHF+IPUMriPe6vBOQIwcU+x9IldhQZEBJYM
xOrq8whXcRBbst6wSRE7NaqQwBQLOL/kw0mYk+fPtZOu38lB54ue/xjad1zIUqrv
sdvDI8pmNRIILsdo4JGJZ3DLizaq6VMQIwl5Qa4GObnva+nKEPOayTdJdoVKW6w5
bX2c3OqnaBNRcCP0YXIxeYcp12o374ZEZeIFRwJ8t0SAPTy6f9Xc+CxE1ggTUTID
wHCJ2Ol5GDEXthIGICycjBFUj6t0bV+8fPfWJPsCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAKjQxmoMhibMV4jmrEDNj6qmGIzBkSm76UG2B42URqCtjPk8p24YXe8Vs
Hre6r6k5g9tzLPGzc+y63Cv95iLln8b+5XfwFT8uWnjLpti1KUedWj6x5V+b1VYM
jPJA+XxC5sWQSsvSN6DU8+xocesm3rdz44s0aWrHVGvZR9iN9DmRodLfJfYY6wid
/WWh8miTitO77MtJ0kEG+/BysMpEdTsZC6RTT/swUV7jNjYcA/Q8vWMA1SvsgYKH
fxe/5kstFllmGxH9PRS3hmVze54rfz7YXtbWyQnehiCQM47HmPKtx1y22DnZJHo8
TGCAfOgpkZu7bK6UVpAyNefJBUwBDw==
-----END CERTIFICATE-----
SignaturegqjaWdHuBsIDeIbzezsAj4sIe03uOIrC0snkW2vE1DYKXOcBOoYOxwK/4H+lmVZEDcRGG7B7fjHNOCvxuJkJPMdkzgvUHsD4pr6erCrd59ituimNoV+if8ihetXYdXxIbtKKkjWR7oXzCx0Z3edJYy3ULRq0kuruOWpTD1zFQxk9d6HKagxODU2whSrKL+pfwpud22wPBXIaiEOqX5Zmfv+6ZTORZnZD6tHr6QDtg57+P90sC9cqM8dWX4mJCAiEZnSjs1V6o6ZR6nRsi7LLVOJ3nuUuViFH7J2GGD0D1b4y11eYPl6jOWtZ9unaSDaGW6FWD5jLxlJeL0K544gAAUDSE0GUEphbWP9+tKCBL1RGLzQ+piAqensf0MczRjgxZ5tcSz5iRkmXt9ko13twB/BBl4UoITJ/N6vkePo/e/rUcNQTsR5aHrPIh665vElQPsLeMvkkNcFId/BXN5XQ0taJG2mjHTJZ7s9ILyYdbVESiaSXiNz8Gy2wS7IVQbJwTzyZS+kU39PuKmXm0eOJiFUXr9qQz0f+CjbA1MIvxRejPZm2i9eE5Mh4zmjLlDXhIK9U6hDFw8YxN/PRk+VmfjowRtuquPMitihqH2lQYeAXQw0wwNa/VJRc951Dgh44LvoqLg2BbIMXMw2Gvo5WoACMaisD14FnrxFx7zdUTyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=34.0.0,<36.0.0
Databases PostgreSQL >=14.0.0
MySQL
SQLite
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 34

FTS SQL 1.1.0
Release Details
UpdatedOct. 26, 2026, 10:03 a.m.
Changelog

Added

  • Nextcloud 35 support: the manifest now pins majors 34–35. Checked against the 35 upgrade notes point by point — the PHP 8.3 server floor (the app keeps its own 8.2 floor so 34 installs keep updating), Symfony Console 7, the OCP\DB\Schema wrapper, the removed front-end globals and the removed Remote/preview APIs — nothing the app or the card uses was removed, and files_fulltextsearch 35 still fires its extension events as GenericEvent, so the streaming fast path registers exactly as on 34. Both ends of the range pass the four-engine integration matrix: 34.0.5 on PHP 8.2 and 35.0.2 on PHP 8.3.

Changed

  • The CI's framework checkout falls back to the app's default branch while fulltextsearch has not cut its stableNN branch — it cuts its branches after the server cuts its own.
  • Every dependency that could move moved: the card's npm set (notably @nextcloud/vue 9.13 and vue 3.5.43) and the dev shell's nixpkgs (which still ships PHP 8.2, so the manifest floor stays guarded). TypeScript stays 5.9 on purpose: the native 7 no longer exports the JS API vue-tsc still resolves, and bumping would leave the card without a typecheck.
  • A second dependency round: vue 3.5.44, vite 7.3.7, php-scoper 0.18.20, nixpkgs of 2026-10-15 (PHP 8.2.34), and the CI workflows synced with the current Nextcloud templates.
  • The value models are readonly classes and the services' injected dependencies are readonly constructor parameters; the last four hand-written constructor assignments promote their properties.

Security

  • composer.lock was gitignored, so every release resolved afresh: one built with a Composer older than 2.9 — which does not skip versions with advisories — would have bundled phpoffice/phpspreadsheet 4.5.0, under nine open advisories (phppresentation admits the 4 line, which has no patched release). The locks are now committed, resolved for PHP 8.2; composer.json conflicts with every affected version; and CI audits the committed lock and a refresh resolved with advisory blocking off.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhQtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTI0MTE1NTIzWhcNMzYxMjMwMTE1NTIzWjASMRAwDgYD
VQQDDAdmdHNfc3FsMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1SAw
Jmfae5ieoueiL8M2rWzbZhtNK7braqp17ydnHDs/yfhsDSH7ieZCxAwZUHrOKo/E
sgEyrelc8VkZt32t6MXQyivmsu5hynQvnXG6JCE/dxsFIMfeMEw908BEQEDZ7CWM
vybYgGlS0GyjmP/sJmycgOIQu6bSWF/Pj9Q/PrQNGbeHb/RYnR2ezJZxjZUmKoJB
AuLKuu7PvtqVWNnT4lrFNmmuzE5QOW7qKLBtfQTgPh3ICcDa4Nou1dw1j8GbgkP2
1gUvRs6kt/tWmvzDBC5LJMM0FyGGIkIzbflVaVpAEbhamjc+rJdm8mI5NmhDcjyQ
nmrvo7S6Pez4lwnxK7ZppvIEKCCwDIrPW/DNurO6CS9Fp2Wzd2woPbipSjJlVTHW
kCyfef3dPewT6Tfvu1ZeoIdYoHY63sHF+IPUMriPe6vBOQIwcU+x9IldhQZEBJYM
xOrq8whXcRBbst6wSRE7NaqQwBQLOL/kw0mYk+fPtZOu38lB54ue/xjad1zIUqrv
sdvDI8pmNRIILsdo4JGJZ3DLizaq6VMQIwl5Qa4GObnva+nKEPOayTdJdoVKW6w5
bX2c3OqnaBNRcCP0YXIxeYcp12o374ZEZeIFRwJ8t0SAPTy6f9Xc+CxE1ggTUTID
wHCJ2Ol5GDEXthIGICycjBFUj6t0bV+8fPfWJPsCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAKjQxmoMhibMV4jmrEDNj6qmGIzBkSm76UG2B42URqCtjPk8p24YXe8Vs
Hre6r6k5g9tzLPGzc+y63Cv95iLln8b+5XfwFT8uWnjLpti1KUedWj6x5V+b1VYM
jPJA+XxC5sWQSsvSN6DU8+xocesm3rdz44s0aWrHVGvZR9iN9DmRodLfJfYY6wid
/WWh8miTitO77MtJ0kEG+/BysMpEdTsZC6RTT/swUV7jNjYcA/Q8vWMA1SvsgYKH
fxe/5kstFllmGxH9PRS3hmVze54rfz7YXtbWyQnehiCQM47HmPKtx1y22DnZJHo8
TGCAfOgpkZu7bK6UVpAyNefJBUwBDw==
-----END CERTIFICATE-----
SignaturegqjaWdHuBsIDeIbzezsAj4sIe03uOIrC0snkW2vE1DYKXOcBOoYOxwK/4H+lmVZEDcRGG7B7fjHNOCvxuJkJPMdkzgvUHsD4pr6erCrd59ituimNoV+if8ihetXYdXxIbtKKkjWR7oXzCx0Z3edJYy3ULRq0kuruOWpTD1zFQxk9d6HKagxODU2whSrKL+pfwpud22wPBXIaiEOqX5Zmfv+6ZTORZnZD6tHr6QDtg57+P90sC9cqM8dWX4mJCAiEZnSjs1V6o6ZR6nRsi7LLVOJ3nuUuViFH7J2GGD0D1b4y11eYPl6jOWtZ9unaSDaGW6FWD5jLxlJeL0K544gAAUDSE0GUEphbWP9+tKCBL1RGLzQ+piAqensf0MczRjgxZ5tcSz5iRkmXt9ko13twB/BBl4UoITJ/N6vkePo/e/rUcNQTsR5aHrPIh665vElQPsLeMvkkNcFId/BXN5XQ0taJG2mjHTJZ7s9ILyYdbVESiaSXiNz8Gy2wS7IVQbJwTzyZS+kU39PuKmXm0eOJiFUXr9qQz0f+CjbA1MIvxRejPZm2i9eE5Mh4zmjLlDXhIK9U6hDFw8YxN/PRk+VmfjowRtuquPMitihqH2lQYeAXQw0wwNa/VJRc951Dgh44LvoqLg2BbIMXMw2Gvo5WoACMaisD14FnrxFx7zdUTyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=34.0.0,<36.0.0
Databases PostgreSQL >=14.0.0
MySQL
SQLite
Minimum Integer bits32
PHP>=8.2.0
FTS SQL 1.0.0
Release Details
UpdatedSept. 24, 2026, 7:51 p.m.
Changelog

The first public release — milestones 1–4 of DESIGN.md.

Added

  • A full text search platform for the fulltextsearch framework that indexes into PostgreSQL 14+, MySQL/MariaDB and SQLite — the database the instance already runs, with no Elasticsearch to operate.
  • Access decided by the share graph, fail-closed, through per-document access tokens: the same shares that decide who opens a file decide what search finds.
  • Pure-PHP extraction over streams under a memory budget: plain text, OOXML (.docx, .xlsx, .pptx), ODF, a hand-written PDF stack (a ~70 MiB peak where the library route fatally needed 697.5 MiB), and the legacy Office formats (.doc, .xls, .ppt) through php-scoper-scoped PhpOffice readers.
  • An admin card in the Nextcloud design system (Vue + TypeScript), with per-cause extraction counts; the unified-search excerpt centres on the matched word, and its Date chip narrows over the stored modified.
  • The two settings endpoints are OCS (/ocs/v2.php/apps/fts_sql/…), with their contract in openapi.json: generated from the controllers by the official extractor, committed, and kept honest by a CI leg that regenerates it on every pull request. The same run generates the card's TypeScript types from the spec (openapi-typescript), so the endpoints it calls and the payloads it sends are compiler-checked.
  • Catalan and Spanish translations of the admin card — the official l10n flow, with the Catalan reviewed by Softcatalà.
  • A dark-theme app icon.
  • CI on the official Nextcloud template set — patched like every app outside the org — with coverage on the SQLite leg and dependency automation (dependabot, weekly audit and nextcloud/ocp PRs).
  • Benchmark stages with kept results: search quality over a fixed trilingual corpus, extraction peaks and speeds, scale (100k/1M) and access-filter correctness under load.
  • The four-engine integration matrix — in CI and mirrored locally — and a Playwright suite over the admin card.
  • A store manifest that says what ships: the full format list, the documentation URLs, the screenshots, the website and the repository.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhQtMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTI0MTE1NTIzWhcNMzYxMjMwMTE1NTIzWjASMRAwDgYD
VQQDDAdmdHNfc3FsMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1SAw
Jmfae5ieoueiL8M2rWzbZhtNK7braqp17ydnHDs/yfhsDSH7ieZCxAwZUHrOKo/E
sgEyrelc8VkZt32t6MXQyivmsu5hynQvnXG6JCE/dxsFIMfeMEw908BEQEDZ7CWM
vybYgGlS0GyjmP/sJmycgOIQu6bSWF/Pj9Q/PrQNGbeHb/RYnR2ezJZxjZUmKoJB
AuLKuu7PvtqVWNnT4lrFNmmuzE5QOW7qKLBtfQTgPh3ICcDa4Nou1dw1j8GbgkP2
1gUvRs6kt/tWmvzDBC5LJMM0FyGGIkIzbflVaVpAEbhamjc+rJdm8mI5NmhDcjyQ
nmrvo7S6Pez4lwnxK7ZppvIEKCCwDIrPW/DNurO6CS9Fp2Wzd2woPbipSjJlVTHW
kCyfef3dPewT6Tfvu1ZeoIdYoHY63sHF+IPUMriPe6vBOQIwcU+x9IldhQZEBJYM
xOrq8whXcRBbst6wSRE7NaqQwBQLOL/kw0mYk+fPtZOu38lB54ue/xjad1zIUqrv
sdvDI8pmNRIILsdo4JGJZ3DLizaq6VMQIwl5Qa4GObnva+nKEPOayTdJdoVKW6w5
bX2c3OqnaBNRcCP0YXIxeYcp12o374ZEZeIFRwJ8t0SAPTy6f9Xc+CxE1ggTUTID
wHCJ2Ol5GDEXthIGICycjBFUj6t0bV+8fPfWJPsCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAKjQxmoMhibMV4jmrEDNj6qmGIzBkSm76UG2B42URqCtjPk8p24YXe8Vs
Hre6r6k5g9tzLPGzc+y63Cv95iLln8b+5XfwFT8uWnjLpti1KUedWj6x5V+b1VYM
jPJA+XxC5sWQSsvSN6DU8+xocesm3rdz44s0aWrHVGvZR9iN9DmRodLfJfYY6wid
/WWh8miTitO77MtJ0kEG+/BysMpEdTsZC6RTT/swUV7jNjYcA/Q8vWMA1SvsgYKH
fxe/5kstFllmGxH9PRS3hmVze54rfz7YXtbWyQnehiCQM47HmPKtx1y22DnZJHo8
TGCAfOgpkZu7bK6UVpAyNefJBUwBDw==
-----END CERTIFICATE-----
SignatureWYz/iBhz+bZHl1/EKDDXXDpWZOWY2Q0eYxjruwfwB+Pm94hdx8cP17IvD3jCoT1yUkddZpdC5BFzVE/a1FXZ8vUn5/gUMGQtOFWf5860AB7iBzjQsSPpMkYVWDn3C6uktXyBxRdp5BZ/T2K358Vy+5itmFkx63/1H7a3nxSPwKsJcdHZPym1SdRaFlBtRhl/srqK+vL59HWGDiB1pJMyk1bZdMD9U8JnZz0nx0CMiaV0uXLrB9i+G7l7yiZTpa/lZmSxLEKTgd3urQFtn7UH+pMCGGvGFuFIodE4fI2GZVEYJI0hxMFfwfNyi91m0028yNVqSuBOm1qgEaMSeeIitS2N+4NTLxgwfv5Ps4zk5slnXD2BZZX0Ig8HutRFtJ6PzkdDK/9hHgU48YSMDoJzgitJVBdQzjW2/RRJ3LRvJFsunMQfNig3qJIawYWQFi9Oi7zJYg9ObYUytis5qvJf7jekq2Jsheq56vZNBYoIP+FLdzktN94vu7s4gJsr1dR6yBJr9VLkEbHGrCOafB12JtOXxsh5eDSsOg+2AUvAaL1i6llFM8ZHoY7tlgRjUaXk1KdPaDGlPhzpbcbxjTdbaG7mp+ShRtjBUEa+aemdWJj3K09H6Ji+BeRIhwi00kX8QIprRIa/P+bh3G47mprD9vxejfeT9bl+46lEpwnKMRk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=34.0.0,<35.0.0
Databases PostgreSQL >=14.0.0
MySQL
SQLite
Minimum Integer bits32
PHP>=8.2.0