Detent One for developers 1 snap per hunk · 1 line per click

Feel the diff.

Magnet snaps through hunks, problems and search results. Ratchet walks the undo stack. Press to step the debugger.

One email when the list opens 10.20. Nothing else.

Free. Every friend who confirms earns you a reward.

Fully refundable. Locks the $299 launch price.

$299 until 12.04. Free shipping.

$349. Free shipping, 60-day studio trial.

PR 482 · Cancel stale searches Magnet Hunks
src/search/client.ts 18 lines added, 8 removed 0 / 6 viewed
@@ -1,4 +1,5 @@ Viewed
import { fetchResults } from './api';
Added: import type { Result } from './api';
Removed: const DELAY = 300;
Added: const DELAY_MS = 180;
const MIN_QUERY = 2;
@@ -14,6 +15,7 @@ export function createSearch(input: HTMLInputElement) { Viewed
let timer: number | undefined;
Added: let inflight: AbortController | undefined;
input.addEventListener('input', () => {
clearTimeout(timer);
Removed: timer = setTimeout(run, DELAY);
Added: timer = window.setTimeout(run, DELAY_MS);
});
@@ -27,6 +29,11 @@ export function createSearch(input: HTMLInputElement) { Viewed
async function run() {
const q = input.value.trim();
Removed: if (q.length < MIN_QUERY) return;
Removed: const results = await fetchResults(q);
Removed: render(results);
Added: if (q.length < MIN_QUERY) return render([]);
Added: inflight?.abort();
Added: inflight = new AbortController();
Added: try {
Added: render(await fetchResults(q, { signal: inflight.signal }));
Added: } catch (err) {
Added: if ((err as Error).name !== 'AbortError') throw err;
Added: }
}
@@ -52,3 +59,3 @@ Viewed
Removed: function render(results: any[]) {
Removed: list.innerHTML = '';
Added: function render(results: Result[]) {
Added: list.replaceChildren();
for (const r of results) {
@@ -70,2 +77,5 @@ function render(results: Result[]) { Viewed
list.hidden = results.length === 0;
Added: status.textContent = results.length
Added: ? `${results.length} results`
Added: : 'No matches. Try fewer words.';
}
@@ -88,2 +98,2 @@ Viewed
Removed: export const VERSION = '1.3.0';
Added: export const VERSION = '1.4.0';
Detent One in Graphite, seen from directly above, the round display dark
Feel

Drag the dial, scroll over it, or focus it and use the arrow keys. Press it to mark a hunk viewed.

Magnet, computed: restoring torque across 1½ turns Snap points set by the app (6 shown)

Where your place goes.

  • Losing your place in a 900-line diff

    Magnet One snap per hunk

    Magnet snaps to every hunk, problem and search result. Turn to the next change, press to mark it viewed. Your place in the review is wherever the knob is.

    VS Code Try it on the demo

  • Undo-undo-undo-redo

    Ratchet One undo step per click

    Ratchet walks the undo stack one click per step, in both directions. Overshoot by one and you turn back by one, not three shortcuts.

    VS Code

  • Stepping a debugger with F10 for the 200th time

    Ratchet One line per click

    Each click steps the debugger one line; press the knob to continue. The same detent you feel is the line you move.

    VS Code, Xcode Try it on the demo

In the editor, the debugger and the shell.

Detent Studio notices which app is in front and loads its profile before your hand gets there. Every other app still gets system controls out of the box: scroll, zoom, undo, volume, brightness and media.

  • VS Code

    Magnet snaps through diff hunks and problems; Ratchet walks the undo stack.

    Default feel: Magnet Native

  • Xcode

    Step the debugger one line per click; press to continue.

    Default feel: Ratchet Community

  • Terminal

    Scroll history in Fluid, cycle shells and tabs in Clock.

    Default feel: Fluid Native

Native ships in Detent Studio. Plugin is a free extension that installs into the app. Community profiles are open-source, written with the SDK.

All 17 apps

“Magnet mode through a code review is ridiculous. It snaps to each hunk. I review faster and I look at every change.”

Priya Raman Staff engineer Tested with Magnet

Illustrative note from an early-tester persona. Detent is a concept product and has no customers yet.

Hardware with a readable SDK.

Open SDK in TypeScript and Rust, Apache-2.0 firmware, profiles in plain JSON. No account, no telemetry by default.

Detent One

Launch price $299 Regular price $349

$349

The dial. Every feel, every integration, every update.

  • Raw
  • Graphite
  • Glacier

or 4 interest-free payments of $87.25.

Founders Edition

$449 0001 to 2000

Numbered 0001–2000 in Tally red, with a machined walnut plinth.

  • Tally, numbered

One email when the list opens 10.20. Nothing else.

Free. Every friend who confirms earns you a reward.

Fully refundable. Locks the $299 launch price.

$299 until 12.04. Free shipping.

$349. Free shipping, 60-day studio trial.

Detent is a concept product. This site is a design and engineering demonstration; nothing is for sale and no payment or personal data is collected.

  • $20 deposit, fully refundable until your Detent ships
  • Batch 1 ships February 2027, Batch 2 in April 2027
  • 60-day studio trial, prepaid return label
  • 3-year warranty, parts and labor
  • Free shipping, duties included
  • Four Torx screws to open it; battery and foot sold as parts

Questions developers ask.

Every answer, in one place
Can I write my own profile?

Yes. A profile is plain JSON: detent count, strength, damping, spring, end stops and snap points. The SDK lets any app switch profiles and read the knob; most community profiles take an evening.

Does it need a daemon running?

Detent Studio runs locally to switch profiles per app. Without it, the dial still works as a HID and MIDI device using the 64 profiles stored on it.

What is software-defined haptics?

Instead of a mechanical click, a small brushless motor pushes back on your fingers. Firmware decides where the clicks are, how strong they feel, whether it springs back or stops dead, and it can change that per app in about a millisecond.

Do I need an account?

No. Detent Studio runs locally, profiles live on the device, and nothing is sent anywhere unless you opt in to crash reports.

How does the $20 reservation work?

A $20 deposit holds your place and locks the $299 launch price on Detent One. The Founders Edition is always $449; its $50 deposit holds one numbered serial. When your batch is ready we email a ship date and a link to pay the rest; the deposit comes off the price. Cancel any time before it ships for a full refund, one click, no questions.

What if I do not love it?

Use it for 60 days. If it has not earned its spot on your desk, send it back with the prepaid label for a full refund.