npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@meeovi/adapter-directus

v1.0.0

Published

Directus Client Library with auto generating forms and tables, Directus SDK and Types, and vue/react components for Directus Visual Editing.

Readme

@meeovi/directus-client

A framework-agnostic, type-safe Directus client with optional bindings for Vue 3, Nuxt 3, and React. Includes schema introspection, auto-form and auto-table generators, validation utilities, and visual-editing / live-preview helpers.

Designed for modular, provider-agnostic platforms like Meeovi, but usable in any Directus-powered project.

Features

  • Framework-agnostic Directus client
  • Vue 3 bindings (useDirectus, DirectusVueProvider)
  • React bindings (useDirectus, DirectusReactProvider)
  • Schema introspection
  • Auto-form engine
  • Auto-table engine
  • Validation engine
  • Widget registry
  • Visual editing utilities
  • Live preview utilities
  • Fully typed and tree-shakeable

Installation

npm install @meeovi/directus-client
# or
pnpm add @meeovi/directus-client

Package structure

src/
  client/
    createClient.ts
  vue/
    DirectusProvider.ts
    useDirectus.ts
  react/
    DirectusProvider.tsx
    useDirectus.ts
  schema/
    types.ts
    introspect.ts
  utils/
    collections.ts
    fields.ts
  generators/
    form-engine.ts
    table-engine.ts
    validation-engine.ts
    widget-registry.ts
  visual-editing.ts
  live-preview.ts
  index.ts

Usage

1) Framework-agnostic

import { createMeeoviDirectusClient } from '@meeovi/directus-client';

const directus = createMeeoviDirectusClient('https://your-directus-url.com');

// Example request
const products = await directus.client.request(directus.readItems('products'));

2) Vue 3

Wrap your app:

import { DirectusVueProvider, createMeeoviDirectusClient } from '@meeovi/directus-client';

const directus = createMeeoviDirectusClient('https://cms.example.com');
<template>
  <DirectusVueProvider :client="directus">
    <App />
  </DirectusVueProvider>
</template>

Use inside components:

import { useDirectus } from '@meeovi/directus-client';

const directus = useDirectus();
const items = await directus.client.request(directus.readItems('articles'));

3) Nuxt 3

Create a plugin:

// plugins/directus.client.ts
import { defineNuxtPlugin, useRuntimeConfig } from '#imports';
import { createMeeoviDirectusClient, DirectusVueProvider } from '@meeovi/directus-client';

export default defineNuxtPlugin((nuxtApp) => {
  const config = useRuntimeConfig();
  const directus = createMeeoviDirectusClient(config.public.directus.url);

  nuxtApp.provide('directus', directus);
  nuxtApp.vueApp.component('DirectusVueProvider', DirectusVueProvider);
});

Use it:

const { $directus } = useNuxtApp();
const posts = await $directus.client.request($directus.readItems('posts'));

4) React

Wrap your app:

import { DirectusReactProvider, createMeeoviDirectusClient } from '@meeovi/directus-client';

const directus = createMeeoviDirectusClient('https://cms.example.com');

export function App() {
  return (
    <DirectusReactProvider client={directus}>
      <YourRoutes />
    </DirectusReactProvider>
  );
}

Use inside components:

import { useDirectus } from '@meeovi/directus-client';
const directus = useDirectus();
const items = await directus.client.request(directus.readItems('products'));

Schema introspection

import { introspectSchema } from '@meeovi/directus-client';

const schema = await introspectSchema(directus.client);
console.log(schema.directus_fields);

Auto-Form Engine

import { createFormEngine } from '@meeovi/directus-client';

const engine = createFormEngine('products', fields, directus);
engine.form.title = 'New Product';
const result = await engine.submit();

Auto-Table Engine

import { generateTableSchema } from '@meeovi/directus-client';
const table = generateTableSchema(fields);
console.log(table);

Validation Engine

import { validateField } from '@meeovi/directus-client';
const error = validateField(field, value);
if (error) console.error(error);

Widget Registry

import { widgetRegistry } from '@meeovi/directus-client';
console.log(widgetRegistry.text.component);

Visual Editing (framework-agnostic)

import { createVisualEditing } from '@meeovi/directus-client';

const visual = createVisualEditing({
  enableVisualEditing: true,
  directusUrl: 'https://cms.example.com',
  query: { 'visual-editing': 'true' },

Note: adapter credentials and endpoints can be centrally configured in your main app's `.env` file. See the repository `.env.example` for recommended variable names.
});

visual.apply({ elements: document.querySelectorAll('[data-editable]') });

Live Preview (framework-agnostic)

import { createLivePreview } from '@meeovi/directus-client';

const preview = createLivePreview({
  query: Object.fromEntries(new URLSearchParams(location.search)),
});

if (preview.enabled) {
  console.log('Preview token:', preview.state.token);
}

TypeScript support

Everything is fully typed: Directus schema, client methods, form/table generators, visual editing, live preview, and framework bindings.

Build

If you’re working inside a monorepo:

npm --workspace @meeovi/directus-client run build
# or
pnpm --filter @meeovi/directus-client build

Contributing

PRs are welcome. This package is designed to be modular, extensible, and framework-agnostic — contributions that improve developer experience or expand framework bindings are encouraged.

License

MIT © Meeovi