@revenexx/studio-integrations
v1.3.0
Published
Integration Studio (core: workflows, node editor, runs, schedules, credentials, secrets, audit) as a standalone, publishable Nuxt module.
Keywords
Readme
@revenexx/studio-integrations
The revenexx Integration Studio (core: Dashboard, Workflows + node editor,
Runs, Schedules, Credentials, Secrets, Audit) as a distributable Nuxt module.
Registers its /integrations/* pages, components and composables. Data/auth flow
through the usePlatformAuth / usePlatformTenant seam (from
@revenexx/studio-shared).
Install
Public on npm — no registry config or token needed:
pnpm add @revenexx/studio-integrations @revenexx/studio-shared @revenexx/studioUse
// nuxt.config.ts
export default defineNuxtConfig({
// studio-shared is a Nuxt MODULE since 0.2.0 (shell primitives by their
// bare names + the platform provider) — do NOT `extends` it anymore.
modules: ['@solar-icons/nuxt', '@revenexx/studio-shared', '@revenexx/studio-integrations'],
})Point it at your Integrations backend via NUXT_PUBLIC_INTEGRATIONS_API and
supply a token/tenant through the platform provider (override
usePlatformAuth / usePlatformTenant, or the standalone defaults read
NUXT_PUBLIC_DEV_TOKEN / NUXT_PUBLIC_DEV_TENANT).
Language
The studio speaks English and German. That covers both halves of a screen: the text node packages publish (names, descriptions, settings) and the studio's own chrome — headings, buttons, tabs, empty states, toasts. Both fall back to English. The studio has no switcher of its own, so hand the choice over one of two ways:
// nuxt.config.ts — a language that does not change
export default defineNuxtConfig({
studioIntegrations: { locale: 'de' }, // or NUXT_PUBLIC_STUDIO_INTEGRATIONS_LOCALE
})// a host plugin — a language the user switches while the app is running
const { setLocale } = useIntegrationsLocale()
watch(hostLocale, l => setLocale(l), { immediate: true })A switch reaches surfaces that are already open; nothing is refetched. With
neither wired, the studio is English. The module carries its own message
catalogue (runtime/i18n/messages/*.json) — it never reads the host's, and needs
no i18n library installed in the host. See
docs/interface-language.md.
⚠️ Tailwind: you MUST scan this package
The module ships its runtime as source-ish .vue; Tailwind generates the
classes from your build. Scan both this module and studio-shared, or
component styling silently breaks:
@import "tailwindcss";
@import "@revenexx/studio/tokens";
@import "@revenexx/studio/fonts";
@source "../node_modules/@revenexx/studio-shared/dist/runtime";
@source "../node_modules/@revenexx/studio-integrations/dist/runtime";Adjust the relative paths to reach node_modules from your CSS file.
Peers
@revenexx/studio, @revenexx/studio-shared ^0.2 (module form), nuxt ^4, vue ^3.5,
@vue-flow/* + @dagrejs/dagre (workflow editor), lucide-vue-next; register
@solar-icons/nuxt in the host.
Develop
This repo is the source of truth for the module (it used to live in the
cockpit monorepo under packages/studio-integrations).
pnpm install # runs the module `prepare` (nuxt-module-build)
pnpm test # vitest
pnpm build # dist/
pnpm changeset # record what your change does to the versionBranch off main as feature/<desc>, fix/<desc> or chore/<desc> — GitHub refuses
the first push of any other name, and main itself takes a reviewed pull request with
CI green: docs/branch-protection.md. A separate,
non-blocking Security Scan reports secrets and dependency advisories:
docs/security-scanning.md.
Hosts to develop against:
- Playground (
playground/, in this repo): thin standalone Nuxt host that loads the module fromsrc/— seeplayground/README.mdfor the full runbook against a local integrations service (docker compose -f playground/docker-compose.dev.yml up). - Cockpit (
../revenexx-cockpit): its dev server loads this module from the sibling checkout'ssrc/module.tsautomatically (dev-from-source, see the cockpit'snuxt.config.ts). Editsrc/**here, the cockpit HMRs. - Integrations service (
../integrations): thestudio-uidev host consumes a packed tarball —studio-ui/scripts/pack-vendor.shbuilds and packs this repo intostudio-ui/vendor/.
Release
Versioning is driven by Changesets,
so version in package.json is never edited by hand. Every pull request
records what it does to the version — CI fails without it:
pnpm changeset # pick patch/minor/major, then write the note
pnpm changeset --empty # …for a PR that intentionally releases nothingReleasing is then merging a pull request. Pushes to main that carry changesets
make CI open a "Version Packages" PR with the bump and CHANGELOG.md
applied; merging that PR publishes to npm (Trusted Publishing over OIDC, no
token) and notifies the cockpit.
Full policy, the SemVer contract, and why publishing is deliberately not
changeset publish: docs/versioning.md.
