On this page
  1. Install
  2. Compose the intake
  3. Persistence and events
  4. Boundary
  5. API entry points and requirements
  6. Peer dependencies

@playstack/feedback

Durable intake contract for product feedback and failed-command reports sent by the CLI.

Paid. Covered by the Playstack Pro License; access and tier assignment are not yet announced. See package access.

@playstack/feedback defines the schema-version-1 report that playstack feedback sends, a framework-neutral intake policy with validation, per-address limiting and address hashing, the FeedbackStore port with memory and Prisma implementations, and the feedback.report.received event. It is not ticketing and not telemetry: nothing is sent without an explicit client action, the intake never reads reports back, and it never sends mail.

Install

After confirming preview access, install the package at your application's shared Playstack version:

sh
npm install --save-exact @playstack/feedback@0.1.0-beta.1

Check the peer requirements below before choosing a runtime or provider.

Compose the intake

ts
import { createFeedbackIntake } from '@playstack/feedback'
import { PrismaFeedbackStore } from '@playstack/feedback/prisma'
import { PrismaEventOutboxWriter } from '@playstack/events-prisma'

const intake = createFeedbackIntake({
  store: new PrismaFeedbackStore(prisma, { outbox: new PrismaEventOutboxWriter() }),
  limiter: { consume: ({ ip }) => limiter.consume('feedback.ip', { subjects: { ip } }) },
  hashAddress: (ip) => keyedHash(ip),
})

const decision = await intake.limit(ip) // before reading any body
const { id, acceptance } = await intake.accept(body, { ip }) // 'created' | 'duplicate'

accept throws FeedbackError('invalid_report') with path detail for schema failures and never echoes the submitted message. Duplicate ids are acknowledged without a second row or event, so client retries are safe. The report carries a category (bug, idea, question, other), the message, optional contact, CLI build identity, runtime facts, and the redacted failure record playstack feedback --last attaches.

Persistence and events

publish/playstack-feedback.prisma is the managed database artifact, materialized by playstack database sync. PrismaFeedbackStore is structurally typed against a generated client and takes the application's outbox writer, so the store and the feedback.report.received event commit together. Notification and triage workers consume that event; the intake itself stays write-only.

Boundary

HTTP lives in @playstack/nest-feedback. Reading reports back, replying, and closing them are application workflows outside this package.

API entry points and requirements

Reference snapshot: @playstack/feedback@0.1.0-beta.1. Import only the entry point your runtime needs. Paths below are relative to the installed package; use Go to Definition in your editor to inspect exact parameters, return types and overloads. Do not import the declaration-file paths directly.

Public entry pointDeclaration file
@playstack/feedback./dist/index.d.ts
@playstack/feedback/errors./dist/errors.d.ts
@playstack/feedback/prisma./dist/prisma.d.ts
@playstack/feedback/testing./dist/testing.d.ts
@playstack/feedback/playstack.artifacts.jsonNo TypeScript declaration (asset or metadata export).
@playstack/feedback/package.jsonNo TypeScript declaration (asset or metadata export).

Node.js engine requirement: >=20. This is not a claim that every entry point works in browsers or Workers.

Peer dependencies

This package declares no peer dependencies. Its ordinary dependencies are resolved by the package manager.

For a complete first program, start with Getting started. For API lookup and partial-example conventions, see Reading the reference. Provider failures, lifecycle requirements and application responsibilities remain described in the guide above; types alone do not establish production safety.

Go

Playstack Pro tag
OriginsPricingBlogNewsletterChangelogStatusRoadmap
ContributorsCommunityIn Use ShowcaseCase StudiesPartnersSponsors
FAQsSupportContact

© 2026 Playstack. All rights reserved.

With OSS
Terms of ServicePrivacy PolicyCookie PolicyImprint

By

Commune Software