Docs

Add feature requests to your app

Install YouAsked, pick where people ask, sign your users and ship from a commit. Everything here is also in plain Markdown at /install.md for your coding agent.

Install

In a React or Next.js project, run this in the project root. It finds your framework, creates the app, writes the keys to your env file and adds the components you choose.

Terminal
$ npx youasked init

Or let your coding agent do it. Paste this into Claude Code, Codex or Cursor:

Prompt
Add YouAsked to this app so people can ask for features, vote, and hear when what they asked for ships.

Read https://youasked.dev/install.md and follow it from start to finish:
1. Before changing anything, work out the platforms (web, React Native or Expo, or both) and how the app is laid out.
2. Propose where the entry points should go and why, and whether users will be signed in. Wait for my OK, and ask me anything you can't tell from the code.
3. Set it up with `npx youasked init`, sign users on the server if the app has sign-in, and match our theme in light and dark.
4. Test every entry point on localhost or a dev build.
5. Finish with what changed, where each entry point lives, and what I need to do to go live.

To do it by hand:

Terminal
npm i @youasked/react
.env.local
NEXT_PUBLIC_YOUASKED_KEY=ya_pub_…   # publishable, safe in client code
YOUASKED_SECRET_KEY=ya_sec_…        # server only, never ship it to the browser

Wrap the app once, near the root. In the Next.js App Router, put it in a client component and use it in the root layout:

app/feature-requests.tsx
"use client";
import { YouAsked } from "@youasked/react";

export function FeatureRequests({ children }: { children: React.ReactNode }) {
  return (
    <YouAsked appKey={process.env.NEXT_PUBLIC_YOUASKED_KEY!} trigger="none">
      {children}
    </YouAsked>
  );
}

trigger="floating" (the default) adds a chat-bubble launcher in the corner. Use "none" when the app has a bottom tab bar or you prefer inline entry points.

Test mode

Until a plan is active, your app is in test mode: it answers widget requests only from local origins (localhost, 127.0.0.1 and *.localhost). You can install it, ask for something in your own app and see the request reach you, all for free. Visitors on your real domain see nothing until you subscribe. Every plan has a 14-day money-back guarantee, see pricing.

Entry points

Choose what fits your UI. All of them open the same chat-style sheet.

ComponentUse it for
<AskBar />A chat-style input at the top of a home screen or under an empty state
<FeatureCard />Top requests with vote buttons on a dashboard
<RequestButton variant="icon" />A round button in a header, with a badge when something ships
<RequestButton variant="row" />A row in a settings menu
<RequestButton variant="pill" />A tinted pill anywhere
<FeatureBoard />The whole experience inline on a /feedback page
useYouAsked().open({ view: "new", draft: "Export to Excel" })From any button, for example a locked feature

More ways to ask

  • Show us. The composer has a button that lets people drag boxes over what they mean on your page. A screenshot goes with their message. The screenshot library loads only when someone taps it.
  • <AskAbout topic="charts" /> is a quiet link next to a feature. It opens the composer asking “What would make charts better?” and saves the topic with the request.
  • <AskForIt query={searchText} /> belongs in empty search states: “Can’t find ‘export’? Ask for it”.
  • What’s new. When people open the sheet, they see what shipped since they were last shown the list, with a small celebration if it was theirs.
  • Credit and early access. Identified users with a name can tick “Credit me when it ships”, and voters on planned requests can tap “Try it early”.
  • <YouAsked demo /> needs no key and no network. It shows sample requests and a pretend team that replies, for docs, Storybook and landing pages.

Identify your users

Without this, visitors are anonymous (one ID per device). If your app has sign-in, sign the user’s ID on your server so nobody can vote as someone else:

app/api/youasked/identity/route.ts
import { signUser } from "@youasked/react/server";

export async function GET() {
  const user = await getCurrentUser(); // your auth
  if (!user) return Response.json({ error: "Unauthorized" }, { status: 401 });
  return Response.json({
    userId: user.id,
    signature: await signUser(process.env.YOUASKED_SECRET_KEY!, user.id),
  });
}

Pass the result to the provider: user={{ id: userId }} signature={signature} ready={loaded}. Email and name are optional; send them only if you want your team to see them. Signatures are HMAC-SHA256 of the user ID, made with your secret key.

Theming

YouAsked reads shadcn tokens (--primary, --background, --radius) on its own, and follows your .dark class or data-theme. Otherwise, pass an appearance:

TSX
<YouAsked
  appearance={{ accent: "var(--accent)", background: "var(--card)", radius: 16, fontFamily: "inherit" }}
/>

Integrations

  • Telegram. Every request lands in a chat with buttons for Planned, Shipped, Reply and Merge. Replying to a card answers the requester inside your app.
  • Slack and Discord. A message for each request and each ship, through a webhook.
  • GitHub. Add the webhook shown in the dashboard. Then closes YA-12 in a commit on the default branch, or in a merged pull request, marks YA-12 shipped.

Ship a request

Every request has a number, like YA-12. Put closes YA-12 in a commit message or merged pull request and YouAsked marks it shipped, drafts the note from your commit and tells everyone who asked. Every shipped request also gets a share page and a “You asked, it’s live” image you can post.

Public board

Turn on a public board and your requests, roadmap and changelog live at youasked.dev/your-app, where search engines can find them. Set a slug and switch it on from the dashboard, or with the admin API:

Terminal
curl -X PATCH https://api.youasked.dev/v1/admin/app \
  -H "Authorization: Bearer $YOUASKED_SECRET_KEY" \
  -d '{"slug": "your-app", "publicBoard": true, "description": "What your app does."}'

Public pages show titles, vote counts, statuses and ship notes. They never show emails, user IDs or request text. A shipped request’s share page at youasked.dev/your-app/shipped/12 works even when the board itself is private.

MCP server

Let your coding agent read the top requests, build them and ship them.

Terminal
claude mcp add youasked -e YOUASKED_SECRET_KEY=ya_sec_… -- npx -y @youasked/mcp

It gives your agent tools to list, read, search, reply to, merge and ship requests. More on the MCP server page.

CLI

youasked initSets up this project: creates the app, saves the keys, installs the package and wraps your app. Safe to run again.
youasked doctorChecks the env vars, the install and that the API accepts your keys.
youasked openPrints your dashboard URL.

init takes --yes (every default), --no-install, --key and --secret (reuse an app) and --api. It can also add a Claude Code skill and a short section in AGENTS.md.

React Native and Expo

@youasked/react-native has the same components and props as the web package, drawn with native views: a bottom sheet you can swipe away, keyboard-aware, with the Android back button and haptics. It needs nothing beyond React Native itself, so it works in Expo Go. youasked init sets it up in an Expo app.

Terminal
npm i @youasked/react-native
npx expo install @react-native-async-storage/async-storage expo-haptics   # optional
app/_layout.tsx
import { YouAsked } from "@youasked/react-native";

export default function RootLayout() {
  return (
    <YouAsked appKey={process.env.EXPO_PUBLIC_YOUASKED_KEY!} trigger="none">
      <Stack />
    </YouAsked>
  );
}

Then add <RequestButton variant="row" /> to a settings screen, <RequestButton variant="icon" /> to a header or <FeatureCard /> to a home screen. Sign users on your server, never in the app. Dev builds work in test mode. Swift and Flutter come next.

Self-hosting

The server is source-available under FSL-1.1-MIT. You can read it, run it and self-host it for your own apps, but not offer it as a competing hosted service, and each release becomes MIT two years after it ships. It’s a Hono app on Cloudflare Workers and D1. The widget, CLI and MCP server are MIT. Point the packages at your own server with apiUrl and YOUASKED_API_URL.

Source: github.com/youasked/youasked.