Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,14 @@ Dictx supports command-line parameters on all platforms for integration with scr

Access debug features: `Cmd+Shift+D` (macOS) or `Ctrl+Shift+D` (Windows/Linux)

## License & Distribution

Dictx is licensed under **GPL-3.0-or-later**. See `LICENSE` and `NOTICE` for details.

**Monetization model**: Open source code + paid signed binary ($29 one-time via Gumroad). All features are available when building from source — no feature gating, no license key validation. The paid product is the convenience of a signed binary with auto-updates.

**Purchase links**: Gumroad product page at `https://0xnyk.gumroad.com/l/dictx`. This URL appears in `AboutSettings.tsx`, `Onboarding.tsx`, and `README.md`.

## Platform Notes

- **macOS**: Metal acceleration, accessibility permissions required
Expand Down
700 changes: 678 additions & 22 deletions LICENSE

Large diffs are not rendered by default.

34 changes: 34 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Dictx — Privacy-First Desktop Speech-to-Text
=============================================

License: GNU General Public License v3.0 (GPL-3.0-or-later)
See LICENSE for the full license text.


License History
---------------

This project was originally released as "Handy" by CJ Pais under the
MIT License (Copyright 2025 CJ Pais).

Source: https://github.com/cjpais/Handy

The project was forked and rebranded as "Dictx" by 0xNyk. Starting with
this fork, the license was changed from MIT to GPL v3. This relicense is
permitted because:

1. MIT is a permissive license that allows sublicensing under any terms,
including GPL v3.
2. All original MIT-licensed code retains its copyright attribution to
CJ Pais as required by the MIT license terms.
3. All new code contributed to the Dictx fork is licensed under GPL v3.


Attribution
-----------

Original author: CJ Pais (https://github.com/cjpais)
Fork maintainer: 0xNyk (https://github.com/0xNyk)

Third-party dependencies are listed in Cargo.toml (Rust) and
package.json (TypeScript/React). Each dependency retains its own license.
65 changes: 41 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@
<strong>Privacy-first desktop speech-to-text that runs entirely on your machine.</strong>
</p>

<p align="center">
<a href="https://github.com/0xNyk/dictx/releases"><img src="https://img.shields.io/github/v/release/0xNyk/dictx?label=Download&style=for-the-badge&color=4f46e5" alt="Download" /></a>
&nbsp;
<a href="https://0xnyk.gumroad.com/l/dictx"><img src="https://img.shields.io/badge/Get_Dictx_Pro-$29-10b981?style=for-the-badge" alt="Get Dictx Pro" /></a>
</p>

<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/license-GPL--3.0-blue.svg" alt="GPL-3.0" /></a>
<a href="https://github.com/0xNyk/dictx/stargazers"><img src="https://img.shields.io/github/stars/0xNyk/dictx?style=social" alt="Stars" /></a>
</p>

<p align="center">
<a href="#installation">Installation</a> &middot;
<a href="#how-it-works">How It Works</a> &middot;
Expand All @@ -17,6 +28,8 @@

---

> **Free and open source.** Dictx is GPL-3.0 licensed — you can build it from source with full functionality. [Buy Dictx Pro](https://0xnyk.gumroad.com/l/dictx) ($29 one-time) for a signed binary, auto-updates, and to support development.

Dictx is a cross-platform desktop application for speech transcription. Press a shortcut, speak, and your words appear in any text field — no cloud, no API keys, no data leaving your computer.

Built with [Tauri](https://tauri.app) (Rust + React/TypeScript). Forked from [Handy](https://github.com/cjpais/Handy) by cjpais.
Expand All @@ -36,13 +49,14 @@ Built with [Tauri](https://tauri.app) (Rust + React/TypeScript). Forked from [Ha

Download the latest release for your platform from the [Releases page](https://github.com/0xNyk/dictx/releases).

| Platform | Format |
|----------|--------|
| macOS | `.dmg` |
| Windows | `.msi` |
| Linux | `.AppImage` / `.deb` |
| Platform | Format |
| -------- | -------------------- |
| macOS | `.dmg` |
| Windows | `.msi` |
| Linux | `.AppImage` / `.deb` |

After installation:

1. Launch Dictx and grant the required permissions (microphone, accessibility on macOS)
2. Select and download a transcription model
3. Configure your keyboard shortcut in Settings
Expand All @@ -59,13 +73,13 @@ After installation:

### Models

| Model | Type | Speed | Accuracy | Requirements |
|-------|------|-------|----------|--------------|
| Whisper Small | GPU | Fast | Good | GPU recommended |
| Whisper Medium | GPU | Moderate | Better | GPU recommended |
| Whisper Turbo | GPU | Fast | Very Good | GPU recommended |
| Whisper Large | GPU | Slower | Best | GPU required |
| Parakeet V3 | CPU | Fast | Very Good | CPU only, auto language detection |
| Model | Type | Speed | Accuracy | Requirements |
| -------------- | ---- | -------- | --------- | --------------------------------- |
| Whisper Small | GPU | Fast | Good | GPU recommended |
| Whisper Medium | GPU | Moderate | Better | GPU recommended |
| Whisper Turbo | GPU | Fast | Very Good | GPU recommended |
| Whisper Large | GPU | Slower | Best | GPU required |
| Parakeet V3 | CPU | Fast | Very Good | CPU only, auto language detection |

## Obsidian Integration

Expand Down Expand Up @@ -100,6 +114,7 @@ dictx --debug # Enable verbose logging
Combine flags for autostart scenarios: `dictx --start-hidden --no-tray`

> **macOS:** When installed as an app bundle, invoke the binary directly:
>
> ```bash
> /Applications/Dictx.app/Contents/MacOS/Dictx --toggle-transcription
> ```
Expand Down Expand Up @@ -130,23 +145,25 @@ src/ React/TypeScript frontend
## Platform Notes

### macOS

- Metal acceleration for Whisper models
- Requires Accessibility and Microphone permissions
- Debug mode: `Cmd+Shift+D`

### Windows

- Vulkan acceleration for Whisper models
- Debug mode: `Ctrl+Shift+D`

### Linux

Requires a text input tool for reliable typing:

| Display Server | Tool | Install |
|---|---|---|
| X11 | `xdotool` | `sudo apt install xdotool` |
| Wayland | `wtype` | `sudo apt install wtype` |
| Both | `dotool` | `sudo apt install dotool` |
| Display Server | Tool | Install |
| -------------- | --------- | -------------------------- |
| X11 | `xdotool` | `sudo apt install xdotool` |
| Wayland | `wtype` | `sudo apt install wtype` |
| Both | `dotool` | `sudo apt install dotool` |

- Recording overlay disabled by default (compositors may treat it as active window)
- If issues occur, try: `WEBKIT_DISABLE_DMABUF_RENDERER=1 dictx`
Expand All @@ -158,21 +175,21 @@ Requires a text input tool for reliable typing:

If you're behind a proxy or firewall, models can be installed manually. Download the model files and place them in the app data directory:

| Platform | Path |
|----------|------|
| macOS | `~/Library/Application Support/com.0xnyk.dictx/` |
| Windows | `C:\Users\{username}\AppData\Roaming\com.0xnyk.dictx\` |
| Linux | `~/.config/com.0xnyk.dictx/` |
| Platform | Path |
| -------- | ------------------------------------------------------ |
| macOS | `~/Library/Application Support/com.0xnyk.dictx/` |
| Windows | `C:\Users\{username}\AppData\Roaming\com.0xnyk.dictx\` |
| Linux | `~/.config/com.0xnyk.dictx/` |

## Contributing

Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## License

MIT License. See [LICENSE](LICENSE) for details.
GPL-3.0. See [LICENSE](LICENSE) for details and [NOTICE](NOTICE) for attribution and license history.

Originally created by [cjpais](https://github.com/cjpais) as [Handy](https://github.com/cjpais/Handy). Forked and extended by [0xNyk](https://github.com/0xNyk).
Originally created by [cjpais](https://github.com/cjpais) as [Handy](https://github.com/cjpais/Handy) (MIT). Forked and extended by [0xNyk](https://github.com/0xNyk) under GPL-3.0.

## Acknowledgments

Expand Down
4 changes: 4 additions & 0 deletions src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2025 CJ Pais — original Handy project (MIT)
// Copyright (C) 2026 0xNyk — Dictx fork (GPL-3.0-or-later)

mod actions;
#[cfg(all(target_os = "macos", target_arch = "aarch64"))]
mod apple_intelligence;
Expand Down
4 changes: 4 additions & 0 deletions src-tauri/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2025 CJ Pais — original Handy project (MIT)
// Copyright (C) 2026 0xNyk — Dictx fork (GPL-3.0-or-later)

// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

Expand Down
4 changes: 4 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2025 CJ Pais — original Handy project (MIT)
// Copyright (C) 2026 0xNyk — Dictx fork (GPL-3.0-or-later)

import { useEffect, useState, useRef } from "react";
import { Toaster } from "sonner";
import { useTranslation } from "react-i18next";
Expand Down
9 changes: 9 additions & 0 deletions src/components/onboarding/Onboarding.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { toast } from "sonner";
import { openUrl } from "@tauri-apps/plugin-opener";
import type { ModelInfo } from "@/bindings";
import type { ModelCardStatus } from "./ModelCard";
import ModelCard from "./ModelCard";
Expand Down Expand Up @@ -126,6 +127,14 @@ const Onboarding: React.FC<OnboardingProps> = ({ onModelSelected }) => {
/>
))}
</div>

<button
type="button"
className="text-text/40 text-xs mt-2 underline hover:text-text/60 transition-colors bg-transparent border-none cursor-pointer"
onClick={() => openUrl("https://0xnyk.gumroad.com/l/dictx")}
>
{t("onboarding.supportCta")}
</button>
</div>
</div>
);
Expand Down
8 changes: 4 additions & 4 deletions src/components/settings/about/AboutSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ export const AboutSettings: React.FC = () => {
fetchVersion();
}, []);

const handleDonateClick = async () => {
const handleGetProClick = async () => {
try {
await openUrl("https://github.com/0xNyk/dictx");
await openUrl("https://0xnyk.gumroad.com/l/dictx");
} catch (error) {
console.error("Failed to open donate link:", error);
console.error("Failed to open purchase link:", error);
}
};

Expand All @@ -53,7 +53,7 @@ export const AboutSettings: React.FC = () => {
description={t("settings.about.supportDevelopment.description")}
grouped={true}
>
<Button variant="primary" size="md" onClick={handleDonateClick}>
<Button variant="primary" size="md" onClick={handleGetProClick}>
{t("settings.about.supportDevelopment.button")}
</Button>
</SettingContainer>
Expand Down
7 changes: 4 additions & 3 deletions src/i18n/locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
"description": "Russian speech recognition. Fast and accurate."
}
},
"supportCta": "Get Dictx Pro — signed binary with auto-updates ($29)",
"errors": {
"loadModels": "Failed to load available models",
"downloadModel": "Failed to download model: {{error}}"
Expand Down Expand Up @@ -506,9 +507,9 @@
"button": "View on GitHub"
},
"supportDevelopment": {
"title": "Support Development",
"description": "Help us continue building Dictx",
"button": "Donate"
"title": "Get Dictx Pro",
"description": "Signed binary with auto-updates. $29 one-time — supports development.",
"button": "Get Dictx Pro"
},
"acknowledgments": {
"title": "Acknowledgments",
Expand Down
Loading