@bun-win32/cldapi
Zero-dependency, zero-overhead Win32 Cloud Filter API (cldapi.dll) bindings for Bun on Windows.
Overview
@bun-win32/cldapi exposes the cldapi.dll exports using Bun's FFI. It provides a single class, Cldapi, which lazily binds native symbols on first use. You can optionally preload a subset or all symbols up-front via Preload().
cldapi.dll is the Cloud Files API (header cfapi.h) — the platform behind OneDrive Files On-Demand. It lets a sync provider register a sync root, project placeholder files (files that appear with full size and metadata in Explorer but occupy no disk until hydrated), hydrate/dehydrate on demand, and inspect the placeholder/sync-root state of any file.
The bindings are strongly typed for a smooth DX in TypeScript.
Features
- Bun-first ergonomics on Windows 10/11.
- Direct FFI to
cldapi.dll(sync roots, placeholders, hydration, transfer keys, platform info). - In-source docs in
structs/Cldapi.tswith links to Microsoft Docs. - Lazy binding on first call; optional eager preload (
Cldapi.Preload()). - No wrapper overhead; calls map 1:1 to native APIs.
- Strongly-typed Win32 aliases (see
types/Cldapi.ts).
Requirements
- Bun runtime
- Windows 10 version 1709 or later
Installation
bun add @bun-win32/cldapiQuick Start
import Cldapi from '@bun-win32/cldapi';
// CF_PLATFORM_INFO { DWORD BuildNumber; DWORD RevisionNumber; DWORD IntegrationNumber; }
const info = Buffer.alloc(12);
const hr = Cldapi.CfGetPlatformInfo(info.ptr!);
if (hr === 0) {
console.log('Build :', info.readUInt32LE(0));
console.log('Revision :', info.readUInt32LE(4));
console.log('Integration: 0x' + info.readUInt32LE(8).toString(16));
}
// Decode the placeholder state of any file straight from its attributes/reparse tag
const FILE_ATTRIBUTE_DIRECTORY = 0x10;
const state = Cldapi.CfGetPlaceholderStateFromAttributeTag(FILE_ATTRIBUTE_DIRECTORY, 0);
console.log('Placeholder state:', state);AI agents: see
AI.mdfor the package binding contract and source-navigation guidance. It explains how to use the package without scanning the entire implementation.
Examples
Run the included examples:
bun run example/cloud-mirage.ts
bun run example/placeholder-diagnostic.ts- cloud-mirage — registers a real sync root in a temp directory and projects a catalog of multi-gigabyte placeholder "files" that occupy zero bytes on disk, then animates the reveal and decodes every placeholder's state. Pure FFI; no provider process.
- placeholder-diagnostic — a full Cloud Files report: platform version + integration capability gates, sync-root detection for any directory (OneDrive included), and per-file placeholder/pin/in-sync/on-disk-vs-logical analysis.
Notes
- Either rely on lazy binding or call
Cldapi.Preload(). HRESULTreturns arenumber;S_OKis0. Negative-looking values are error HRESULTs — mask with>>> 0to print as hex.CF_CONNECTION_KEY,CF_TRANSFER_KEY, andCF_REQUEST_KEYare opaque 8-byte keys modeled asbigint(passed/returned by value); theirP*pointer forms arePointerout-params.- Windows only. Bun runtime required.
- SAL types & naming: nullability is in the type —
OPTIONAL<T>(formally optional, SAL_*opt_) andNULLABLE<T>(plain[in]/[out]the docs say can be NULL), the null sentinel derived fromT(nullfor pointersLP*/P*,0nfor handles/by-value addresses); direction is in the parameter name —_out(_Out_),_in_out(_Inout_),_In_bare. SeeAI.mdand the repoAGENTS.md.