@directus/sdk

中文文档
27.1.0发布于 2026/10/28MITESM + CJS零依赖构建来源已验证近 30 天下载 70.7万

Directus JavaScript SDK

原始使用文档
文档目录5 节
  1. Features
  2. Composable Client
  3. Authentication
  4. Real-Time
  5. Build Your Schema

Directus JavaScript SDK

Features

  • TypeScript first: The SDK provides a robust and type-safe development experience.
  • Modular architecture: The SDK is split into separate modules, giving you granular control over which features to include and which can be pruned at build-time.
  • Lightweight and dependency-free: It does not require external libraries, ensuring a lighter bundle and streamlined experience.

Composable Client

The client is split up in separate features you can mix and match to compose a client with only the features you need or want.

const client = createDirectus<Schema>('https://directus.example.com');

This client is currently an empty wrapper without any functionality. Before you can do anything with it you'll need to add some features. The following composables are available/in progress:

  • rest() REST request functions
    • adds .request(...) on the client
  • graphql() GraphQL request functions
    • adds .query(...) on the client
  • staticToken() authentication functions
    • adds .getToken() and .setToken() on the client
  • authenticate() authentication functions
    • adds .login({ email, password }), .logout(), .refresh() on the client
    • adds .getToken() and .setToken() on the client
  • realtime() websocket connectivity
    • adds .subscribe(...), .sendMessage(...), .onWebsocket('message', (message) => {}) on the client

For this example we'll build a client including rest and graphql:

const client = createDirectus<Schema>('https://directus.example.com').with(rest()).with(graphql());

// do a REST request
const restResult = await client.request(readItems('articles'));

// do a GraphQL request
const gqlResult = await client.query<OutputType>(`
    query {
        articles {
            id
            title
            author {
                first_name
            }
        }
    }
`);

Authentication

const client = createDirectus<Schema>('https://directus.example.com').with(rest()).with(authentication('json'));

await client.login('[email protected]', 'd1r3ctu5');

// do authenticated requests
const client = createDirectus<Schema>('https://directus.example.com')
    .with(rest())
    .with(staticToken('super-secure-token'));

// do authenticated requests

Real-Time

The realtime() extension allows you to work with a Directus REST WebSocket.

Subscribing to updates:

const client = createDirectus<Schema>('https://directus.example.com').with(
    realtime({
        authMode: 'public',
    }),
);

const { subscription, unsubscribe } = await client.subscribe('test', {
    query: { fields: ['*'] },
});

for await (const item of subscription) {
    console.log('subscription', { item });
}

// unsubscribe()

Receive/Send messages:

const client = createDirectus<Schema>('https://directus.example.com').with(
    realtime({
        authMode: 'public',
    }),
);

const stop = client.onWebSocket('message', (message) => {
    if ('type' in message && message['type'] === 'pong') {
        console.log('PONG received');
        stop();
    }
});

client.sendMessage({ type: 'ping' });

Build Your Schema

// The main schema type containing all collections available
interface MySchema {
    collection_a: CollectionA[]; // regular collections are array types
    collection_b: CollectionB[];
    collection_c: CollectionC; // this is a singleton
    // junction collections are collections too
    collection_a_b_m2m: CollectionAB_Many[];
    collection_a_b_m2a: CollectionAB_Any[];
}

// collection A
interface CollectionA {
    id: number;
    status: string;
    // relations
    m2o: number | CollectionB;
    o2m: number[] | CollectionB[];
    m2m: number[] | CollectionAB_Many[];
    m2a: number[] | CollectionAB_Any[];
}

// Many-to-Many junction table
interface CollectionAB_Many {
    id: number;
    collection_a_id: CollectionA;
    collection_b_id: CollectionB;
}

// Many-to-Any junction table
interface CollectionAB_Any {
    id: number;
    collection_a_id: CollectionA;
    collection: 'collection_b' | 'collection_c';
    item: string | CollectionB | CollectionC;
}

// collection B
interface CollectionB {
    id: number;
    value: string;
}

// singleton collection
interface CollectionC {
    id: number;
    app_settings: string;
    something: string;
}

版本与发布记录

@directus/sdk 共发布 160 个版本,首次发布于 2021/04/07;过去 12 个月发布了 18 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
27.1.0latest2026/10/2815 天前
27.0.02026/10/081 个月前
26.0.02026/09/231 个月前
25.0.12026/08/262 个月前
25.0.02026/08/192 个月前
24.0.02026/07/303 个月前

其他发布通道:beta → 11.0.0-beta.6,canary → 22.0.0-rc.1。

关于 @directus/sdk 的常见问题

@directus/sdk 是什么?

Directus JavaScript SDK

如何安装 @directus/sdk?

在项目目录运行 npm install @directus/sdk,或使用 pnpm add / yarn add / bun add。

@directus/sdk 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/directus__sdk 是否存在。

@directus/sdk 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@directus/sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@directus/sdk 可以商用吗?

@directus/sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@directus/sdk 的下载量有多少?

根据 npm 官方下载统计,@directus/sdk 在 2026/10/13 – 2026/11/11 这 30 天内被下载 707,464 次,日均约 23,582 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@directus/sdk 还在维护吗?

最新版本 27.1.0 发布于 2026/10/28(15 天前);至今共发布 160 个版本,其中过去 12 个月发布了 18 个;首次发布于 2021/04/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。