Skip to content

Roadmap: complete remaining performance, architecture and ecosystem items - #13

Merged
dkruempe merged 5 commits into
masterfrom
feature/roadmap-complete
Oct 24, 2026
Merged

dkruempe merged 5 commits into
masterfrom
feature/roadmap-complete

Conversation

@dkruempe

Copy link
Copy Markdown
Owner

Summary

Completes the remaining open, repo-local items from ROADMAP.md. The only
external follow-up left is the actual google/oss-fuzz submission PR; the
project recipe is ready in oss-fuzz/.

Performance / streaming

  • KDBX 4 attachments are lazy: one shared, zeroized buffer backs all inner-header
    binaries; Binary::data() materializes on demand and Binary::WriteTo()
    streams during export.
  • KeePass::Open(path) uses mmap/CreateFileMapping through
    detail::MappedFile, with an ifstream fallback.
  • KDBX 4 export writes attachment bytes directly into the payload pipeline.

Architecture / modularity

  • Registrable FormatCodec/FormatCodecRegistry + DatabaseSerializer
    abstraction; KeePass no longer has a format switch.
  • Registrable CipherRegistry and KdfRegistry for block ciphers and KDFs.
  • Leaner public headers (cipher.hh no longer includes OpenSSL,
    keepass.hh no longer pulls kdbx.hh).
  • Optional CMake codecs (LIBKEEPASS_COMPONENT_KDB/_KDBX) and
    component-aware find_package(... COMPONENTS ...) metadata/targets.
  • Ownership and ABI/deprecation policies documented; SOVERSION 0 set.

APIs / usability

  • Stable C ABI libkeepass-c with opaque handles, open/save, JSON/CSV,
    lookup/editing and thread-local errors.
  • Database::DeltaSince() / DatabaseDelta::ToJson() for incremental backups.
  • CsvFormat::kCsvWithCustomFields and kCsvKeePass2.
  • TOTP helpers (TotpConfig, Totp, Entry::totp()), history trimming,
    kpx otp --code and kpx purge --keep.
  • Structured ErrorCategory, UnsupportedFeatureError,
    ResourceLimitError and parser offsets.

Ecosystem / infrastructure

  • OSS-Fuzz project recipe, WASM client-side demo, vcpkg port, Homebrew formula.
  • Keyless Sigstore/cosign signing of release assets.
  • setup-conan cache modes replace per-workflow cache steps; Windows
    clang-tidy job.

Validation

  • ctest --test-dir build --output-on-failure: 21/21 passed
  • conan create . --build=missing: package + test_package passed
  • KDB-only component build (-DLIBKEEPASS_COMPONENT_KDBX=OFF): passed
  • Install check: versioned sonames and libkeepass-c installed
  • clang-format --dry-run --Werror on changed C++ files: clean
  • GitHub workflow YAML parses successfully

- lazy KDBX4 attachments, mmap input and direct attachment streaming
- format/cipher/KDF registries, DatabaseSerializer and CMake components
- stable C ABI, incremental backups and extra CSV layouts
- TOTP/history helpers, richer errors and CLI flags
- OSS-Fuzz recipe, WASM demo, vcpkg/Homebrew, signing and CI updates
@codecov-commenter

codecov-commenter commented Oct 23, 2026 •

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 76.09912% with 299 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
capi/libkeepass-c.cc 54.59% 89 Missing ⚠️
src/totp.cc 83.65% 43 Missing ⚠️
test/capi.cc 44.06% 19 Missing and 14 partials ⚠️
src/binary.cc 66.66% 26 Missing ⚠️
src/database.cc 81.53% 24 Missing ⚠️
src/mapped_file.cc 71.15% 15 Missing ⚠️
src/kdbx_import.cc 81.69% 13 Missing ⚠️
src/exception.cc 26.66% 11 Missing ⚠️
src/variantdictionary.cc 33.33% 10 Missing ⚠️
cli/kpx.cc 54.54% 5 Missing ⚠️
... and 13 more

📢 Thoughts on this report? Let us know!

Comment thread src/mapped_file.cc
Comment on lines +143 to +155
switch (way) {
case std::ios_base::beg:
base = 0;
break;
case std::ios_base::cur:
base = gptr() - eback();
break;
case std::ios_base::end:
base = end_ - begin_;
break;
default:
return std::streampos(std::streamoff(-1));
}
Comment thread src/totp.cc
const int lo = hex(value[i + 2]);
if (hi >= 0 && lo >= 0) {
decoded.push_back(static_cast<char>((hi << 4) | lo));
i += 2;
Binary methods moved out of line but the class lacked LIBKEEPASS_API,
so MSVC tests failed to link against the DLL. The Windows lint job now
downloads run-clang-tidy.py instead of assuming LLVM ships it.
Use scoped locks, concatenated nested namespaces, guarded C ABI
typedefs, braced streampos returns and non-empty exception handling.
Also make the optional-access tests explicit for the new checker.
@dkruempe
dkruempe merged commit 285365f into master Oct 24, 2026
23 of 25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants