Guide

Packages

Official Docyrus NPM packages for authentication, API integration, code generation, and developer tooling.

All @docyrus/* packages are published on NPM and designed to work together. They cover authentication, API integration, code generation, and developer tooling for Docyrus-powered applications.

Core

@docyrus/api-client

A modern, type-safe API client for JavaScript and TypeScript with support for multiple backend types, streaming, error handling, and token management.

npm

pnpm add @docyrus/api-client

@docyrus/signin

Authentication provider for Docyrus apps. Supports React, Vue, Electron, and Next.js SSR with OAuth2 and session management.

npm

pnpm add @docyrus/signin

@docyrus/i18n

Internationalization provider with API-based and static translation support, cookie-based locale persistence, and variable interpolation. Works across Web, React Native, and Vue.

npm

pnpm add @docyrus/i18n

Web Usage

Wrap your app with DocyrusI18nProvider:

import { DocyrusI18nProvider } from '@docyrus/i18n';

<DocyrusI18nProvider
  client={apiClient}           // RestApiClient from @docyrus/api-client
  staticTranslations={dict}    // Optional pre-loaded translations (SSR)
  fallback="key"               // 'key' | 'empty' | ((key) => string)
  cookieKey="docyrus-locale"   // Cookie key for locale persistence
>
  <App />
</DocyrusI18nProvider>

Access translations with hooks:

import { useTranslation, useDocyrusI18n } from '@docyrus/i18n';

// Lightweight — only t() and isLoading
function MyComponent() {
  const { t, isLoading } = useTranslation();

  return <span>{t('common.save', 'Save')}</span>;
}

// Full context — locale, setLocale, status, refetch...
function LocaleSwitcher() {
  const { locale, setLocale } = useDocyrusI18n();

  return <button onClick={() => setLocale('tr')}>Türkçe</button>;
}

Translation signatures:

t('key')                             // → translated string or key
t('key', 'Fallback text')            // → translated string or fallback
t('key', { name: 'Ali', count: 5 }) // → interpolated value
tv('translate.Active')               // → API value translation (strips 'translate.' prefix)

SSR support:

import { fetchTranslationsSSR } from '@docyrus/i18n';

const translations = await fetchTranslationsSSR({
  apiUrl: process.env.DOCYRUS_API_URL,
  getAccessToken: () => getServerToken(),
});

<DocyrusI18nProvider staticTranslations={translations} disableApiFetch>
  <App />
</DocyrusI18nProvider>

Provider Props:

PropTypeDefaultDescription
clientRestApiClient—Pre-configured API client (preferred auth method)
getAccessToken() => Promise<string | null>—Alternative auth for SSR or custom setups
apiUrlstring—Required when using getAccessToken
staticTranslationsTranslationDictionary—Pre-loaded translations (available immediately, no loading state)
fallbackFallbackStrategy'key'What to return when key not found: 'key', 'empty', or custom function
disableApiFetchbooleanfalseSkip API fetch, use only staticTranslations
cookieKeystring'docyrus-locale'Cookie key for locale persistence
mergeStrategy'api-first' | 'static-first''api-first'How to merge static and API translations
userLanguageEndpointstring | false'v1/users/me'PATCH endpoint to persist locale to user profile

React Native Usage

Import from the /rn subpath:

import { DocyI18nProvider, useI18n, useTranslation } from '@docyrus/i18n/rn';

<DocyI18nProvider
  fetchRemote={fetchTranslations}
  defaultTranslations={{
    en: { common: { save: 'Save', cancel: 'Cancel' } },
    tr: { common: { save: 'Kaydet', cancel: 'İptal' } },
  }}
  defaultLanguage="en"
  userLanguage={userData?.language}  // e.g. "tr_TR" — auto-synced from user profile
  storage={storage}                  // getString/setString pattern (MMKV compatible)
>
  <App />
</DocyI18nProvider>
import { useI18n } from '@docyrus/i18n/rn';

function MyComponent() {
  const { t, tv, lang, setLanguage, isLoading } = useI18n();

  return <Text>{t('common.save')}</Text>;
}

Key differences from web:

FeatureWebReact Native
Import@docyrus/i18n@docyrus/i18n/rn
ProviderDocyrusI18nProviderDocyI18nProvider
HookuseTranslation(), useDocyrusI18n()useI18n(), useTranslation()
StorageCookie (CookieStorageAdapter)MMKV / AsyncStorage (getString/setString)
LanguagesAny locale string'en' | 'tr'
Translation formatFlat dictionaryNested ({ en: { common: { key: 'val' } } })
Fallback without providerThrowsGraceful (returns key)

Dev Tools

@docyrus/tanstack-db-generator

Code generator for TanStack Query and database integration. Generates typed collections from OpenAPI specs for the Docyrus API.

npm

pnpm add -D @docyrus/tanstack-db-generator

@docyrus/rules

Shared ESLint and Biome configurations for Docyrus projects. Provides consistent linting and formatting rules across your codebase.

npm

pnpm add -D @docyrus/rules

ESLint Configs

Each config is composable — combine them based on your stack:

ConfigImportUse for
baseConfig@docyrus/rules/eslintAll projects (TypeScript, import ordering, stylistic)
reactConfig@docyrus/rules/eslintReact projects (hooks, react-refresh)
nextjsConfig@docyrus/rules/eslintNext.js projects (core-web-vitals)
reactNativeConfig@docyrus/rules/eslintReact Native / Expo projects
vueConfig@docyrus/rules/eslintVue 3 projects
astroConfig@docyrus/rules/eslintAstro projects
electronConfig@docyrus/rules/eslintElectron projects
aiConfig@docyrus/rules/eslintAI/LLM integrations

Next.js setup (eslint.config.mjs):

import { baseConfig, reactConfig, nextjsConfig } from '@docyrus/rules/eslint';

export default [
  ...baseConfig,
  ...reactConfig,
  ...nextjsConfig,
];

React + Vite setup:

import { baseConfig, reactConfig } from '@docyrus/rules/eslint';

export default [
  ...baseConfig,
  ...reactConfig,
];

Expo / React Native setup:

import { baseConfig, reactConfig, reactNativeConfig } from '@docyrus/rules/eslint';

export default [
  ...baseConfig,
  ...reactConfig,
  ...reactNativeConfig,
];

Key rules enforced by baseConfig:

RuleBehavior
TypeScriptConsistent type imports (import type), no unused vars
Import orderingtype → builtin → external → internal → sibling with blank lines
Unused importsError on unused imports
Stylistic2-space indent, single quotes, semicolons, trailing commas
React named importsReact.* namespace access forbidden — use named imports
No console.logWarning (allows warn, error, info)
prefer-constError

Biome Configs

Available as JSON preset files:

ConfigPath
Base@docyrus/rules/biome/base
React@docyrus/rules/biome/react
Next.js@docyrus/rules/biome/nextjs
Vue@docyrus/rules/biome/vue
Astro@docyrus/rules/biome/astro
Cloudflare@docyrus/rules/biome/cloudflare
Electron@docyrus/rules/biome/electron

Biome setup (biome.json):

{
  "extends": ["@docyrus/rules/biome/nextjs"]
}

Utilities

@docyrus/addin-client

Client for embedded add-ins to communicate with the host app from an iframe using postMessage. Handles handshake, RPC calls, and event dispatching.

npm

pnpm add @docyrus/addin-client

@docyrus/logo-asset-generator

CLI tool to generate favicon and app icons from a source logo. Produces all required sizes for web, iOS, and Android.

npm

pnpm add -D @docyrus/logo-asset-generator

@docyrus/dom-selector-client

DOM selector CLI client for programmatic element selection and inspection in web pages.

npm

pnpm add @docyrus/dom-selector-client

On this page