Quickstart
Harkly needs one thing from your app: who the customer is. Everything else — boards, roadmap, changelog, help center, messenger — is hosted and ready.
1. Get your public key
Sign in at app.harkly.app, create a workspace, and
copy the public key from Settings → SDK & install. It starts with
hk_pub_ and is safe to ship in a browser.
2. Install the SDK
npm install @harkly/js
Or drop in the script tag and skip the bundler:
<script src="https://cdn.harkly.app/v1/harkly.iife.js" defer></script>
3. Initialize and identify
import { init, identify } from "@harkly/js";
init({ publicKey: "hk_pub_…" });
// once you know who they are
identify({ id: user.id, email: user.email, name: user.name, plan: user.plan, mrr: user.mrr });
identify accepts any flat attributes; Harkly types them on first sight, so
{ seats: 3, beta: true } becomes filterable the moment it arrives. Pass a
company too and votes are deduplicated per company.
4. Open a widget
import { feedback, updates, messenger } from "@harkly/js";
feedback({ board: "feature-requests" }); // the post form, as a modal
updates(); // the changelog panel with an unread badge
messenger(); // the launcher, bottom-right
Your portal is live at https://<workspace>.harkly.app from the start; the
widgets are the same pages inside an iframe, so a customer who posts from
the widget can follow the thread on the portal.
5. Trust who they say they are
A public key can identify a person but can never change an email. To let Harkly trust an email change, sign a JWT with the workspace's SSO secret and pass it along:
identify(user, { jwt: await fetch("/api/harkly-token").then((r) => r.text()) });
The token is HS256, sub is the user id, and it is verified on every call.
See Identity for the server side.
Next
- React —
<HarklyProvider>,<FeedbackButton>,<Messenger> - iOS and macOS — HarklyKit for SwiftUI
- API — everything the dashboard can do, with a key
- Self-hosting — one machine, ten minutes