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.
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.
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.
pnpm add @docyrus/i18nWeb 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:
| Prop | Type | Default | Description |
|---|---|---|---|
client | RestApiClient | — | Pre-configured API client (preferred auth method) |
getAccessToken | () => Promise<string | null> | — | Alternative auth for SSR or custom setups |
apiUrl | string | — | Required when using getAccessToken |
staticTranslations | TranslationDictionary | — | Pre-loaded translations (available immediately, no loading state) |
fallback | FallbackStrategy | 'key' | What to return when key not found: 'key', 'empty', or custom function |
disableApiFetch | boolean | false | Skip API fetch, use only staticTranslations |
cookieKey | string | 'docyrus-locale' | Cookie key for locale persistence |
mergeStrategy | 'api-first' | 'static-first' | 'api-first' | How to merge static and API translations |
userLanguageEndpoint | string | 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:
| Feature | Web | React Native |
|---|---|---|
| Import | @docyrus/i18n | @docyrus/i18n/rn |
| Provider | DocyrusI18nProvider | DocyI18nProvider |
| Hook | useTranslation(), useDocyrusI18n() | useI18n(), useTranslation() |
| Storage | Cookie (CookieStorageAdapter) | MMKV / AsyncStorage (getString/setString) |
| Languages | Any locale string | 'en' | 'tr' |
| Translation format | Flat dictionary | Nested ({ en: { common: { key: 'val' } } }) |
| Fallback without provider | Throws | Graceful (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.
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.
pnpm add -D @docyrus/rulesESLint Configs
Each config is composable — combine them based on your stack:
| Config | Import | Use for |
|---|---|---|
baseConfig | @docyrus/rules/eslint | All projects (TypeScript, import ordering, stylistic) |
reactConfig | @docyrus/rules/eslint | React projects (hooks, react-refresh) |
nextjsConfig | @docyrus/rules/eslint | Next.js projects (core-web-vitals) |
reactNativeConfig | @docyrus/rules/eslint | React Native / Expo projects |
vueConfig | @docyrus/rules/eslint | Vue 3 projects |
astroConfig | @docyrus/rules/eslint | Astro projects |
electronConfig | @docyrus/rules/eslint | Electron projects |
aiConfig | @docyrus/rules/eslint | AI/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:
| Rule | Behavior |
|---|---|
| TypeScript | Consistent type imports (import type), no unused vars |
| Import ordering | type → builtin → external → internal → sibling with blank lines |
| Unused imports | Error on unused imports |
| Stylistic | 2-space indent, single quotes, semicolons, trailing commas |
| React named imports | React.* namespace access forbidden — use named imports |
No console.log | Warning (allows warn, error, info) |
prefer-const | Error |
Biome Configs
Available as JSON preset files:
| Config | Path |
|---|---|
| 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.
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.
pnpm add -D @docyrus/logo-asset-generator@docyrus/dom-selector-client
DOM selector CLI client for programmatic element selection and inspection in web pages.
pnpm add @docyrus/dom-selector-client